Skip to content

Commit 97c4674

Browse files
committed
feat: better preset listing
1 parent aa1dbb8 commit 97c4674

2 files changed

Lines changed: 40 additions & 5 deletions

File tree

src/ffmpeg_normalize/__main__.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -607,13 +607,17 @@ def error(message: object) -> NoReturn:
607607
# Handle --list-presets
608608
preset_manager = PresetManager()
609609
if cli_args.list_presets:
610-
presets = preset_manager.get_available_presets()
611-
if presets:
610+
presets_with_source = preset_manager.get_presets_with_source()
611+
if presets_with_source:
612612
print("Available presets:")
613-
for preset in presets:
614-
print(f" - {preset}")
613+
for preset_name, source in presets_with_source:
614+
source_label = "(user)" if source == "user" else "(builtin)"
615+
print(f" - {preset_name} {source_label}")
615616
else:
616-
print(f"No presets found in {preset_manager.presets_dir}")
617+
print("No presets found.")
618+
print()
619+
print(f"User presets directory: {preset_manager.presets_dir}")
620+
print("Place custom .json preset files in this directory.")
617621
sys.exit(0)
618622

619623
# Load and apply preset if specified

src/ffmpeg_normalize/_presets.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,37 @@ def get_available_presets(self) -> list[str]:
9494

9595
return sorted(presets)
9696

97+
def get_presets_with_source(self) -> list[tuple[str, str]]:
98+
"""Get list of available presets with their source location.
99+
100+
Returns:
101+
list[tuple[str, str]]: List of (preset_name, source) tuples where
102+
source is either "user" or "builtin"
103+
"""
104+
user_presets: set[str] = set()
105+
builtin_presets: set[str] = set()
106+
107+
# Get presets from user config directory
108+
if self.presets_dir.exists():
109+
for file in self.presets_dir.glob("*.json"):
110+
user_presets.add(file.stem)
111+
112+
# Get default presets from package
113+
if self.default_presets_dir.exists():
114+
for file in self.default_presets_dir.glob("*.json"):
115+
builtin_presets.add(file.stem)
116+
117+
result = []
118+
all_presets = sorted(user_presets | builtin_presets)
119+
for preset in all_presets:
120+
# User presets take precedence
121+
if preset in user_presets:
122+
result.append((preset, "user"))
123+
else:
124+
result.append((preset, "builtin"))
125+
126+
return result
127+
97128
def load_preset(self, preset_name: str) -> dict[str, Any]:
98129
"""Load a preset file by name.
99130

0 commit comments

Comments
 (0)