Release v1.0.8: recursive folder scan and file type filters.
Adds subfolder inclusion and extension presets so the preview list can target nested media without loading everything. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
+19
-7
@@ -25,13 +25,24 @@ def apply_pipeline(
|
||||
index: int,
|
||||
total: int,
|
||||
) -> str:
|
||||
"""Apply all enabled rules to a single filename (no path). Returns new filename."""
|
||||
stem, ext = _split_name(name)
|
||||
"""Apply all enabled rules to a filename or relative path. Returns new name/path."""
|
||||
rel = Path(name)
|
||||
if len(rel.parts) > 1:
|
||||
parent = rel.parent
|
||||
file_name = rel.name
|
||||
else:
|
||||
parent = None
|
||||
file_name = name
|
||||
|
||||
stem, ext = _split_name(file_name)
|
||||
for r in rules:
|
||||
if not r.enabled:
|
||||
continue
|
||||
stem, ext = r.apply(stem, ext, index, total, original_name=name)
|
||||
return stem + ext
|
||||
new_name = stem + ext
|
||||
if parent is not None:
|
||||
return str(parent / new_name)
|
||||
return new_name
|
||||
|
||||
|
||||
def compute_preview(
|
||||
@@ -77,11 +88,12 @@ def perform_renames(
|
||||
final_names = {n for _, n in step1}
|
||||
temp_map = []
|
||||
for i, (old_path, new_name) in enumerate(step1):
|
||||
temp_name = f"__temp_{i}_{old_path.name}{temp_suffix}"
|
||||
while temp_name in final_names or (base / temp_name).exists():
|
||||
new_path = base / new_name
|
||||
temp_path = old_path.parent / f"__temp_{i}_{old_path.name}{temp_suffix}"
|
||||
while temp_path.name in final_names or temp_path.exists() or temp_path == new_path:
|
||||
i += 1
|
||||
temp_name = f"__temp_{i}_{old_path.name}{temp_suffix}"
|
||||
temp_map.append((old_path, base / temp_name, base / new_name))
|
||||
temp_path = old_path.parent / f"__temp_{i}_{old_path.name}{temp_suffix}"
|
||||
temp_map.append((old_path, temp_path, new_path))
|
||||
|
||||
if dry_run:
|
||||
for old_p, temp_p, new_p in temp_map:
|
||||
|
||||
Reference in New Issue
Block a user