diff --git a/rewind/daemon.py b/rewind/daemon.py index 0e6ee0d..1352a0e 100755 --- a/rewind/daemon.py +++ b/rewind/daemon.py @@ -27,9 +27,6 @@ INTERVAL = 10 SENTINEL_FILE = os.path.expanduser("~/.config/obs-studio/.sentinel") OBS_MAX_RETRIES = 10 -seen_files = set() -seen_lock = Lock() - def shutdown(signum, frame): global running logger.info(f"Received signal {signum}, shutting down cleanly") @@ -119,12 +116,7 @@ class Handler(FileSystemEventHandler): return if not event.src_path.endswith(".ts"): return - - with seen_lock: - if event.src_path in seen_files: - return - seen_files.add(event.src_path) - + add_file_to_state(event.src_path) logger.info(f"Added new file to state: {event.src_path}") diff --git a/rewind/state.py b/rewind/state.py index e2e4345..eea84ed 100644 --- a/rewind/state.py +++ b/rewind/state.py @@ -33,6 +33,11 @@ def add_file_to_state(file_path: str) -> None: state = load_state() files = state.get("files", []) + # Idempotency guard + existing_paths = {f["path"] for f in files} + if file_path in existing_paths: + return + files.append({ "path": file_path, "timestamp": datetime.datetime.now().timestamp(),