diff --git a/VERSION b/VERSION index 8e952cb7..b5dfa04a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.15.1-develop57 +1.15.1-develop58 diff --git a/modules/config.py b/modules/config.py index 355e0f15..38f13e0b 100644 --- a/modules/config.py +++ b/modules/config.py @@ -179,7 +179,7 @@ class ConfigFile: if "trakt" in new_config: new_config["trakt"] = new_config.pop("trakt") if "mal" in new_config: new_config["mal"] = new_config.pop("mal") if not self.read_only: - yaml.round_trip_dump(new_config, open(self.config_path, "w", encoding="utf-8"), indent=None, block_seq_indent=2) + yaml.round_trip_dump(new_config, open(self.config_path, "w", encoding="utf-8"), block_seq_indent=2) self.data = new_config except yaml.scanner.ScannerError as e: raise Failed(f"YAML Error: {util.tab_new_lines(e)}") @@ -207,7 +207,7 @@ class ConfigFile: if parent not in loaded_config or not loaded_config[parent]: loaded_config[parent] = {attribute: default} elif attribute not in loaded_config[parent]: loaded_config[parent][attribute] = default else: endline = "" - yaml.round_trip_dump(loaded_config, open(self.config_path, "w"), indent=None, block_seq_indent=2) + yaml.round_trip_dump(loaded_config, open(self.config_path, "w"), block_seq_indent=2) if default_is_none and var_type in ["list", "int_list", "comma_list"]: return default if default else [] elif data[attribute] is None: if default_is_none and var_type in ["list", "int_list", "comma_list"]: return default if default else [] diff --git a/plex_meta_manager.py b/plex_meta_manager.py index c8c1d747..1988ee22 100644 --- a/plex_meta_manager.py +++ b/plex_meta_manager.py @@ -764,20 +764,36 @@ def library_operations(config, library): logger.info("") logger.info(f"Metadata Backup Path: {library.metadata_backup['path']}") logger.info("") - meta = {} + try: + meta, _, _ = yaml.util.load_yaml_guess_indent(open(library.metadata_backup["path"])) + except yaml.scanner.ScannerError as e: + meta = {} + util.print_multiline(f"YAML Error: {util.tab_new_lines(e)}", error=True) + filename, file_extension = os.path.splitext(library.metadata_backup["path"]) + i = 1 + while os.path.exists(f"{filename}{i}{file_extension}"): + i += 1 + os.rename(library.metadata_backup["path"], f"{filename}{i}{file_extension}") + logger.error(f"Backup failed to load saving copy to {filename}{i}{file_extension}") + if "metadata" not in meta: + meta["metadata"] = {} items = library.get_all(load=True) titles = [i.title for i in items] for i, item in enumerate(items, 1): util.print_return(f"Processing: {i}/{len(items)} {item.title}") map_key, attrs = library.get_locked_attributes(item, titles) if attrs or library.metadata_backup["add_blank_entries"]: - meta[map_key] = attrs + def run_dict(save_dict, the_dict): + for kk, vv in the_dict.items(): + if isinstance(vv, dict): + run_dict(save_dict[kk], vv) + else: + save_dict[kk] = vv + run_dict(meta["metadata"][map_key], attrs) util.print_end() - with open(library.metadata_backup["path"], "w"): - pass try: - yaml.round_trip_dump({"metadata": meta}, open(library.metadata_backup["path"], "w", encoding="utf-8")) - logger.info(f"{len(meta)} {library.type.capitalize()}{'s' if len(meta) > 1 else ''} Backed Up") + yaml.round_trip_dump(meta, open(library.metadata_backup["path"], "w", encoding="utf-8"), block_seq_indent=2) + logger.info(f"{len(meta['metadata'])} {library.type.capitalize()}{'s' if len(meta['metadata']) > 1 else ''} Backed Up") except yaml.scanner.ScannerError as e: util.print_multiline(f"YAML Error: {util.tab_new_lines(e)}", error=True)