41 lines
1.6 KiB
Python
41 lines
1.6 KiB
Python
from pathlib import Path
|
|
|
|
PROJECTS_DIR = Path("projects")
|
|
SHARED_ASSETS_DIR = Path("shared_assets")
|
|
|
|
PROJECTS_DIR.mkdir(exist_ok=True)
|
|
SHARED_ASSETS_DIR.mkdir(exist_ok=True)
|
|
|
|
def get_project_paths(project_name: str) -> dict:
|
|
"""
|
|
為給定專案回傳一個包含所有重要路徑的字典。
|
|
這是一個純粹的、無副作用的函式,是路徑規則的「單一事實來源」。
|
|
"""
|
|
if not project_name:
|
|
return {}
|
|
|
|
project_root = PROJECTS_DIR / project_name
|
|
output_dir = project_root / "output" # 將所有生成物放在 output 資料夾
|
|
|
|
return {
|
|
"root": project_root,
|
|
"data": project_root / "data.json",
|
|
"audio": project_root / "audio", # 原始音訊片段
|
|
"output": output_dir, # 輸出的根目錄
|
|
"temp_video":output_dir / "temp_video",
|
|
"combined_audio": output_dir / "combined_audio.wav",
|
|
"ass_file": output_dir / "subtitles.ass",
|
|
"final_video": output_dir / f"{project_name}_final_video.mp4"
|
|
}
|
|
def get_project_list() -> list[str]:
|
|
"""
|
|
掃描專案根目錄並回傳所有專案名稱的列表。
|
|
這將成為獲取專案列表的「單一事實來源」。
|
|
"""
|
|
if not PROJECTS_DIR.is_dir():
|
|
PROJECTS_DIR.mkdir() # 如果根目錄不存在,就建立它
|
|
return []
|
|
# 確保只回傳目錄,並過濾掉像 .DS_Store 這樣的隱藏檔案
|
|
project_names = [d.name for d in PROJECTS_DIR.iterdir() if d.is_dir() and not d.name.startswith('.')]
|
|
project_names.sort() # 排序以獲得一致的顯示順序
|
|
return project_names |