Major rework of piwigo_refresh.pl to also support updating already synced photos

Fix folder sync function was also updating files
This commit is contained in:
2019-05-24 16:56:43 +02:00
parent 484d83c318
commit 178cf76fdb
2 changed files with 162 additions and 80 deletions

View File

@@ -12,6 +12,7 @@
# --directory=absolute path to your photos # --directory=absolute path to your photos
# [--caddie=0 or 1] # [--caddie=0 or 1]
# [--privacy_level=4 or 8] # [--privacy_level=4 or 8]
# [--meta_all=0 of 1]
# [--cat=categorie_id] # [--cat=categorie_id]
# [--subcat=0 or 1] # [--subcat=0 or 1]
@@ -33,18 +34,19 @@ use Digest::MD5 qw/md5 md5_hex/;
my %opt = (); my %opt = ();
GetOptions( GetOptions(
\%opt, \%opt,
qw/ qw/
base_url=s base_url=s
site=s site=s
username=s username=s
password=s password=s
directory=s directory=s
caddie=s caddie=s
privacy_level=s privacy_level=s
cat=s meta_all=s
subcat=s cat=s
/ subcat=s
/
); );
my $album_dir = $opt{directory}; my $album_dir = $opt{directory};
@@ -56,22 +58,23 @@ $ua->cookie_jar({});
my %conf; my %conf;
my %conf_default = ( my %conf_default = (
base_url => 'http://localhost:81/piwigogit', base_url => 'http://localhost:81/piwigogit',
site => 1, site => 1,
username => 'plg', username => 'plg',
password => 'plg', password => 'plg',
caddie => 0, caddie => 0,
privacy_level => 4, privacy_level => 4,
cat => 162, meta_all => 0,
subcat => 1, cat => 162,
subcat => 1,
); );
foreach my $conf_key (keys %conf_default) { foreach my $conf_key (keys %conf_default) {
$conf{$conf_key} = defined $opt{$conf_key} ? $opt{$conf_key} : $conf_default{$conf_key} $conf{$conf_key} = defined $opt{$conf_key} ? $opt{$conf_key} : $conf_default{$conf_key}
} }
$ua->default_headers->authorization_basic( $ua->default_headers->authorization_basic(
$conf{username}, $conf{username},
$conf{password} $conf{password}
); );
my $result = undef; my $result = undef;
@@ -89,65 +92,121 @@ piwigo_refresh();
#--------------------------------------------------------------------- #---------------------------------------------------------------------
sub piwigo_login { sub piwigo_login {
$ua->post( $ua->post(
$conf{base_url}.'/ws.php?format=json', $conf{base_url}.'/ws.php?format=json',
{ {
method => 'pwg.session.login', method => 'pwg.session.login',
username => $conf{username}, username => $conf{username},
password => $conf{password}, password => $conf{password},
} }
); );
} }
sub piwigo_refresh { sub piwigo_refresh {
if ($conf{cat} > 0) my $noMetaCat =
{ [
$ua->post( 'sync' => 'files',
$conf{base_url}.'/admin.php?page=site_update&site='.$conf{site}, 'display_info' => 0,
{ 'add_to_caddie' => $conf{caddie},
sync => 'files', 'privacy_level' => $conf{privacy_level},
display_info => 0, 'sync_meta' => 1,
add_to_caddie => $conf{caddie}, 'simulate' => 0,
privacy_level => $conf{privacy_level}, 'cat' => $conf{cat},
sync_meta => 1, 'subcats-included' => $conf{subcat},
simulate => 0, 'submit' => 1,
cat => $conf{cat}, ];
'subcats-included' => $conf{subcat}, my $wMetaCat =
submit => 1, [
} 'sync' => 'files',
); 'display_info' => 0,
} 'add_to_caddie' => $conf{caddie},
else 'privacy_level' => $conf{privacy_level},
{ 'sync_meta' => 1,
$ua->post( 'meta_all' => $conf{meta_all},
$conf{base_url}.'/admin.php?page=site_update&site='.$conf{site}, 'simulate' => 0,
{ 'cat' => $conf{cat},
sync => 'files', 'subcats-included' => $conf{subcat},
display_info => 0, 'submit' => 1,
add_to_caddie => $conf{caddie}, ];
privacy_level => $conf{privacy_level}, my $noMeta =
sync_meta => 1, [
simulate => 0, 'sync' => 'files',
#cat => $conf{cat}, 'display_info' => 0,
'subcats-included' => $conf{subcat}, 'add_to_caddie' => $conf{caddie},
submit => 1, 'privacy_level' => $conf{privacy_level},
} 'sync_meta' => 1,
); 'simulate' => 0,
} 'subcats-included' => $conf{subcat},
'submit' => 1,
];
my $wMeta =
[
'sync' => 'files',
'display_info' => 0,
'add_to_caddie' => $conf{caddie},
'privacy_level' => $conf{privacy_level},
'sync_meta' => 1,
'meta_all' => $conf{meta_all},
'simulate' => 0,
'subcats-included' => $conf{subcat},
'submit' => 1,
];
if ($conf{cat} > 0)
{
if ($conf{meta_all} > 0)
{
$ua->post($conf{base_url}.'/admin.php?page=site_update&site='.$conf{site},$wMetaCat);
}
else
{
$ua->post($conf{base_url}.'/admin.php?page=site_update&site='.$conf{site},$noMetaCat);
}
}
else
{
if ($conf{meta_all} > 0)
{
$ua->post($conf{base_url}.'/admin.php?page=site_update&site='.$conf{site},$wMeta);
}
else
{
$ua->post($conf{base_url}.'/admin.php?page=site_update&site='.$conf{site},$noMeta);
}
}
} }
sub piwigo_refreshFolder { sub piwigo_refreshFolder {
$ua->post( if ($conf{cat} > 0)
$conf{base_url}.'/admin.php?page=site_update&site='.$conf{site}, {
{ $ua->post(
sync => 'dirs', $conf{base_url}.'/admin.php?page=site_update&site='.$conf{site},
display_info => 0, {
privacy_level => $conf{privacy_level}, 'sync' => 'dirs',
sync_meta => 1, 'display_info' => 0,
simulate => 0, 'add_to_caddie' => 0,
#cat => $conf{cat}, 'privacy_level' => $conf{privacy_level},
'subcats-included' => 1, 'sync_meta' => 0,
submit => 1, 'simulate' => 0,
} 'cat' => $conf{cat},
); 'subcats-included' => $conf{subcat},
'submit' => 1,
}
);
}
else
{
$ua->post(
$conf{base_url}.'/admin.php?page=site_update&site='.$conf{site},
{
'sync' => 'dirs',
'display_info' => 0,
'privacy_level' => $conf{privacy_level},
'sync_meta' => 0,
'simulate' => 0,
'subcats-included' => 1,
'submit' => 1,
}
);
}
} }

View File

@@ -1,5 +1,15 @@
#!/bin/bash #!/bin/bash
# syncronise piwigo database
# piwirefresh.sh [OPTION] [CATEGORY] [RECURSIVE]
# OPTION
# --meta_all|-m : including already synchronised photos
# CATEGORY
# number != 0 : limit scan to only one category
# find number in dev tools on piwigos' site_update site
# RECURSIVE
# 0 or 1 : wheter to scan CATEGORY recursively
# Get script working directory # Get script working directory
# (when called from a different directory) # (when called from a different directory)
WDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >>/dev/null 2>&1 && pwd )" WDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >>/dev/null 2>&1 && pwd )"
@@ -25,6 +35,15 @@ if [ -z $mounted ] ; then
exit 1; exit 1;
fi fi
metaAll=0
case "$1" in
--meta_all|-m) # including already synchronised photos
metaAll=1
shift
;;
esac
if [ "$1" != "" ] && [ "$2" != "" ] if [ "$1" != "" ] && [ "$2" != "" ]
then then
piwiRefreshCatId=$1 piwiRefreshCatId=$1
@@ -32,7 +51,7 @@ then
fi fi
perl -w /root/script/piwigo_refresh.pl \ perl -w $WDIR/piwigo_refresh.pl \
--base_url="${piwiRefreshUrl}" \ --base_url="${piwiRefreshUrl}" \
--site=${piwiRefreshSiteId} \ --site=${piwiRefreshSiteId} \
--user="${piwiRefreshUser}" \ --user="${piwiRefreshUser}" \
@@ -40,8 +59,12 @@ perl -w /root/script/piwigo_refresh.pl \
--directory="${piwiRefreshSite}" \ --directory="${piwiRefreshSite}" \
--caddie=0 \ --caddie=0 \
--privacy_level=${piwiRefreshPrivacy} \ --privacy_level=${piwiRefreshPrivacy} \
--meta_all=${metaAll} \
--cat=${piwiRefreshCatId} \ --cat=${piwiRefreshCatId} \
--subcat=${piwiRefreshSubCatId} --subcat=${piwiRefreshSubCatId}
ENDTIME=$(date +%s) ENDTIME=$(date +%s)
echo "Refresh took: $((($ENDTIME - $STARTTIME)/60)) minutes" # Don't calculate runtime yet
# TODO there seems to be a timeout for the refresh; it always returns after 6 minutes
# although php process of piwigo is still running
#echo "Refresh took: $((($ENDTIME - $STARTTIME)/60)) minutes"