using System; using System.IO; namespace ytLive.Services; /// /// TASK 55·2: the default alert clip is materialised into %TEMP% so ffmpeg can read it as a file. /// Nothing used to delete it, so every profile that ever played an alert left an orphan behind. /// /// Two touches, deliberately simple: delete this session's file on close, and sweep anything the /// prefix matches at startup (a crash leaves the same debris a clean exit does not). Only files this app /// created are touched — the prefix is the contract, and the sweep never deletes a directory. /// public static class AlertClipCleanup { public const string Prefix = "ytLive-alert-"; /// Deletes stale alert clips left in . Returns how many went. /// Missing directory is not an error. public static int Sweep(string directory) { try { if (!Directory.Exists(directory)) return 0; var removed = 0; foreach (var path in Directory.EnumerateFiles(directory, Prefix + "*.mp4")) { if (TryDelete(path)) removed++; } return removed; } catch (Exception ex) { Helpers.AppLog.Write(ex, "Alert clip sweep failed"); return 0; } } /// Deletes one clip if it exists. Safe on null/blank and on a locked file. public static bool Delete(string? path) { if (string.IsNullOrWhiteSpace(path)) return false; return TryDelete(path); } private static bool TryDelete(string path) { try { if (!File.Exists(path)) return false; File.Delete(path); return true; } catch (Exception ex) { Helpers.AppLog.Write(ex, $"Alert clip delete failed: {path}"); return false; } } }