From 7b903fb27ecd6ba439c0cfaab37c30462355dcfa Mon Sep 17 00:00:00 2001 From: Dylan De Faoite Date: Thu, 18 Dec 2025 01:21:44 +0000 Subject: [PATCH] ADD signal handling for graceful shutdown in service.py --- rewind/service.py | 40 +++++++++++++++++++++++++--------------- rewind/video.py | 2 +- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/rewind/service.py b/rewind/service.py index f597a6a..aedc3fd 100755 --- a/rewind/service.py +++ b/rewind/service.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import os import datetime +import signal import time import obsws_python as obs import subprocess @@ -10,6 +11,7 @@ from rewind.paths import load_state, write_state INTERVAL = 10 MAX_AGE_SECONDS = 60 * 60 * 1 +running = True def open_obs(): subprocess.Popen(["obs", "--minimize-to-tray"]) @@ -39,7 +41,6 @@ def cleanup_old_files(directory: str, max_age_seconds: int) -> None: os.remove(file_path) print(f"Removed old file: {file_path}") - def create_state_file() -> None: state = {"files": []} write_state(state) @@ -61,7 +62,14 @@ def add_file_to_state(file_path: str) -> None: state["files"] = files write_state(state) +def handle_shutdown(signum, frame): + global running + running = False + def main() -> None: + signal.signal(signal.SIGINT, handle_shutdown) + signal.signal(signal.SIGTERM, handle_shutdown) + open_obs() time.sleep(5) con = open_obs_connection() @@ -74,23 +82,25 @@ def main() -> None: current_files = os.listdir(recording_dir) - while True: - cleanup_old_files(recording_dir, MAX_AGE_SECONDS) + try: + while running: + cleanup_old_files(recording_dir, MAX_AGE_SECONDS) - new_files = os.listdir(recording_dir) - added_files = set(new_files) - set(current_files) + new_files = os.listdir(recording_dir) + added_files = set(new_files) - set(current_files) - # Add new files to state - for filename in added_files: - file_path = os.path.join(recording_dir, filename) - add_file_to_state(file_path) - print(f"Added new file to state: {file_path}") + # Add new files to state + for filename in added_files: + file_path = os.path.join(recording_dir, filename) + add_file_to_state(file_path) + print(f"Added new file to state: {file_path}") - current_files = new_files - time.sleep(INTERVAL) - - stop_recording(con) - con.disconnect() + current_files = new_files + time.sleep(INTERVAL) + finally: + stop_recording(con) + con.disconnect() + print("Daemon stopped") if __name__ == "__main__": main() \ No newline at end of file diff --git a/rewind/video.py b/rewind/video.py index 04fe21c..e0ac8a3 100644 --- a/rewind/video.py +++ b/rewind/video.py @@ -1,4 +1,4 @@ -import os, subprocess, datetime, json +import os, subprocess from rewind.paths import load_state