More refactoring of export code, #462

This commit is contained in:
Rhet Turnbull
2022-01-14 19:48:36 -08:00
parent 476c94407f
commit 9ada5dfea4

View File

@@ -714,30 +714,29 @@ class PhotoExporter:
else: else:
exif_files = all_results.exported exif_files = all_results.exported
# TODO: remove duplicative code from below if exiftool:
for exported_file in exif_files: for exported_file in exif_files:
results = self._write_exif_metadata_to_files( results = self._write_exif_metadata_to_files(
exported_file=exported_file, exported_file=exported_file,
exiftool=exiftool, update=update,
update=update, exiftool_flags=exiftool_flags,
exiftool_flags=exiftool_flags, use_albums_as_keywords=use_albums_as_keywords,
use_albums_as_keywords=use_albums_as_keywords, use_persons_as_keywords=use_persons_as_keywords,
use_persons_as_keywords=use_persons_as_keywords, keyword_template=keyword_template,
keyword_template=keyword_template, description_template=description_template,
description_template=description_template, ignore_date_modified=ignore_date_modified,
ignore_date_modified=ignore_date_modified, merge_exif_keywords=merge_exif_keywords,
merge_exif_keywords=merge_exif_keywords, merge_exif_persons=merge_exif_persons,
merge_exif_persons=merge_exif_persons, persons=persons,
persons=persons, location=location,
location=location, replace_keywords=replace_keywords,
replace_keywords=replace_keywords, strip=strip,
strip=strip, fileutil=fileutil,
fileutil=fileutil, export_db=export_db,
export_db=export_db, dry_run=dry_run,
dry_run=dry_run, verbose=verbose,
verbose=verbose, )
) all_results += results
all_results += results
if touch_file: if touch_file:
for exif_file in all_results.exif_updated: for exif_file in all_results.exif_updated:
@@ -1355,7 +1354,6 @@ class PhotoExporter:
def _write_exif_metadata_to_files( def _write_exif_metadata_to_files(
self, self,
exported_file: str, exported_file: str,
exiftool: bool,
update: bool, update: bool,
exiftool_flags: Optional[List[str]], exiftool_flags: Optional[List[str]],
use_albums_as_keywords: bool, use_albums_as_keywords: bool,
@@ -1375,80 +1373,32 @@ class PhotoExporter:
verbose: Optional[Callable], verbose: Optional[Callable],
) -> ExportResults: ) -> ExportResults:
results = ExportResults() results = ExportResults()
if exiftool and update and exported_file: if update:
for exported_file in [exported_file]: files_are_different = False
files_are_different = False old_data = export_db.get_exifdata_for_file(exported_file)
old_data = export_db.get_exifdata_for_file(exported_file) if old_data is not None:
if old_data is not None: old_data = json.loads(old_data)[0]
old_data = json.loads(old_data)[0] current_data = json.loads(
current_data = json.loads( self._exiftool_json_sidecar(
self._exiftool_json_sidecar( use_albums_as_keywords=use_albums_as_keywords,
use_albums_as_keywords=use_albums_as_keywords, use_persons_as_keywords=use_persons_as_keywords,
use_persons_as_keywords=use_persons_as_keywords, keyword_template=keyword_template,
keyword_template=keyword_template, description_template=description_template,
description_template=description_template, ignore_date_modified=ignore_date_modified,
ignore_date_modified=ignore_date_modified, merge_exif_keywords=merge_exif_keywords,
merge_exif_keywords=merge_exif_keywords, merge_exif_persons=merge_exif_persons,
merge_exif_persons=merge_exif_persons, persons=persons,
persons=persons, location=location,
location=location, replace_keywords=replace_keywords,
replace_keywords=replace_keywords, strip=strip,
strip=strip,
)
)[0]
if old_data != current_data:
files_are_different = True
if old_data is None or files_are_different:
# didn't have old data, assume we need to write it
# or files were different
verbose(f"Writing metadata with exiftool for {exported_file}")
if not dry_run:
warning_, error_ = self._write_exif_data(
exported_file,
use_albums_as_keywords=use_albums_as_keywords,
use_persons_as_keywords=use_persons_as_keywords,
keyword_template=keyword_template,
description_template=description_template,
ignore_date_modified=ignore_date_modified,
flags=exiftool_flags,
merge_exif_keywords=merge_exif_keywords,
merge_exif_persons=merge_exif_persons,
persons=persons,
location=location,
replace_keywords=replace_keywords,
strip=strip,
)
if warning_:
results.exiftool_warning.append((exported_file, warning_))
if error_:
results.exiftool_error.append((exported_file, error_))
results.error.append((exported_file, error_))
export_db.set_exifdata_for_file(
exported_file,
self._exiftool_json_sidecar(
use_albums_as_keywords=use_albums_as_keywords,
use_persons_as_keywords=use_persons_as_keywords,
keyword_template=keyword_template,
description_template=description_template,
ignore_date_modified=ignore_date_modified,
merge_exif_keywords=merge_exif_keywords,
merge_exif_persons=merge_exif_persons,
persons=persons,
location=location,
replace_keywords=replace_keywords,
strip=strip,
),
) )
export_db.set_stat_exif_for_file( )[0]
exported_file, fileutil.file_sig(exported_file) if old_data != current_data:
) files_are_different = True
results.exif_updated.append(exported_file)
else: if old_data is None or files_are_different:
verbose(f"Skipped up to date exiftool metadata for {exported_file}") # didn't have old data, assume we need to write it
elif exiftool and exported_file: # or files were different
for exported_file in [exported_file]:
verbose(f"Writing metadata with exiftool for {exported_file}") verbose(f"Writing metadata with exiftool for {exported_file}")
if not dry_run: if not dry_run:
warning_, error_ = self._write_exif_data( warning_, error_ = self._write_exif_data(
@@ -1492,6 +1442,52 @@ class PhotoExporter:
exported_file, fileutil.file_sig(exported_file) exported_file, fileutil.file_sig(exported_file)
) )
results.exif_updated.append(exported_file) results.exif_updated.append(exported_file)
else:
verbose(f"Skipped up to date exiftool metadata for {exported_file}")
else:
verbose(f"Writing metadata with exiftool for {exported_file}")
if not dry_run:
warning_, error_ = self._write_exif_data(
exported_file,
use_albums_as_keywords=use_albums_as_keywords,
use_persons_as_keywords=use_persons_as_keywords,
keyword_template=keyword_template,
description_template=description_template,
ignore_date_modified=ignore_date_modified,
flags=exiftool_flags,
merge_exif_keywords=merge_exif_keywords,
merge_exif_persons=merge_exif_persons,
persons=persons,
location=location,
replace_keywords=replace_keywords,
strip=strip,
)
if warning_:
results.exiftool_warning.append((exported_file, warning_))
if error_:
results.exiftool_error.append((exported_file, error_))
results.error.append((exported_file, error_))
export_db.set_exifdata_for_file(
exported_file,
self._exiftool_json_sidecar(
use_albums_as_keywords=use_albums_as_keywords,
use_persons_as_keywords=use_persons_as_keywords,
keyword_template=keyword_template,
description_template=description_template,
ignore_date_modified=ignore_date_modified,
merge_exif_keywords=merge_exif_keywords,
merge_exif_persons=merge_exif_persons,
persons=persons,
location=location,
replace_keywords=replace_keywords,
strip=strip,
),
)
export_db.set_stat_exif_for_file(
exported_file, fileutil.file_sig(exported_file)
)
results.exif_updated.append(exported_file)
return results return results
def _write_exif_data( def _write_exif_data(