From 576cc807b55511515c3eea8461b3338878e8a0b0 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 3 May 2026 14:26:42 +0000 Subject: [PATCH] Fix parse_artist_title (ANS.* bug) + unify station naming na FOLX SLO MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PROBLEMS: 1. parse_artist_title je uporabljal Path(s).stem za stripping ext-a, kar je pri YT title 'ANS.NAVEZA - SREČA OPOTEČA' vrnilo 'ANS' (Path smatra '.NAVEZA - SREČA OPOTEČA' kot extension). Posledica: parser failed → ACR fallback → 'Folx' kot artist na 15+ jobih. 2. tv_station je imel dva imena: 'FOLX SLOVENIJA' (frontend default) in 'FOLX SLO' (qnet match output) — UI tabi niso seštevali pravilno. FIXES: - parse_artist_title: ext stripping samo za znane ekstenzije (.mp4, .mp3, .m4a, .webm, .mkv, .avi, .mov, .wav, .flac, .aac, .opus, .ogg, .wmv, .mxf), NE za naključne pike v YT title. - Vsi defaultni 'FOLX SLOVENIJA' → 'FOLX SLO' v Pydantic modelih + templates + filter tabi. - Nextcloud mapping STATION_TO_NEXTCLOUD_FOLDER ostane nespremenjen (FOLX SLO → mapa 'FOLX SLOVENIJA', kjer pač zaplane). BACKFILL (že apliciran prek scripte): - 15 jobov z parsed_artist='Folx' popravljenih na pravi izvajalec iz youtube_title (ANS.NAVEZA, ANS.BITENC, ANS. ROKA ŽLINDRE, ipd.). - 86 jobov tv_station 'FOLX SLOVENIJA' → 'FOLX SLO'. --- app/main.py | 24 +++++++++++++++++------- templates/index.html | 14 +++++++------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/main.py b/app/main.py index d4d0893..d0928e0 100644 --- a/app/main.py +++ b/app/main.py @@ -333,8 +333,18 @@ def parse_artist_title(filename_or_title): if not filename_or_title: return (None, None) - # Odstrani extension - name = Path(filename_or_title).stem if "." in filename_or_title else filename_or_title + # Odstrani extension SAMO če je dejansko file extension (kratko, brez presledka). + # Path("ANS.NAVEZA - SREČA OPOTEČA").stem vrne "ANS" — narobe za YT title. + # Pravilno: samo če je string brez presledkov ali se konča na običajno ext. + _COMMON_EXT = {".mp4", ".mp3", ".m4a", ".webm", ".mkv", ".avi", ".mov", + ".wav", ".flac", ".aac", ".opus", ".ogg", ".wmv", ".mxf"} + name = filename_or_title + if "." in name: + # Vzemi zadnjo piko in preveri ali je to znana ext + last_dot = name.rfind(".") + ext = name[last_dot:].lower() + if ext in _COMMON_EXT and last_dot > 0: + name = name[:last_dot] # Odstrani noise patterns for pat in _NOISE_PATTERNS: @@ -1032,7 +1042,7 @@ def process_job(job_id): if final_job.get("auto_upload_to_nextcloud") and _nextcloud_configured(): update_job(job_id, nextcloud_status="uploading", nextcloud_error=None) download_name = build_download_filename(final_job) - tv_station = final_job.get("tv_station", "FOLX SLOVENIJA") + tv_station = final_job.get("tv_station", "FOLX SLO") nc_folder = _nextcloud_folder_for_station(tv_station) target_subdir = f"folxspeed/REELS/{nc_folder}" print(f"☁️ Avto-upload v Nextcloud: /{target_subdir}/{download_name}", flush=True) @@ -1300,7 +1310,7 @@ class YouTubeJobIn(BaseModel): subtitle_style: str = "reels" whisper_model: str = "large-v3" quality: str = "medium" - tv_station: str = "FOLX SLOVENIJA" # za Nextcloud target mapo + tv_station: str = "FOLX SLO" # za Nextcloud target mapo class StartJobIn(BaseModel): @@ -1325,7 +1335,7 @@ class StartJobIn(BaseModel): # Batch tracking za multi-upload (Telegram summary) batch_id: Optional[str] = None # TV postaja — določa Nextcloud target mapo - tv_station: str = "FOLX SLOVENIJA" + tv_station: str = "FOLX SLO" # ──────────────────────────────────────────────────────────────── @@ -1333,7 +1343,7 @@ class StartJobIn(BaseModel): # ──────────────────────────────────────────────────────────────── class DedupCheckRequest(BaseModel): filenames: list[str] - tv_station: str = "FOLX SLOVENIJA" + tv_station: str = "FOLX SLO" @app.post("/api/dedup/check") @@ -2308,7 +2318,7 @@ async def upload_nextcloud(job_id: str, user: str = Depends(check_auth)): download_name = build_download_filename(job) # TV postaja določa target mapo (mapping Qnet -> Nextcloud folder) - tv_station = job.get("tv_station", "FOLX SLOVENIJA") + tv_station = job.get("tv_station", "FOLX SLO") nc_folder = _nextcloud_folder_for_station(tv_station) target_subdir = f"folxspeed/REELS/{nc_folder}" diff --git a/templates/index.html b/templates/index.html index 49bb430..3e05d8a 100644 --- a/templates/index.html +++ b/templates/index.html @@ -351,13 +351,13 @@
- +
- + @@ -428,8 +428,8 @@ - `); // TV station label (brez emoji) - const tvStation = job.tv_station || "FOLX SLOVENIJA"; + const tvStation = job.tv_station || "FOLX SLO"; const tvBadge = `${escapeHtml(tvStation)}`; el.innerHTML = `