diff --git a/comictaggerlib/cli.py b/comictaggerlib/cli.py index a8cded2..43e02ae 100644 --- a/comictaggerlib/cli.py +++ b/comictaggerlib/cli.py @@ -27,7 +27,7 @@ from comicapi.comicarchive import ComicArchive, MetaDataStyle from comicapi.genericmetadata import GenericMetadata from comictaggerlib.cbltransformer import CBLTransformer from comictaggerlib.comicvinetalker import ComicVineTalker, ComicVineTalkerException -from comictaggerlib.filerenamer import FileRenamer, FileRenamer2 +from comictaggerlib.filerenamer import FileRenamer from comictaggerlib.issueidentifier import IssueIdentifier from comictaggerlib.resulttypes import MultipleMatch, OnlineMatchResults from comictaggerlib.settings import ComicTaggerSettings @@ -155,13 +155,6 @@ def cli_mode(opts, settings): logger.error("You must specify at least one filename. Use the -h option for more info") return - if not settings.hide_rename_message: - print( - "There is a new rename template format available. " - "Please use the settings window to enable and test if you use this feature.\n\n" - "The old rename template format will be removed in the next release, " - "please reference the template help button in the settings or https://github.com/comictagger/comictagger/wiki/UserGuide#rename", - ) match_results = OnlineMatchResults() for f in opts.file_list: @@ -452,10 +445,7 @@ def process_file_cli(filename, opts, settings, match_results: OnlineMatchResults elif ca.is_rar(): new_ext = ".cbr" - if settings.rename_new_renamer: - renamer = FileRenamer2(md, platform="universal" if settings.rename_strict else "auto") - else: - renamer = FileRenamer(md) + renamer = FileRenamer(md, platform="universal" if settings.rename_strict else "auto") renamer.set_template(settings.rename_template) renamer.set_issue_zero_padding(settings.rename_issue_number_padding) renamer.set_smart_cleanup(settings.rename_use_smart_string_cleanup) diff --git a/comictaggerlib/filerenamer.py b/comictaggerlib/filerenamer.py index a21b0c7..fc44aaa 100644 --- a/comictaggerlib/filerenamer.py +++ b/comictaggerlib/filerenamer.py @@ -15,10 +15,9 @@ # limitations under the License. import calendar -import datetime import logging import os -import re +import pathlib import string import sys @@ -30,121 +29,6 @@ from comicapi.issuestring import IssueString logger = logging.getLogger(__name__) -class FileRenamer: - def __init__(self, metadata): - self.template = "%series% v%volume% #%issue% (of %issuecount%) (%year%)" - self.smart_cleanup = True - self.issue_zero_padding = 3 - self.metadata = metadata - - def set_metadata(self, metadata: GenericMetadata): - self.metadata = metadata - - def set_issue_zero_padding(self, count): - self.issue_zero_padding = count - - def set_smart_cleanup(self, on): - self.smart_cleanup = on - - def set_template(self, template: str): - self.template = template - - def replace_token(self, text, value, token): - # helper func - def is_token(word): - return word[0] == "%" and word[-1:] == "%" - - if value is not None: - return text.replace(token, str(value)) - - if self.smart_cleanup: - # smart cleanup means we want to remove anything appended to token if it's empty (e.g "#%issue%" or "v%volume%") - # (TODO: This could fail if there is more than one token appended together, I guess) - text_list = text.split() - - # special case for issuecount, remove preceding non-token word, as in "...(of %issuecount%)..." - if token == "%issuecount%": - for idx, word in enumerate(text_list): - if token in word and not is_token(text_list[idx - 1]): - text_list[idx - 1] = "" - - text_list = [x for x in text_list if token not in x] - return " ".join(text_list) - - return text.replace(token, "") - - def determine_name(self, ext): - - md = self.metadata - new_name = self.template - - new_name = self.replace_token(new_name, md.series, "%series%") - new_name = self.replace_token(new_name, md.volume, "%volume%") - - if md.issue is not None: - issue_str = IssueString(md.issue).as_string(pad=self.issue_zero_padding) - else: - issue_str = None - new_name = self.replace_token(new_name, issue_str, "%issue%") - - new_name = self.replace_token(new_name, md.issue_count, "%issuecount%") - new_name = self.replace_token(new_name, md.year, "%year%") - new_name = self.replace_token(new_name, md.publisher, "%publisher%") - new_name = self.replace_token(new_name, md.title, "%title%") - new_name = self.replace_token(new_name, md.month, "%month%") - month_name = None - if md.month is not None: - if (isinstance(md.month, str) and md.month.isdigit()) or isinstance(md.month, int): - if int(md.month) in range(1, 13): - dt = datetime.datetime(1970, int(md.month), 1, 0, 0) - month_name = dt.strftime("%B") - new_name = self.replace_token(new_name, month_name, "%month_name%") - - new_name = self.replace_token(new_name, md.genre, "%genre%") - new_name = self.replace_token(new_name, md.language, "%language_code%") - new_name = self.replace_token(new_name, md.critical_rating, "%criticalrating%") - new_name = self.replace_token(new_name, md.alternate_series, "%alternateseries%") - new_name = self.replace_token(new_name, md.alternate_number, "%alternatenumber%") - new_name = self.replace_token(new_name, md.alternate_count, "%alternatecount%") - new_name = self.replace_token(new_name, md.imprint, "%imprint%") - new_name = self.replace_token(new_name, md.format, "%format%") - new_name = self.replace_token(new_name, md.maturity_rating, "%maturityrating%") - new_name = self.replace_token(new_name, md.story_arc, "%storyarc%") - new_name = self.replace_token(new_name, md.series_group, "%seriesgroup%") - new_name = self.replace_token(new_name, md.scan_info, "%scaninfo%") - - if self.smart_cleanup: - # remove empty braces,brackets, parentheses - new_name = re.sub(r"\(\s*[-:]*\s*\)", "", new_name) - new_name = re.sub(r"\[\s*[-:]*\s*]", "", new_name) - new_name = re.sub(r"{\s*[-:]*\s*}", "", new_name) - - # remove duplicate spaces - new_name = " ".join(new_name.split()) - - # remove remove duplicate -, _, - new_name = re.sub(r"[-_]{2,}\s+", "-- ", new_name) - new_name = re.sub(r"(\s--)+", " --", new_name) - new_name = re.sub(r"(\s-)+", " -", new_name) - - # remove dash or double dash at end of line - new_name = re.sub(r"[-]{1,2}\s*$", "", new_name) - - # remove duplicate spaces (again!) - new_name = " ".join(new_name.split()) - - new_name += ext - - # some tweaks to keep various filesystems happy - new_name = new_name.replace("/", "-") - new_name = new_name.replace(" :", " -") - new_name = new_name.replace(": ", " - ") - new_name = new_name.replace(":", "-") - new_name = new_name.replace("?", "") - - return new_name - - class MetadataFormatter(string.Formatter): def __init__(self, smart_cleanup=False, platform="auto"): super().__init__() @@ -224,7 +108,7 @@ class MetadataFormatter(string.Formatter): return "".join(result), auto_arg_index -class FileRenamer2: +class FileRenamer: def __init__(self, metadata, platform="auto"): self.template = "{publisher}/{series}/{series} v{volume} #{issue} (of {issue_count}) ({year})" self.smart_cleanup = True @@ -257,7 +141,6 @@ class FileRenamer2: template = self.template - path_components = template.split(os.sep) new_name = "" fmt = MetadataFormatter(self.smart_cleanup, platform=self.platform) @@ -272,7 +155,7 @@ class FileRenamer2: md_dict["month_name"] = "" md_dict["month_abbr"] = "" - for Component in path_components: + for Component in pathlib.PureWindowsPath(template).parts: if ( self.platform.lower() in ["universal", "windows"] or sys.platform.lower() in ["windows"] ) and self.smart_cleanup: diff --git a/comictaggerlib/renamewindow.py b/comictaggerlib/renamewindow.py index b9bc3d4..a2be891 100644 --- a/comictaggerlib/renamewindow.py +++ b/comictaggerlib/renamewindow.py @@ -23,7 +23,7 @@ from PyQt5 import QtCore, QtWidgets, uic import comicapi.comicarchive from comicapi import utils from comicapi.comicarchive import MetaDataStyle -from comictaggerlib.filerenamer import FileRenamer, FileRenamer2 +from comictaggerlib.filerenamer import FileRenamer from comictaggerlib.settings import ComicTaggerSettings from comictaggerlib.settingswindow import SettingsWindow from comictaggerlib.ui.qtutils import center_window_on_parent @@ -52,10 +52,7 @@ class RenameWindow(QtWidgets.QDialog): self.rename_list = [] self.btnSettings.clicked.connect(self.modify_settings) - if self.settings.rename_new_renamer: - self.renamer = FileRenamer2(None, platform="universal" if self.settings.rename_strict else "auto") - else: - self.renamer = FileRenamer(None) + self.renamer = FileRenamer(None, platform="universal" if self.settings.rename_strict else "auto") self.config_renamer() self.do_preview() diff --git a/comictaggerlib/settings.py b/comictaggerlib/settings.py index e1a438c..584e954 100644 --- a/comictaggerlib/settings.py +++ b/comictaggerlib/settings.py @@ -86,7 +86,6 @@ class ComicTaggerSettings: self.show_disclaimer = True self.dont_notify_about_this_version = "" self.ask_about_usage_stats = True - self.hide_rename_message = False # filename parsing settings self.parse_scan_info = True @@ -120,7 +119,6 @@ class ComicTaggerSettings: self.rename_extension_based_on_archive = True self.rename_dir = "" self.rename_move_dir = False - self.rename_new_renamer = False self.rename_strict = False # Auto-tag stickies @@ -161,7 +159,6 @@ class ComicTaggerSettings: self.show_disclaimer = True self.dont_notify_about_this_version = "" self.ask_about_usage_stats = True - self.hide_rename_message = False # filename parsing settings self.parse_scan_info = True @@ -195,7 +192,6 @@ class ComicTaggerSettings: self.rename_extension_based_on_archive = True self.rename_dir = "" self.rename_move_dir = False - self.rename_new_renamer = False self.rename_strict = False # Auto-tag stickies @@ -302,8 +298,6 @@ class ComicTaggerSettings: self.dont_notify_about_this_version = self.config.get("dialogflags", "dont_notify_about_this_version") if self.config.has_option("dialogflags", "ask_about_usage_stats"): self.ask_about_usage_stats = self.config.getboolean("dialogflags", "ask_about_usage_stats") - if self.config.has_option("dialogflags", "hide_rename_message"): - self.hide_rename_message = self.config.getboolean("dialogflags", "hide_rename_message") if self.config.has_option("comicvine", "use_series_start_as_volume"): self.use_series_start_as_volume = self.config.getboolean("comicvine", "use_series_start_as_volume") @@ -363,8 +357,6 @@ class ComicTaggerSettings: self.rename_dir = self.config.get("rename", "rename_dir") if self.config.has_option("rename", "rename_move_dir"): self.rename_move_dir = self.config.getboolean("rename", "rename_move_dir") - if self.config.has_option("rename", "rename_new_renamer"): - self.rename_new_renamer = self.config.getboolean("rename", "rename_new_renamer") if self.config.has_option("rename", "rename_strict"): self.rename_strict = self.config.getboolean("rename", "rename_strict") @@ -423,7 +415,6 @@ class ComicTaggerSettings: self.config.set("dialogflags", "show_disclaimer", self.show_disclaimer) self.config.set("dialogflags", "dont_notify_about_this_version", self.dont_notify_about_this_version) self.config.set("dialogflags", "ask_about_usage_stats", self.ask_about_usage_stats) - self.config.set("dialogflags", "hide_rename_message", self.hide_rename_message) if not self.config.has_section("filenameparser"): self.config.add_section("filenameparser") @@ -467,7 +458,6 @@ class ComicTaggerSettings: self.config.set("rename", "rename_extension_based_on_archive", self.rename_extension_based_on_archive) self.config.set("rename", "rename_dir", self.rename_dir) self.config.set("rename", "rename_move_dir", self.rename_move_dir) - self.config.set("rename", "rename_new_renamer", self.rename_new_renamer) self.config.set("rename", "rename_strict", self.rename_strict) if not self.config.has_section("autotag"): diff --git a/comictaggerlib/settingswindow.py b/comictaggerlib/settingswindow.py index dafd2b1..42302aa 100644 --- a/comictaggerlib/settingswindow.py +++ b/comictaggerlib/settingswindow.py @@ -17,7 +17,6 @@ import logging import os import platform -import re from PyQt5 import QtCore, QtGui, QtWidgets, uic @@ -25,7 +24,7 @@ from comicapi import utils from comicapi.genericmetadata import md_test from comictaggerlib.comicvinecacher import ComicVineCacher from comictaggerlib.comicvinetalker import ComicVineTalker -from comictaggerlib.filerenamer import FileRenamer, FileRenamer2 +from comictaggerlib.filerenamer import FileRenamer from comictaggerlib.imagefetcher import ImageFetcher from comictaggerlib.settings import ComicTaggerSettings @@ -57,24 +56,8 @@ macRarHelp = """
Once homebrew is installed, run: brew install caskroom/cask/rar