fix(media-assets): download stable release bundle

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-06 16:16:18 +08:00
parent 434a405e19
commit e59661f2d8
3 changed files with 109 additions and 24 deletions

View File

@@ -18,9 +18,10 @@ from datetime import datetime
from pathlib import Path
from typing import Optional
MEDIA_ASSETS_ZIP_URL = (
"https://git.jc2009.com/client-commons/media-assets/archive/main.zip"
MEDIA_ASSETS_BUNDLE_URL = (
"https://git.jc2009.com/client-commons/media-assets/releases/download/vlatest/media-assets.zip"
)
MEDIA_ASSETS_ZIP_URL = MEDIA_ASSETS_BUNDLE_URL
MEDIA_ASSETS_GIT_URL = "https://git.jc2009.com/client-commons/media-assets"
_WIN_DEFAULT_DATA_ROOT = Path(r"D:\jiangchang-data")
@@ -109,6 +110,12 @@ def _env_dict(env: dict[str, str] | None) -> dict[str, str]:
return env if env is not None else dict(os.environ)
def _media_assets_bundle_url(env: dict[str, str] | None = None) -> str:
env_map = _env_dict(env)
override = (env_map.get("MEDIA_ASSETS_BUNDLE_URL") or "").strip()
return override or MEDIA_ASSETS_BUNDLE_URL
def _resolve_jiangchang_data_root(
data_root: str | Path | None = None,
env: dict[str, str] | None = None,
@@ -474,12 +481,16 @@ def _try_download_via_zip(
shared: Path,
target: Path,
warnings: list[str],
*,
env: dict[str, str] | None = None,
url: str | None = None,
) -> bool:
download_root = _download_dir(shared)
download_root.mkdir(parents=True, exist_ok=True)
zip_path = download_root / "media-assets.zip"
extracted = download_root / "extracted"
staging = download_root / "staging"
bundle_url = url or _media_assets_bundle_url(env)
try:
if staging.exists():
@@ -487,7 +498,7 @@ def _try_download_via_zip(
if extracted.exists():
shutil.rmtree(extracted, ignore_errors=True)
_download_zip(MEDIA_ASSETS_ZIP_URL, zip_path)
_download_zip(bundle_url, zip_path)
_extract_zip(zip_path, extracted)
found = _find_media_assets_root_in_tree(extracted)
@@ -565,10 +576,15 @@ def _needs_media_repo_content(status: MediaAssetsStatus) -> bool:
)
def _maybe_repair_music_content(root: Path, status: MediaAssetsStatus) -> MediaAssetsStatus:
def _maybe_repair_music_content(
root: Path,
status: MediaAssetsStatus,
*,
env: dict[str, str] | None = None,
) -> MediaAssetsStatus:
if not _needs_music_content_repair(status):
return status
if _media_assets_root_overridden(None):
if _media_assets_root_overridden(env):
return status
warnings: list[str] = []
@@ -581,7 +597,7 @@ def _maybe_repair_music_content(root: Path, status: MediaAssetsStatus) -> MediaA
return _maybe_ensure_ffmpeg_tools(root, refreshed)
shared = _shared_parent(root)
if _try_download_via_zip(shared, root, warnings):
if _try_download_via_zip(shared, root, warnings, env=env):
refreshed = _inspect_media_assets(root, source="zip")
for warning in warnings:
if warning not in refreshed.warnings:
@@ -631,12 +647,13 @@ def ensure_media_assets(
shared.mkdir(parents=True, exist_ok=True)
warnings: list[str] = []
if _try_download_via_zip(shared, root, warnings):
if _try_download_via_zip(shared, root, warnings, env=env_map):
return _maybe_ensure_ffmpeg_tools(
root,
_maybe_repair_music_content(
root,
_inspect_media_assets(root, source="zip"),
env=env_map,
),
)
@@ -650,6 +667,7 @@ def ensure_media_assets(
root,
source="git" if _is_git_repo(root) else "local",
),
env=env_map,
),
)
@@ -657,7 +675,7 @@ def ensure_media_assets(
for warning in warnings:
if warning not in final.warnings:
final.warnings.append(warning)
repaired = _maybe_repair_music_content(root, final)
repaired = _maybe_repair_music_content(root, final, env=env_map)
for warning in warnings:
if warning not in repaired.warnings:
repaired.warnings.append(warning)