Fix sorting: parse full timestamp from filename for videos

This commit is contained in:
hbrain 2026-05-30 20:36:33 +00:00
parent b89934d570
commit 7d1e052326

View file

@ -498,10 +498,31 @@ def media_embedded_date(path: Path) -> datetime | None:
return ffprobe_creation_date(path) return ffprobe_creation_date(path)
def parse_date_from_filename(path: Path) -> datetime | None:
# Look for 8 digits (YYYYMMDD) followed by optional separator and 6 digits (HHMMSS)
m = re.search(r'(\d{8})[_-]?(\d{6})?', path.stem)
if m:
try:
date_part = m.group(1)
time_part = m.group(2) if m.group(2) else '000000'
full_ts = date_part + time_part
return datetime.strptime(full_ts, '%Y%m%d%H%M%S')
except ValueError:
return None
return None
def media_date(path: Path) -> datetime: def media_date(path: Path) -> datetime:
# 1. Try embedded metadata
dt = media_embedded_date(path) dt = media_embedded_date(path)
# 2. Try filename parsing for videos
if dt is None and path.suffix.lower() in VIDEO_EXTS:
dt = parse_date_from_filename(path)
# 3. Fallback to mtime
if dt is None: if dt is None:
dt = datetime.fromtimestamp(path.stat().st_mtime) dt = datetime.fromtimestamp(path.stat().st_mtime)
if dt.tzinfo is not None: if dt.tzinfo is not None:
dt = dt.astimezone().replace(tzinfo=None) dt = dt.astimezone().replace(tzinfo=None)
return dt return dt