mirror of
https://github.com/storytold/effectcraft.git
synced 2026-11-11 16:33:01 -06:00
Footage: one watcher thread that wakes the interface only when a file changed, instead of a 2 s poll
Settings ▸ Import ▸ Reload Footage Changed on Disk used to spawn a stat thread every two seconds from the UI thread, request a repaint 100 ms later to collect it, and request another repaint every 2 s in between, for every project with items, focused or not: the whole interface redrew on a timer for footage that hadn't changed. `footage_reload::Watcher` is one long-lived worker: the interface tells it what to watch (recomputed when the project revision or the preference changes) and whether the window is in front; it stamps the files every 2 s while the window is in front, every 10 s while another app has the front, at once on focus regain and on a new set, and hands the stamps over — calling `ctx.request_repaint()` — only when one differs from its last look. Nothing watched means the thread sleeps. `apply_stamps` and the reload semantics are unchanged; `start_scan`/`poll_scan`/`Session::footage_scan` are gone. No new dependencies: the stat loop is also what footage on a network share relies on, where FSEvents would not report another machine's writes. Tests: the watcher wakes the interface for the first stamps and for each change and never for an unchanged file; behind another app it rests until the window is back; nothing watched is nothing stamped and a new set is reported whole (and dropping it ends the thread); the host test `the_watcher_notices_a_footage_file_changed_on_disk` saves a PSD from "another app" and sees it reloaded once. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5.1
parent
2a61a05fd4
commit
26e6145cee
@@ -153,7 +153,8 @@ page!(Import {
|
||||
sequence_fps: f64 = 30.0,
|
||||
report_missing_frames: bool = true,
|
||||
/// Automatically Reload Footage whose file another app changed (size or modification time),
|
||||
/// checked every two seconds and when the window comes back to the front: `off`,
|
||||
/// checked every two seconds while the window is in front, every ten seconds while it is
|
||||
/// not, and when it comes back to the front: `off`,
|
||||
/// `nonSequence` (the default, as in After Effects: image sequences are left alone) or `all`.
|
||||
auto_reload_footage: String = "nonSequence".into(),
|
||||
/// Interpret unlabeled alpha as: `ask`, `guess`, `ignore`, `straight`, `premultiplied`.
|
||||
|
||||
Reference in New Issue
Block a user