From c4777352e97af0488ed6181ba4ac86025ce4f190 Mon Sep 17 00:00:00 2001 From: sHa Date: Tue, 30 Dec 2025 11:23:33 +0000 Subject: [PATCH] Refactor code structure for improved readability and maintainability --- dist/renamer-0.5.9-py3-none-any.whl | Bin 0 -> 47905 bytes pyproject.toml | 2 +- renamer/app.py | 2 +- renamer/formatters/proposed_name_formatter.py | 3 ++- renamer/screens.py | 22 ++++++++++++++---- uv.lock | 2 +- 6 files changed, 23 insertions(+), 8 deletions(-) create mode 100644 dist/renamer-0.5.9-py3-none-any.whl diff --git a/dist/renamer-0.5.9-py3-none-any.whl b/dist/renamer-0.5.9-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..ed40ea34dcf7edbe647f146a4e1fd72e60bfbaab GIT binary patch literal 47905 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

e`-mosD+I?4c`FS;rs16K5A&$N4=I_n* zZ9T}|pzxqzonP_3gF}q1m5>R!TA9${M6Tm#(pKMXW8>sxOW1T;Y_O5G76p+&2_(H@ zA?_D+58aY6t@-Kbx7xC%H>E+`s~3m%Rf~wf4Qb_dBQm1zq+Q$=GC+Mef>*~1-+h+@{xZN=awkHTn3`epHlacp5{qF2( zR-cJ%0%%1T#mNqr=IM!MjYKd8sZWwF-CBqhR*nqdYYpPP8IqtI3%&`YJqOrQ#!n70vdPO(BFnZ?* za}!RQkDW^&7!qH{U3@889w&OsnkeF_Z1s|hPd$ph=nawnOPGyMbV@&_q+|m6OLY6; z@6y1YU%kK2e%sZ>;HSHBFS+S(@S=S8WyG? zW*4F+3X!+lwbDnYa=3{{*Lh}j_y+#u&Tp^v$}Ls9W~xUCvM$F3)$Fm?HR%-L^{AhU#c3TC=QzGEu;%R zSa%3=IQbSZ0s(!72KFGz0u8bY7|;Zn`cXOp{u%@9sDS;~mh1cQ+pn6{x`5b6b4OiW zfTs-@kn9So{stZdM41Hy1Q7c6&z9?(_ZvX}&6_9M@(amhfdiZ@WB{KZK-A@*E!USH z;ql-GPS#H~u6OtKdjaqZGy?)a00XFhwp?F(fE~Xqf2de*{KTPc#21nH03n|NSpO?g z^Q(ETZ!O?5{L|Xj#=%klVLDfR=JsRK^n-^Np7KN73~V&+dY24^(L1_d-! z0-QO@uVVv#=K2!hJT|sBwldatc*=ar%+aE9z*XmB1#Yi^``F&W(B2r3KL5n=y%|L= zApytd0PO!hJ`*4l|JUg|7y|%Lp1e3K9a1`A<)jcW82#5zs>r__-NKYYswD42PpxY1zZ6B|6u{2G2E*sSx=RN2ZjO{ zK!1elF+BN!XK7LBJ*g7cPCIN^<>``bQa4U@CC!fJZ96{FBtD zm+pYEz=F4r*fx#7V4sk`1*QUvm_AYkw4bE@A!!Os1eVi!B*L0L68{NK|F1VDu#nax zOY3RYQ?gpX1_JBPJVM>Ao;2_eH5y zdq0W%dtwFG;KEPbyw3$b)x!;rAKayyGiNN_IkHiZ9r-^^dCIKb` zXB0e=uiigN{v*EtmYe4}C=bX94%W3?hN! zc^@gJz?9#jdx32Mj%t0R6odiU@?g-@F|NQ+;2_LLsC2~Npnrs90z-l0*B+s!(f<|t z-`?iH(JYV9lK7{f|9>w?;5GS2Di1(s;@3#;|6ZX7z68JvtdHEjl&87>$9wmwwZccJ zV%k5@Km4n|Rt|qR@hOM+Bdsa>@3jB8$AMA6PV7gNV$R=Dz%FfIDzG>Dk-GF>sQ>a! p10#Wb(!Y>ZzO=c2H}ro!)N+y#fEg7C2tD9S3or*O{rvFP{{Z5Lx@Q0Y literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index a196bb2..ca4ef51 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "renamer" -version = "0.5.8" +version = "0.5.9" description = "Terminal-based media file renamer and metadata viewer" readme = "README.md" requires-python = ">=3.11" diff --git a/renamer/app.py b/renamer/app.py index b8d48d7..56511e5 100644 --- a/renamer/app.py +++ b/renamer/app.py @@ -25,7 +25,7 @@ if os.getenv('FORMATTER_LOG', '0') == '1': logging.basicConfig(filename='formatter.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') else: - logging.basicConfig(level=logging.CRITICAL) # Disable logging + logging.basicConfig(level=logging.INFO) # Enable logging for debugging class RenamerApp(App): diff --git a/renamer/formatters/proposed_name_formatter.py b/renamer/formatters/proposed_name_formatter.py index d9cb849..28a7f22 100644 --- a/renamer/formatters/proposed_name_formatter.py +++ b/renamer/formatters/proposed_name_formatter.py @@ -26,7 +26,8 @@ class ProposedNameFormatter: return self.rename_line() def rename_line(self) -> str: - return f"{self.__order}{self.__title} {self.__year}{self.__special_info}{self.__source} [{self.__frame_class}{self.__hdr},{self.__audio_langs}]{self.__db_info}.{self.__extension}" + result = f"{self.__order}{self.__title} {self.__year}{self.__special_info}{self.__source} [{self.__frame_class}{self.__hdr},{self.__audio_langs}]{self.__db_info}.{self.__extension}" + return result.replace("/", "-").replace("\\", "-") def rename_line_formatted(self, file_path) -> str: """Format the proposed name for display with color""" diff --git a/renamer/screens.py b/renamer/screens.py index 9bf85c5..b3edea3 100644 --- a/renamer/screens.py +++ b/renamer/screens.py @@ -129,8 +129,8 @@ class RenameConfirmScreen(Screen): def __init__(self, old_path: Path, new_name: str): super().__init__() self.old_path = old_path - self.new_name = new_name - self.new_path = old_path.parent / new_name + self.new_name = new_name.replace("/", "-").replace("\\", "-") + self.new_path = old_path.parent / self.new_name self.was_edited = False def compose(self): @@ -178,12 +178,19 @@ Do you want to proceed with renaming? def on_button_pressed(self, event): if event.button.id == "rename": try: - logging.info(f"Renaming {self.old_path} to {self.new_path}") + logging.info(f"Starting rename: old_path={self.old_path}, new_path={self.new_path}") + logging.info(f"Old file name: {self.old_path.name}") + logging.info(f"New file name: {self.new_name}") + logging.info(f"New path parent: {self.new_path.parent}, Old path parent: {self.old_path.parent}") + if "/" in self.new_name or "\\" in self.new_name: + logging.warning(f"New name contains path separators: {self.new_name}") self.old_path.rename(self.new_path) + logging.info(f"Rename successful: {self.old_path} -> {self.new_path}") # Update the tree node self.app.update_renamed_file(self.old_path, self.new_path) # type: ignore self.app.pop_screen() except Exception as e: + logging.error(f"Rename failed: {self.old_path} -> {self.new_path}, error: {str(e)}") # Show error content = self.query_one("#confirm_content", Static) content.update(f"Error renaming file: {str(e)}") @@ -228,12 +235,19 @@ Do you want to proceed with renaming? if event.key == "y": # Trigger rename try: - logging.info(f"Hotkey renaming {self.old_path} to {self.new_path}") + logging.info(f"Hotkey rename: old_path={self.old_path}, new_path={self.new_path}") + logging.info(f"Old file name: {self.old_path.name}") + logging.info(f"New file name: {self.new_name}") + logging.info(f"New path parent: {self.new_path.parent}, Old path parent: {self.old_path.parent}") + if "/" in self.new_name or "\\" in self.new_name: + logging.warning(f"New name contains path separators: {self.new_name}") self.old_path.rename(self.new_path) + logging.info(f"Hotkey rename successful: {self.old_path} -> {self.new_path}") # Update the tree node self.app.update_renamed_file(self.old_path, self.new_path) # type: ignore self.app.pop_screen() except Exception as e: + logging.error(f"Hotkey rename failed: {self.old_path} -> {self.new_path}, error: {str(e)}") # Show error content = self.query_one("#confirm_content", Static) content.update(f"Error renaming file: {str(e)}") diff --git a/uv.lock b/uv.lock index cdd8782..88f1035 100644 --- a/uv.lock +++ b/uv.lock @@ -342,7 +342,7 @@ wheels = [ [[package]] name = "renamer" -version = "0.5.8" +version = "0.5.9" source = { editable = "." } dependencies = [ { name = "langcodes" },