Release v1.0.9: persist UI layout and fix SxxExx double-S renames.

Save window geometry, splitter sizes, and preview column widths on exit; restore on launch. Fix episode rewrite duplicating the season letter.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Bulk Renamer
2026-07-03 17:58:45 -05:00
co-authored by Cursor
parent 85dc873e16
commit a65ae73bcc
5 changed files with 54 additions and 8 deletions
+11 -6
View File
@@ -13,7 +13,7 @@ from .tvdb_client import TvdbEpisode
# S01E05 - Title or S01E05-E06 - Title
PATTERN_SXXEXX = re.compile(
r"^(.*?[Ss])(\d+)([Ee])(\d+)(-[Ee](\d+))?(.*)$",
r"^(.*?)([Ss])(\d+)([Ee])(\d+)(-[Ee](\d+))?(.*)$",
)
# Show Name 04x01 Title, 4x01 - Title, etc.
PATTERN_NXNN = re.compile(
@@ -60,7 +60,7 @@ def parse_episode_stem(stem: str, pattern: str = DEFAULT_EPISODE_PATTERN) -> Opt
m = PATTERN_SXXEXX.match(stem)
if m:
prefix_before_s, season_s, _e, ep_s, _dash, ep2_s, rest = m.groups()
prefix, s_letter, season_s, e_letter, ep_s, _range_block, ep2_s, rest = m.groups()
try:
season = int(season_s)
old_first = int(ep_s)
@@ -78,7 +78,9 @@ def parse_episode_stem(stem: str, pattern: str = DEFAULT_EPISODE_PATTERN) -> Opt
title = _clean_title(rest)
return {
"format": "sxxexx",
"prefix_before_s": prefix_before_s,
"prefix": prefix,
"s_letter": s_letter,
"e_letter": e_letter,
"season": season,
"season_pad": len(season_s),
"episode_pad": len(ep_s),
@@ -143,11 +145,14 @@ def rewrite_episode_stem(
s_pad = max(parsed["season_pad"], len(str(new_season)))
e_pad = max(parsed["episode_pad"], pad, len(str(new_ep)))
e1 = str(new_ep).zfill(e_pad)
prefix = f"{parsed['prefix_before_s']}S{new_season:0{s_pad}d}E"
head = (
f"{parsed['prefix']}{parsed['s_letter']}{new_season:0{s_pad}d}{parsed['e_letter']}"
)
if span <= 1:
return f"{prefix}{e1}{parsed['suffix']}"
return f"{head}{e1}{parsed['suffix']}"
e2 = str(new_ep + span - 1).zfill(e_pad)
return f"{prefix}{e1}-E{e2}{parsed['suffix']}"
range_prefix = f"-{parsed['e_letter']}"
return f"{head}{e1}{range_prefix}{e2}{parsed['suffix']}"
def rewrite_episode_number(