2.0 KiB
2.0 KiB
Timeline Markers Design
Overview
When a file is loaded that matches a previously processed source, numbered markers appear on the timeline at the exact positions where clips were previously extracted. Hovering over a marker shows the output path of that export.
DB Schema Change
Drop the UNIQUE constraint on filename and add start_time and output_path columns:
CREATE TABLE processed (
id INTEGER PRIMARY KEY AUTOINCREMENT,
filename TEXT NOT NULL,
start_time REAL NOT NULL,
output_path TEXT NOT NULL,
processed_at TEXT NOT NULL
)
Multiple rows per source filename are now allowed (one per export).
Migration: On startup, detect the old schema via PRAGMA table_info(processed). If start_time column is missing, drop and recreate the table. Data from the old schema is lost (acceptable — it only stored filenames, not positions).
New DB Methods
add(filename, start_time, output_path)— inserts a new row; no deduplication (accumulates all exports)get_markers(filename) -> list[tuple[float, int, str]]— finds the best fuzzy-similar filename in the DB, fetches all its rows ordered bystart_time, returns[(start_time, marker_number, output_path), ...](1-indexed)
Existing find_similar is kept unchanged for the status bar warning.
TimelineWidget Changes
set_markers(markers: list[tuple[float, int, str]])— stores marker list, callsupdate()paintEvent: for each marker, draws a red vertical line at the corresponding x position + the marker number in small white text above the linemouseMoveEvent: checks if mouse x is within ±4px of any marker's x. If yes, callsQToolTip.showText(QCursor.pos(), output_path). Otherwise hides the tooltip.
MainWindow Changes
_after_load: callsdb.get_markers(basename)and passes result totimeline.set_markers()_on_export_done: callsdb.add(filename, cursor, output_path)(now with start_time and output_path), then refreshes markers on the timeline immediately viadb.get_markers+timeline.set_markers