99 lines
3.8 KiB
Python
99 lines
3.8 KiB
Python
path = 'D:\\proj\\videoconvert\\video_pipeline.py'
|
|
content = open(path, 'r', encoding='utf-8').read()
|
|
|
|
old_func = '''def generate_playlist_txt(
|
|
output_dir: str | Path,
|
|
url_prefix: str = \"http://192.168.10.32:2088\",
|
|
) -> list[Path]:
|
|
\"\"\"Scan output_dir for series folders, generate playlist txt files.
|
|
For each series, scans episode subdirs for m3u8 files and generates:
|
|
series_name + episode_name,url_prefix/series_folder/episode_folder/m3u8_file
|
|
One txt per series, placed in output_dir/.\"\"\"
|
|
output = Path(output_dir)
|
|
if not output.is_dir():
|
|
return []
|
|
|
|
created: list[Path] = []
|
|
for series_dir in sorted(output.iterdir(), key=lambda f: natural_sort_key(f.name)):
|
|
if not series_dir.is_dir():
|
|
continue
|
|
lines: list[str] = []
|
|
episode_dirs = sorted(
|
|
[d for d in series_dir.iterdir() if d.is_dir()],
|
|
key=lambda d: natural_sort_key(d.name),
|
|
)
|
|
for ep_dir in episode_dirs:
|
|
m3u8_files = sorted(ep_dir.glob(\"*.m3u8\"))
|
|
if not m3u8_files:
|
|
continue
|
|
m3u8_name = m3u8_files[0].name
|
|
display_name = series_dir.name + ep_dir.name
|
|
url = f\"{url_prefix}/{series_dir.name}/{ep_dir.name}/{m3u8_name}\"
|
|
lines.append(f\"{display_name},{url}\\n\")
|
|
|
|
if not lines:
|
|
continue
|
|
txt_path = output / f\"{series_dir.name}_playlist.txt\"
|
|
txt_path.write_text(\"\".join(lines), encoding=\"utf-8\")
|
|
created.append(txt_path)
|
|
|
|
return created'''
|
|
|
|
new_func = '''def generate_playlist_txt(
|
|
output_dir: str | Path,
|
|
url_prefix: str = \"http://192.168.10.32:2088\",
|
|
) -> list[Path]:
|
|
\"\"\"Scan output_dir for series folders, generate playlist txt files.
|
|
Supports both flat mode (m3u8 in series dir) and episode folder mode.
|
|
One txt per series, placed in output_dir/.\"\"\"
|
|
output = Path(output_dir)
|
|
if not output.is_dir():
|
|
return []
|
|
|
|
created: list[Path] = []
|
|
for series_dir in sorted(output.iterdir(), key=lambda f: natural_sort_key(f.name)):
|
|
if not series_dir.is_dir():
|
|
continue
|
|
lines: list[str] = []
|
|
|
|
# Flat mode: m3u8 files directly in series dir
|
|
flat_m3u8 = sorted(series_dir.glob(\"*.m3u8\"), key=lambda f: natural_sort_key(f.stem))
|
|
if flat_m3u8:
|
|
for m3u8_file in flat_m3u8:
|
|
ep_name = m3u8_file.stem
|
|
display_name = series_dir.name + ep_name
|
|
url = f\"{url_prefix}/{series_dir.name}/{m3u8_file.name}\"
|
|
lines.append(f\"{display_name},{url}\\n\")
|
|
else:
|
|
# Episode folder mode: m3u8 files in subdirectories
|
|
episode_dirs = sorted(
|
|
[d for d in series_dir.iterdir() if d.is_dir()],
|
|
key=lambda d: natural_sort_key(d.name),
|
|
)
|
|
for ep_dir in episode_dirs:
|
|
m3u8_files = sorted(ep_dir.glob(\"*.m3u8\"))
|
|
if not m3u8_files:
|
|
continue
|
|
m3u8_name = m3u8_files[0].name
|
|
display_name = series_dir.name + ep_dir.name
|
|
url = f\"{url_prefix}/{series_dir.name}/{ep_dir.name}/{m3u8_name}\"
|
|
lines.append(f\"{display_name},{url}\\n\")
|
|
|
|
if not lines:
|
|
continue
|
|
txt_path = output / f\"{series_dir.name}_playlist.txt\"
|
|
txt_path.write_text(\"\".join(lines), encoding=\"utf-8\")
|
|
created.append(txt_path)
|
|
|
|
return created'''
|
|
|
|
if old_func in content:
|
|
content = content.replace(old_func, new_func)
|
|
open(path, 'w', encoding='utf-8').write(content)
|
|
print('Replaced OK')
|
|
else:
|
|
print('Old function not found - checking around line 735')
|
|
lines = content.split('\\n')
|
|
for i in range(730, min(770, len(lines))):
|
|
print(f'{i+1}: {repr(lines[i][:120])}')
|