@@ -34,7 +34,7 @@ def map_align_raw_to_enum(align_raw_str: str) -> RawTreatmentPolicy:
3434 return mapping [align_raw_str ]
3535
3636
37- _VALID_WRITE_METADATA = {"all" , "rating" , "keywords" , "title" , "dates" , "datetime " , "orientation " , "location " }
37+ _VALID_WRITE_METADATA = {"all" , "rating" , "keywords" , "title" , "dates" , "orientation " , "location " , "datetime " }
3838
3939
4040def _parse_write_metadata (value : str | None ) -> frozenset [str ]:
@@ -161,11 +161,40 @@ def add_options_for_user(parser: argparse.ArgumentParser) -> argparse.ArgumentPa
161161 cloned .add_argument (
162162 "--write-metadata" ,
163163 help = (
164- "Write iCloud metadata into file EXIF/XMP using exiftool. "
164+ "Write iCloud metadata as both XMP sidecars and EXIF tags. "
165+ "Shorthand for --write-metadata-xmp and --write-metadata-exif. "
165166 "Comma-separated list of field categories: "
166- "all, rating, keywords, title, dates, orientation. "
167- "Requires exiftool to be installed. Default: disabled."
167+ "all, rating, keywords, title, datetime, dates, orientation, location. "
168+ "Requires exiftool to be installed. "
169+ "Default when specified without value: all."
168170 ),
171+ nargs = "?" ,
172+ const = "all" ,
173+ default = None ,
174+ )
175+ cloned .add_argument (
176+ "--write-metadata-xmp" ,
177+ help = (
178+ "Write iCloud metadata as XMP sidecar files. "
179+ "Comma-separated list of field categories: "
180+ "all, rating, keywords, title, datetime, dates, orientation, location. "
181+ "Default when specified without value: all."
182+ ),
183+ nargs = "?" ,
184+ const = "all" ,
185+ default = None ,
186+ )
187+ cloned .add_argument (
188+ "--write-metadata-exif" ,
189+ help = (
190+ "Write iCloud metadata into file EXIF/XMP tags using exiftool. "
191+ "Comma-separated list of field categories: "
192+ "all, rating, keywords, title, datetime, dates, orientation, location. "
193+ "Requires exiftool to be installed. "
194+ "Default when specified without value: all."
195+ ),
196+ nargs = "?" ,
197+ const = "all" ,
169198 default = None ,
170199 )
171200
@@ -456,6 +485,37 @@ def format_help() -> str:
456485
457486
458487def map_to_config (user_ns : argparse .Namespace ) -> UserConfig :
488+ # Resolve write-metadata flags
489+ write_metadata_base = _parse_write_metadata (user_ns .write_metadata )
490+ write_metadata_xmp = _parse_write_metadata (user_ns .write_metadata_xmp )
491+ write_metadata_exif = _parse_write_metadata (user_ns .write_metadata_exif )
492+
493+ # --write-metadata sets both if specific variants not given
494+ if write_metadata_base :
495+ if not write_metadata_xmp :
496+ write_metadata_xmp = write_metadata_base
497+ if not write_metadata_exif :
498+ write_metadata_exif = write_metadata_base
499+
500+ # --xmp-sidecar is deprecated alias for --write-metadata-xmp all
501+ if user_ns .xmp_sidecar :
502+ import logging
503+
504+ logging .getLogger ("icloudpd" ).warning (
505+ "--xmp-sidecar is deprecated, use --write-metadata-xmp instead"
506+ )
507+ if not write_metadata_xmp :
508+ write_metadata_xmp = frozenset ({"all" })
509+
510+ # --set-exif-datetime adds datetime to exif set
511+ if user_ns .set_exif_datetime :
512+ import logging
513+
514+ logging .getLogger ("icloudpd" ).warning (
515+ "--set-exif-datetime is deprecated, use --write-metadata-exif datetime instead"
516+ )
517+ write_metadata_exif = write_metadata_exif | frozenset ({"datetime" })
518+
459519 return UserConfig (
460520 username = user_ns .username ,
461521 password = user_ns .password ,
@@ -474,12 +534,12 @@ def map_to_config(user_ns: argparse.Namespace) -> UserConfig:
474534 list_libraries = user_ns .list_libraries ,
475535 skip_videos = user_ns .skip_videos ,
476536 skip_live_photos = user_ns .skip_live_photos ,
477- xmp_sidecar = user_ns .xmp_sidecar ,
478537 force_size = user_ns .force_size ,
479538 auto_delete = user_ns .auto_delete ,
480539 folder_structure = user_ns .folder_structure ,
481540 set_exif_datetime = user_ns .set_exif_datetime ,
482- write_metadata = _parse_write_metadata (user_ns .write_metadata ),
541+ write_metadata_xmp = write_metadata_xmp ,
542+ write_metadata_exif = write_metadata_exif ,
483543 smtp_username = user_ns .smtp_username ,
484544 smtp_password = user_ns .smtp_password ,
485545 smtp_host = user_ns .smtp_host ,
0 commit comments