Changeset 18600
- Timestamp:
- Oct 10, 2012, 9:51:51 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
extensions/piwigo_import_tree/piwigo_import_tree.pl
r18577 r18600 32 32 quiet 33 33 only_write_cache 34 reload_properties 35 debug 34 36 / 35 37 ); … … 137 139 138 140 foreach my $image_href (@{from_json($response->content)->{result}{images}{_content}}) { 139 $photos_of_album{ $params{album_id} }{ $image_href->{file} } = 1;141 $photos_of_album{ $params{album_id} }{ $image_href->{file} } = $image_href->{id}; 140 142 } 141 143 } … … 147 149 148 150 if (defined $photos_of_album{ $params{album_id} }{ $params{file} }) { 149 return 1;151 return $photos_of_album{ $params{album_id} }{ $params{file} }; 150 152 } 151 153 else { … … 175 177 } 176 178 179 sub set_album_properties { 180 my %params = @_; 181 182 print '[set_album_properties] for directory "'.$params{dir}.'"'."\n" if $opt{debug}; 183 184 # avoid to load the readme.txt file 10 times if an album has 10 185 # sub-albums 186 our %set_album_properties_done; 187 if (defined $set_album_properties_done{ $params{id} }) { 188 print '[set_album_properties] already done'."\n" if $opt{debug}; 189 return; 190 } 191 $set_album_properties_done{ $params{id} } = 1; 192 193 $params{dir} =~ s{ / }{/}g; 194 195 # is there a file "readme.txt" in the directory of the album? 196 my $desc_filepath = $params{dir}.'/readme.txt'; 197 198 if (not -f $desc_filepath) { 199 print "no readme.txt for ".$params{dir}."\n" if $opt{debug}; 200 return; 201 } 202 203 # example of readme.txt: 204 # 205 # Title: First public opening 206 # Date: 2009-09-26 207 # Copyright: John Connor 208 # 209 # Details: 210 # The first day Croome Court is opened to the public by the National Trust. 211 # And here is another line for details! 212 213 open(IN, '<', $desc_filepath); 214 my $date_string = undef; 215 my $is_details = 0; 216 my $details = ''; 217 while (my $desc_line = <IN>) { 218 chomp($desc_line); 219 220 if ($is_details) { 221 $details.= $desc_line; 222 } 223 elsif ($desc_line =~ /^Date:\s*(.*)$/) { 224 $date_string = $1; 225 } 226 elsif ($desc_line =~ /^Details:/) { 227 # from now, all the remaining lines are "details" 228 $is_details = 1; 229 } 230 } 231 close(IN); 232 233 if (defined $date_string or $details ne '') { 234 my $comment = ''; 235 236 if (defined $date_string) { 237 $comment = '<span class="albumDate">'.$date_string.'</span><br>' 238 } 239 $comment.= $details; 240 241 my $form = { 242 method => 'pwg.categories.setInfo', 243 category_id => $params{id}, 244 comment => $comment, 245 }; 246 247 piwigo_login(); 248 249 my $response = $ua->post( 250 $conf{base_url}.'/ws.php?format=json', 251 $form 252 ); 253 } 254 } 255 256 sub set_photo_properties { 257 my %params = @_; 258 259 print '[set_photo_properties] for "'.$params{path}.'"'."\n" if $opt{debug}; 260 261 # is there any title defined in a descript.ion file? 262 my $desc_filepath = dirname($params{path}).'/descript.ion'; 263 264 if (not -f $desc_filepath) { 265 print '[set_photo_properties] no descript.ion file'."\n" if $opt{debug}; 266 return; 267 } 268 269 my $property = undef; 270 my $photo_filename = basename($params{path}); 271 open(IN, '<', $desc_filepath); 272 while (my $desc_line = <IN>) { 273 if ($desc_line =~ /^$photo_filename/) { 274 chomp($desc_line); 275 $property = (split /\t/, $desc_line, 2)[1]; 276 } 277 } 278 close(IN); 279 280 if (defined $property and $property ne '') { 281 print '[photo '.$params{id}.'] "'.$params{path}.'", set photo title "'.$property.'"'."\n"; 282 283 my $form = { 284 method => 'pwg.images.setInfo', 285 image_id => $params{id}, 286 single_value_mode => 'replace', 287 name => $property, 288 }; 289 290 piwigo_login(); 291 292 my $response = $ua->post( 293 $conf{base_url}.'/ws.php?format=json', 294 $form 295 ); 296 } 297 } 298 177 299 sub add_photo { 178 300 my %params = @_; … … 183 305 category => $params{album_id}, 184 306 }; 185 186 # is there any title defined in a descript.ion file?187 my $property = undef;188 my $desc_filepath = dirname($params{path}).'/descript.ion';189 if (-f $desc_filepath) {190 my $photo_filename = basename($params{path});191 open(IN, '<', $desc_filepath);192 while (my $desc_line = <IN>) {193 if ($desc_line =~ /^$photo_filename/) {194 chomp($desc_line);195 $property = (split /\t/, $desc_line, 2)[1];196 }197 }198 close(IN);199 }200 201 if (defined $property and $property ne '') {202 $form->{name} = $property;203 }204 307 205 308 print '[album '.$params{album_id}.'] '.$params{path}.' upload starts... '; … … 216 319 my $elapsed = tv_interval($t1); 217 320 print ' upload completed ('.sprintf('%u ms', $elapsed * 1000).')'."\n"; 321 322 return from_json($response->content)->{result}{image_id}; 218 323 } 219 324 … … 238 343 239 344 foreach my $dir (split '/', $path) { 345 my $is_new_album = 0; 346 240 347 if (not defined $piwigo_albums{$up_dir.$dir}) { 241 348 my $id = cached_album(dir => $up_dir.$dir); … … 245 352 if (not defined $id or not grep($_ eq $id, values(%piwigo_albums))) { 246 353 print 'album "'.$up_dir.$dir.'" must be created'."\n"; 354 $is_new_album = 1; 247 355 $id = add_album(name => $dir, parent => $parent_id); 248 356 cache_add_album(dir => $up_dir.$dir, id => $id); … … 250 358 $piwigo_albums{$up_dir.$dir} = $id; 251 359 } 360 361 if ($is_new_album or defined $opt{reload_properties}) { 362 set_album_properties(dir => $up_dir.$dir, id => $piwigo_albums{$up_dir.$dir}); 363 } 364 252 365 $parent_id = $piwigo_albums{$up_dir.$dir}; 253 366 $up_dir.= $dir.' / '; … … 264 377 my $album_id = $piwigo_albums{$album_key}; 265 378 266 if (photo_exists(album_id => $album_id, file => basename($File::Find::name))) { 379 my $image_id = photo_exists(album_id => $album_id, file => basename($File::Find::name)); 380 if (not defined $image_id or $image_id < 1) { 381 $image_id = cached_photo(path => $File::Find::name, dir => $album_key); 382 } 383 384 if (defined $image_id and $image_id >= 1) { 267 385 if (not $opt{quiet}) { 268 386 print $File::Find::name.' already exists in Piwigo, skipped'."\n"; 269 387 } 388 389 if (defined $opt{reload_properties}) { 390 set_photo_properties(path => $File::Find::name, id => $image_id); 391 } 392 270 393 return 1; 271 394 } 272 395 273 if (cached_photo(path => $File::Find::name, dir => $album_key)) { 274 return 1; 275 } 276 277 if ($opt{only_write_cache}) { 278 cache_add_photo(path => $File::Find::name, dir => $album_key); 279 return 1; 280 } 281 282 add_photo(path => $File::Find::name, album_id => $album_id); 283 cache_add_photo(path => $File::Find::name, dir => $album_key); 284 # print 'dirname = '.dirname($path)."\n\n"; 396 $image_id = add_photo(path => $File::Find::name, album_id => $album_id); 397 set_photo_properties(path => $File::Find::name, id => $image_id); 398 cache_add_photo(path => $File::Find::name, dir => $album_key, id => $image_id); 285 399 } 286 400 } … … 330 444 if ($line =~ m/$photo_filename_md5/) { 331 445 # TODO if needed : search the [id=(\d+)] for photo_id 332 return 1; 446 if ($line =~ m/\[id=(\d+)\]/) { 447 return $1; 448 } 449 else { 450 return -1; # true, but not an image_id 451 } 333 452 } 334 453 }
Note: See TracChangeset
for help on using the changeset viewer.