fix: marker labels show actual m-number from filename instead of time order
Extract the manual export counter (m1, m2, ...) from the output path so timeline markers match their filenames. Falls back to sequential numbering for old-format paths without m-prefix. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+15
-6
@@ -1,4 +1,5 @@
|
||||
import os
|
||||
import re
|
||||
import sqlite3
|
||||
import threading
|
||||
from datetime import datetime, timezone
|
||||
@@ -7,6 +8,12 @@ from pathlib import Path
|
||||
from .paths import _log
|
||||
|
||||
|
||||
def _extract_m_number(output_path: str) -> int | None:
|
||||
"""Extract the manual export number from a path like clip_001_m3_0.mp4."""
|
||||
m = re.search(r'_m(\d+)[_.]', os.path.basename(output_path))
|
||||
return int(m.group(1)) if m else None
|
||||
|
||||
|
||||
class ProcessedDB:
|
||||
_SCHEMA_VERSION = 4 # bump when schema changes
|
||||
|
||||
@@ -378,12 +385,13 @@ class ProcessedDB:
|
||||
(match, profile),
|
||||
).fetchall()
|
||||
seen_times: dict[float, tuple[float, int, str, float]] = {}
|
||||
n = 0
|
||||
seq = 0
|
||||
for t, p, dur, cnt, spr in rows:
|
||||
if t not in seen_times:
|
||||
n += 1
|
||||
seq += 1
|
||||
num = _extract_m_number(p) or seq
|
||||
span = (dur or 8.0) + ((cnt or 1) - 1) * (spr or 3.0)
|
||||
seen_times[t] = (t, n, p, span)
|
||||
seen_times[t] = (t, num, p, span)
|
||||
return list(seen_times.values())
|
||||
|
||||
def get_markers(self, filename: str, profile: str = "default",
|
||||
@@ -424,12 +432,13 @@ class ProcessedDB:
|
||||
result: dict[str, list[tuple[float, int, str, float]]] = {}
|
||||
for folder, folder_rows in by_folder.items():
|
||||
seen: dict[float, tuple[float, int, str, float]] = {}
|
||||
n = 0
|
||||
seq = 0
|
||||
for t, p, dur, cnt, spr in folder_rows:
|
||||
if t not in seen:
|
||||
n += 1
|
||||
seq += 1
|
||||
num = _extract_m_number(p) or seq
|
||||
span = (dur or 8.0) + ((cnt or 1) - 1) * (spr or 3.0)
|
||||
seen[t] = (t, n, p, span)
|
||||
seen[t] = (t, num, p, span)
|
||||
name = os.path.basename(folder)
|
||||
result[name] = list(seen.values())
|
||||
return result
|
||||
|
||||
Reference in New Issue
Block a user