diff --git a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_sync_timers.svelte b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_sync_timers.svelte index c28eb7f3..581936ea 100644 --- a/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_sync_timers.svelte +++ b/src/routes/events/[event_id]/(launcher)/cfg_components/launcher_cfg_sync_timers.svelte @@ -18,6 +18,26 @@ 2} | Loops: Active" > + +
+ + {$events_loc.launcher.sync_paused ? '⏸ Sync Paused' : '▶ Sync Active'} + + +
+ {#if $events_loc.launcher.sync_intervals}
diff --git a/src/routes/events/[event_id]/(launcher)/launcher_background_sync.svelte b/src/routes/events/[event_id]/(launcher)/launcher_background_sync.svelte index 29252730..ff6a86a3 100644 --- a/src/routes/events/[event_id]/(launcher)/launcher_background_sync.svelte +++ b/src/routes/events/[event_id]/(launcher)/launcher_background_sync.svelte @@ -21,13 +21,16 @@ let last_heartbeat: string | null = $state(null); // Loop Timings (Visible in UI) + // WHY: Session was 15s which combined with the SWR background-refresh pattern + // caused a continuous API call every 15s even on cache hits. 60s is still + // responsive for live conference use but dramatically reduces server load. let loop_info = $state({ event: 90000, device: 60000, - location: 30000, - session: 15000, - presentation: 45000, - presenter: 60000 + location: 60000, + session: 60000, + presentation: 120000, + presenter: 120000 }); // Timer Handles @@ -116,6 +119,7 @@ * API Refresh: Event */ async function refresh_event_data() { + if ($events_loc.launcher.sync_paused) return; if (!$events_slct.event_id) return; try { await events_func.load_ae_obj_id__event({ @@ -134,6 +138,7 @@ * API Refresh: Sessions in Room */ async function refresh_session_data() { + if ($events_loc.launcher.sync_paused) return; const location_id = $events_slct.event_location_id; if (!location_id) return; try { @@ -153,6 +158,7 @@ * API Refresh: Presentations for Selected Session */ async function refresh_presentation_data() { + if ($events_loc.launcher.sync_paused) return; const session_id = $events_slct.event_session_id; if (!session_id) return; try { @@ -171,6 +177,7 @@ * API Refresh: Presenters for Selected Session */ async function refresh_presenter_data() { + if ($events_loc.launcher.sync_paused) return; const session_id = $events_slct.event_session_id; if (!session_id) return; try { @@ -186,6 +193,7 @@ } async function run_sync_cycle() { + if ($events_loc.launcher.sync_paused) return; const location_id = $events_slct.event_location_id; const cache_root = $ae_loc.local_file_cache_path; const prefix_len = $ae_loc.native_device?.hash_prefix_length || 2; @@ -373,6 +381,7 @@ * Ensures we have latest room settings. */ async function refresh_location_config() { + if ($events_loc.launcher.sync_paused) return; const location_id = $events_slct.event_location_id; if (!location_id) return;