namespace Toak.Core; public static class StateTracker { private static readonly string StateFilePath = Path.Combine(Path.GetTempPath(), "toak_state.pid"); public static bool IsRecording() { return File.Exists(StateFilePath); } public static void SetRecording(int ffmpegPid) { Logger.LogDebug($"Setting recording state with PID {ffmpegPid}"); File.WriteAllText(StateFilePath, ffmpegPid.ToString()); } public static int? GetRecordingPid() { if (File.Exists(StateFilePath)) { var content = File.ReadAllText(StateFilePath).Trim(); if (int.TryParse(content, out var pid)) { Logger.LogDebug($"Read recording PID {pid} from state file"); return pid; } } return null; } public static void ClearRecording() { if (File.Exists(StateFilePath)) { Logger.LogDebug("Clearing recording state file"); File.Delete(StateFilePath); } } }