using DeepDrftPublic.Client.Common; using Microsoft.JSInterop; namespace DeepDrftPublic.Client.Services; /// /// Client-side runtime writer for public-site settings (Phase 18 wave 18.6), the analogue of /// . Reads the current preference off the in-memory /// (already seeded at prerender and bridged into WASM), and writes a /// 365-day cookie via document.cookie interop when the listener changes it in the Settings menu — /// the same durable-truth seam dark mode uses, so the choice survives the session and seeds the next visit's /// prerender (no flash). /// public class SettingsCookieService(PublicSiteSettings settings, IJSRuntime js) : SettingsServiceBase { private const int ExpiryDays = 365; public StreamQuality GetStreamQuality() => settings.StreamQuality; public async ValueTask SetStreamQualityAsync(StreamQuality quality) { if (settings.StreamQuality == quality) return; await WriteCookieAsync(StreamQualityCookieName, FormatStreamQuality(quality)); settings.StreamQuality = quality; } private async ValueTask WriteCookieAsync(string name, string value) { await js.InvokeVoidAsync("DeepDrftSettings.setCookie", name, value, ExpiryDays); } }