From 1dc0f0d77c918d88ada22af91932efa105695771 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Fri, 30 Jan 2026 16:21:46 -0500 Subject: [PATCH] perf(launcher): instrument SWR tracing and optimize session loading flow --- src/lib/ae_events/ae_events__event_session.ts | 81 ++- .../(launcher)/launcher/+layout.svelte | 537 +----------------- .../(launcher)/menu_session_list.svelte | 127 +---- 3 files changed, 108 insertions(+), 637 deletions(-) diff --git a/src/lib/ae_events/ae_events__event_session.ts b/src/lib/ae_events/ae_events__event_session.ts index 82112ade..2b5ecbcb 100644 --- a/src/lib/ae_events/ae_events__event_session.ts +++ b/src/lib/ae_events/ae_events__event_session.ts @@ -10,7 +10,7 @@ import { load_ae_obj_li__event_presentation } from '$lib/ae_events/ae_events__ev const ae_promises: key_val = {}; -// Updated 2026-01-30: Fixed - Removed aggressive ID overwriting +// Updated 2026-01-30: Trace-Ready SWR Pattern export async function load_ae_obj_id__event_session({ api_cfg, event_session_id, @@ -41,56 +41,91 @@ export async function load_ae_obj_id__event_session({ log_lvl?: number; }): Promise { if (log_lvl) { - console.log(`*** load_ae_obj_id__event_session() *** [V3] id=${event_session_id} (SWR)`); + console.log(`🔎 [Trace] load_ae_obj_id__event_session: START (id=${event_session_id}, try_cache=${try_cache})`); } + // 1. FAST PATH: Return cached data immediately if (try_cache) { try { const cached = await db_events.session.get(event_session_id); if (cached) { + if (log_lvl) console.log(`✅ [Trace] load_ae_obj_id: CACHE HIT. Returning stale data for id=${event_session_id}`); + + // Background refresh & nested loads (non-blocking) _refresh_session_id_background({ api_cfg, event_session_id, view, try_cache, inc_file_li, inc_all_file_li, inc_presentation_li, inc_presenter_li, - enabled, hidden, limit, offset, log_lvl: 0 + enabled, hidden, limit, offset, log_lvl: log_lvl > 1 ? log_lvl : 0 }); + return await _handle_nested_loads(cached, { api_cfg, inc_file_li, inc_all_file_li, inc_presentation_li, inc_presenter_li, enabled, hidden, limit, offset, try_cache, log_lvl: 0 }); + } else if (log_lvl) { + console.log(`⏳ [Trace] load_ae_obj_id: CACHE MISS for id=${event_session_id}`); } - } catch (e) {} + } catch (e) { + if (log_lvl) console.error(`❌ [Trace] load_ae_obj_id: Cache access error:`, e); + } } + // 2. SLOW PATH: Wait for API + if (log_lvl) console.log(`🚀 [Trace] load_ae_obj_id: Proceeding to API path for id=${event_session_id}`); return await _refresh_session_id_background({ api_cfg, event_session_id, view, try_cache, inc_file_li, inc_all_file_li, inc_presentation_li, inc_presenter_li, enabled, hidden, limit, offset, log_lvl }); } +/** + * Internal background refresh for a single session + */ async function _refresh_session_id_background({ api_cfg, event_session_id, view, try_cache, inc_file_li, inc_all_file_li, inc_presentation_li, inc_presenter_li, enabled, hidden, limit, offset, log_lvl }: any) { if (typeof navigator !== 'undefined' && !navigator.onLine) return null; try { + if (log_lvl) console.log(`📡 [Trace] _refresh_session_id: API Fetching id=${event_session_id}`); const result = await api.get_ae_obj_v3({ api_cfg, obj_type: 'event_session', obj_id: event_session_id, view, log_lvl }); + if (result) { const processed = await process_ae_obj__event_session_props({ obj_li: [result], log_lvl }); const processed_obj = processed[0]; + + if (log_lvl) console.log(`📦 [Trace] _refresh_session_id: Received from API (id=${processed_obj.id})`); + if (try_cache) { await db_save_ae_obj_li__ae_obj({ db_instance: db_events, table_name: 'session', obj_li: [processed_obj], properties_to_save, log_lvl }); + if (log_lvl) console.log(`💾 [Trace] _refresh_session_id: Saved to IDB cache.`); } return await _handle_nested_loads(processed_obj, { api_cfg, inc_file_li, inc_all_file_li, inc_presentation_li, inc_presenter_li, enabled, hidden, limit, offset, try_cache: false, log_lvl }); } - } catch (e) {} + } catch (e) { + if (log_lvl) console.error(`❌ [Trace] _refresh_session_id: API error for id=${event_session_id}:`, e); + } return null; } +/** + * Helper to handle nested collection loads for a session + */ async function _handle_nested_loads(session_obj: any, { api_cfg, inc_file_li, inc_all_file_li, inc_presentation_li, inc_presenter_li, enabled, hidden, limit, offset, try_cache, log_lvl }: any) { const current_session_id = session_obj.id || session_obj.event_session_id; if (!current_session_id) return session_obj; + const tasks = []; if (inc_file_li) { - tasks.push(load_ae_obj_li__event_file({ api_cfg, for_obj_type: 'event_session', for_obj_id: current_session_id, enabled, limit: 15, try_cache, log_lvl }).then(res => session_obj.event_file_li = res)); + tasks.push(load_ae_obj_li__event_file({ + api_cfg, for_obj_type: 'event_session', for_obj_id: current_session_id, + enabled, limit: 15, try_cache, log_lvl + }).then(res => session_obj.event_file_li = res)); } + if (inc_presentation_li) { - tasks.push(load_ae_obj_li__event_presentation({ api_cfg, for_obj_type: 'event_session', for_obj_id: current_session_id, inc_file_li: inc_all_file_li, inc_presenter_li, enabled, hidden, limit, offset, try_cache, log_lvl }).then(res => session_obj.event_presentation_li = res)); + tasks.push(load_ae_obj_li__event_presentation({ + api_cfg, for_obj_type: 'event_session', for_obj_id: current_session_id, + inc_file_li: inc_all_file_li, inc_presenter_li, enabled, hidden, limit, offset, try_cache, log_lvl + }).then(res => session_obj.event_presentation_li = res)); } + if (tasks.length > 0) await Promise.all(tasks); return session_obj; } +// Updated 2026-01-30: Robust Cache Lookups with Tracing export async function load_ae_obj_li__event_session({ api_cfg, for_obj_type = 'event', @@ -131,17 +166,32 @@ export async function load_ae_obj_li__event_session({ log_lvl?: number; }): Promise { if (log_lvl) { - console.log(`*** load_ae_obj_li__event_session() *** [V3] for=${for_obj_type}:${for_obj_id} (SWR)`); + console.log(`🔎 [Trace] load_ae_obj_li__event_session: START (for=${for_obj_type}:${for_obj_id}, try_cache=${try_cache})`); } if (try_cache) { try { - const cached_li = await db_events.session.where('event_location_id').equals(for_obj_id).toArray(); + // Robust lookup logic + let query; + if (for_obj_type === 'event_location') query = db_events.session.where('event_location_id').equals(for_obj_id); + else if (for_obj_type === 'event') query = db_events.session.where('event_id').equals(for_obj_id); + else query = db_events.session.where('for_id').equals(for_obj_id); + + const cached_li = await query.toArray(); + if (cached_li && cached_li.length > 0) { - _refresh_session_li_background({ api_cfg, for_obj_type, for_obj_id, inc_file_li, inc_all_file_li, inc_presentation_li, inc_presenter_li, enabled, hidden, limit, offset, order_by_li, try_cache, log_lvl: 0 }); + if (log_lvl) console.log(`✅ [Trace] load_ae_obj_li: CACHE HIT (${cached_li.length} items).`); + + // Background refresh (non-blocking) + _refresh_session_li_background({ api_cfg, for_obj_type, for_obj_id, inc_file_li, inc_all_file_li, inc_presentation_li, inc_presenter_li, enabled, hidden, limit, offset, order_by_li, try_cache, log_lvl: log_lvl > 1 ? log_lvl : 0 }); + return cached_li; + } else if (log_lvl) { + console.log(`⏳ [Trace] load_ae_obj_li: CACHE MISS for type=${for_obj_type} id=${for_obj_id}`); } - } catch (e) {} + } catch (e) { + if (log_lvl) console.error(`❌ [Trace] load_ae_obj_li: Cache access error:`, e); + } } return await _refresh_session_li_background({ api_cfg, for_obj_type, for_obj_id, inc_file_li, inc_all_file_li, inc_presentation_li, inc_presenter_li, enabled, hidden, limit, offset, order_by_li, try_cache, log_lvl }); @@ -150,15 +200,22 @@ export async function load_ae_obj_li__event_session({ async function _refresh_session_li_background({ api_cfg, for_obj_type, for_obj_id, inc_file_li, inc_all_file_li, inc_presentation_li, inc_presenter_li, enabled, hidden, limit, offset, order_by_li, try_cache, log_lvl }: any) { if (typeof navigator !== 'undefined' && !navigator.onLine) return []; try { + if (log_lvl) console.log(`📡 [Trace] _refresh_session_li: API Fetching for=${for_obj_type}:${for_obj_id}`); const result_li = await api.get_ae_obj_li_v3({ api_cfg, obj_type: 'event_session', for_obj_type, for_obj_id, enabled, hidden, limit, offset, order_by_li, log_lvl }); + if (result_li) { const processed = await process_ae_obj__event_session_props({ obj_li: result_li, log_lvl }); + if (log_lvl) console.log(`📦 [Trace] _refresh_session_li: Received ${processed.length} items from API.`); + if (try_cache) { await db_save_ae_obj_li__ae_obj({ db_instance: db_events, table_name: 'session', obj_li: processed, properties_to_save, log_lvl }); + if (log_lvl) console.log(`💾 [Trace] _refresh_session_li: Saved to IDB cache.`); } return processed; } - } catch (e) {} + } catch (e) { + if (log_lvl) console.error(`❌ [Trace] _refresh_session_li: API error:`, e); + } return []; } diff --git a/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte b/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte index b5ea07cb..da4e75c4 100644 --- a/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte +++ b/src/routes/events/[event_id]/(launcher)/launcher/+layout.svelte @@ -21,6 +21,7 @@ import { // Brain, // House, Library, + LoaderCircle, // RefreshCw, Satellite } from '@lucide/svelte'; @@ -130,15 +131,11 @@ // Event let lq__event_obj = $derived( liveQuery(async () => { - if (log_lvl) { + if (log_lvl > 1) { console.log(`lq__event_obj: event_id = ${$events_slct?.event_id}`); } let results = await db_events.event.get($events_slct?.event_id ?? ''); // null or undefined does not reset things like '' does - if (log_lvl) { - console.log(`lq__event_obj: results = `, results); - } - // tmp_event_obj = { ...results }; // Check if results are different than the current session version stored under $events_slct if ($events_slct.event_obj && results) { @@ -150,12 +147,6 @@ $events_slct.event_obj ); } - } else { - if (log_lvl) { - console.log( - `Session slct stored version has not changed for ID = ${$events_slct.event_id}` - ); - } } } @@ -166,32 +157,12 @@ // Event Device let lq__event_device_obj = $derived( liveQuery(async () => { - if (log_lvl) { - console.log( - `lq__event_device_obj: event_device_id = ${$events_slct?.event_device_id}` - ); - } let results = await db_events.device.get($events_slct.event_device_id); - if (log_lvl) { - console.log(`lq__event_device_obj: results = `, results); - } // Check if results are different than the current session version stored under $events_slct if ($events_slct.event_device_obj && results) { if (JSON.stringify($events_slct.event_device_obj) !== JSON.stringify(results)) { $events_slct.event_device_obj = { ...results }; - if (log_lvl) { - console.log( - `Device slct stored version has changed for ID = ${$events_slct.event_device_id}`, - $events_slct.event_device_obj - ); - } - } else { - if (log_lvl > 1) { - console.log( - `Device slct stored version has not changed for ID = ${$events_slct.event_device_id}` - ); - } } } @@ -247,56 +218,15 @@ // Event Session let lq__event_session_obj = $derived( liveQuery(async () => { + if (log_lvl) console.log(`🔍 [Trace] Launcher Layout LQ: Fetching session_id=${$events_slct.event_session_id}`); let results = await db_events.session.get($events_slct.event_session_id); - + if (log_lvl) console.log(`📦 [Trace] Launcher Layout LQ: Result=`, results?.name || 'NOT FOUND'); return results; }) ); - // let lq__event_session_obj_li = $derived(liveQuery(async () => { - // let results = await db_events.session - // // .bulkGet(event_session_id_li); - // .where('event_location_id') - // .equals($events_slct.event_location_id) - // .sortBy('name'); - - // return results; - // })); - - // let lq__event_session_obj_li = $derived(liveQuery(async () => { - // let results = await db_events.session - // .where('event_location_id') - // .equals($events_slct.event_location_id) - // // .and((x) => (x.archive_on === null || x.archive_on > (new Date()).toISOString())) - // // .and((x) => (x.archive_on === null || x.archive_on > (new Date()).toISOString())) // null or future events only - // // .and((x) => (x.archive_on < (new Date()).toISOString())) // past events only - // // .and((x) => (x.archive_on > (new Date()).toISOString())) // future events only - // // .orderBy('updated_on') - // // .toArray() - // .reverse() - // // .limit($idaa_loc.bb.qry__limit) - // .sortBy('name'); - // // .sortBy('tmp_sort_1'); - // // .sortBy('updated_on'); - // // .sortBy('updated_on, created_on'); - // // .sortBy('[updated_on+created_on]'); - // // .sortBy('[created_on+updated_on]'); - - // return results; - // })); - let lq__event_session_obj_li = $derived( liveQuery(async () => { - log_lvl = 1; - - if (log_lvl) { - console.log(`LQ - $lq__event_obj.cfg_json = `, $lq__event_obj?.cfg_json); - console.log( - `LQ - $events_loc.filter__category_code = `, - $events_loc.filter__category_code - ); - } - if ($events_sess.session_li_trigger && !$events_sess?.session_li) { $events_sess.session_li = null; $events_sess.session_li_trigger = false; @@ -305,57 +235,18 @@ let results; if ($events_sess?.session_li && $events_sess?.session_li?.length) { - // if (log_lvl) { - // console.log(`LQ - Using $events_sess.session_li to get event sessions.`); - // } - // // $events_sess.session_li_trigger = false; - // let event_session_id_li = []; // This is to prevent the array from constantly updating and triggering the liveQuery. - // for (let i = 0; i < $events_sess?.session_li.length; i++) { - // let event_session_obj = $events_sess?.session_li[i]; - // let event_session_id = event_session_obj.event_session_id; - // event_session_id_li.push(event_session_id); - // } - // // let event_session_id_li = tmp_li; - // results = await db_events.session - // .bulkGet(event_session_id_li); - // } else if ($lq__event_obj?.cfg_json?.session_group_sort === 'DESC') { - // if (log_lvl) { - // console.log(`LQ - Using DESC sort for Event Session list event_id: ${$events_slct?.event_id}`); - // } - // results = await db_events.session - // // .orderBy('updated_on') - // .where('event_id') - // .equals($events_slct?.event_id ?? '') // null or undefined does not reset things like '' does - // .reverse() - // // .sortBy('tmp_sort_2'); - // .sortBy('updated_on'); - // // .sortBy('title'); - // } else if ($events_loc.filter__category_code && $events_loc.filter__category_code.length > 0) { - // if (log_lvl) { - // console.log(`LQ - Using category filter: ${$events_loc.filter__category_code}`); - // } - // results = await db_events.session - // .where('event_id') - // .equals($events_slct?.event_id ?? '') // null or undefined does not reset things like '' does - // .and(session => session.category_code === $events_loc.filter__category_code) - // .reverse() - // .sortBy('tmp_sort_1'); + // Pre-filtered list in session storage } else if ($events_slct.event_location_id) { - if (log_lvl) { - // console.log(`$lq__event_obj.cfg_json = `, $lq__event_obj?.cfg_json); + if (log_lvl > 1) { console.log( - `LQ - Using default sort for Event Session list event_id: ${$events_slct?.event_id}` + `LQ - Using default sort for Event Session list location_id: ${$events_slct?.event_location_id}` ); } results = await db_events.session .where('event_location_id') .equals($events_slct.event_location_id) - // .where('event_id') - // .equals($events_slct?.event_id ?? '') // null or undefined does not reset things like '' does .reverse() .sortBy('name'); - // .sortBy('tmp_sort_1'); - // .sortBy('updated_on'); } // Check if results are different than the current session version stored under $events_slct @@ -364,18 +255,6 @@ JSON.stringify($events_slct.event_session_obj_li) !== JSON.stringify(results) ) { $events_slct.event_session_obj_li = [...(results || [])]; - if (log_lvl) { - console.log( - `Session slct li stored version has changed for ID = ${$events_slct.event_id}`, - $events_slct.event_session_obj_li - ); - } - } else { - if (log_lvl > 1) { - console.log( - `Session slct li stored version has not changed for ID = ${$events_slct.event_id}` - ); - } } return results; @@ -401,7 +280,6 @@ /* *** BEGIN *** Handle WebSocket events */ function handle_ws_conn(ws_conn_status: any) { - log_lvl = 1; if (log_lvl) { console.log('*** handle_ws_conn() ***', ws_conn_status); } @@ -419,7 +297,6 @@ // This client received a WebSocket message. // When this is called something seems to go wrong. It creates a loop when connected. function handle_ws_recv(ws_recv_status: any) { - log_lvl = 1; if (log_lvl) { console.log('*** handle_ws_recv() ***', ws_recv_status); } @@ -447,46 +324,21 @@ if (log_lvl) { console.log(`ae_load: ${obj_type} ${obj_id}`); } - if (log_lvl > 1) { - console.log(cmd); - } if (obj_type == 'event_session') { $events_slct.event_session_id = obj_id; - // $slct_trigger = 'event_session'; - // $events_sess.launcher.show_launcher_message = false; - // data.url.searchParams.set('session_id', $events_slct.event_session_id); - - // let new_url = data.url.toString(); - // console.log(new_url); - // goto(new_url, {replaceState: false}); - - // ae_promises.slct_event_session_id = events_func.load_ae_obj_id__event_session({ - // api_cfg: $ae_api, - // event_session_id: $events_slct.event_session_id, - // inc_file_li: true, - // inc_presentation_li: true, - // try_cache: true, - // log_lvl: log_lvl - // }) - // .then(async (load_results) => { - - // }); - // tick(); - console.log(`Current URL`, data.url); + if (log_lvl) console.log(`[WS Trace] Current URL`, data.url); let new_url = new URL(data.url); new_url.pathname = `/events/${$lq__event_session_obj?.event_id}/launcher/${$lq__event_session_obj?.event_location_id}`; new_url.searchParams.set('session_id', $events_slct.event_session_id); - console.log(`New URL: ${new_url}`); + if (log_lvl) console.log(`[WS Trace] New URL: ${new_url}`); let new_url_str = new_url.toString(); goto(new_url_str, { replaceState: false }); } // AE Download (event file ID) // This does not yet work with the native app caching. } else if (cmd.startsWith('ae_download:')) { - log_lvl = 1; - let cmd_parts = cmd.split(':'); let obj_parts = cmd_parts[1].split('='); let obj_type = obj_parts[0]; @@ -499,9 +351,6 @@ `ae_download: ${obj_type} ${obj_id} ${obj_filename} ${obj_extension}` ); } - if (log_lvl > 1) { - console.log(cmd); - } ae_promises[obj_id] = api.download_hosted_file({ api_cfg: $ae_api, @@ -522,9 +371,6 @@ if (log_lvl) { console.log(`ae_open: ${obj_type} ${obj_id}`); } - if (log_lvl > 1) { - console.log(cmd); - } // NOTE: This is not finished yet. if (obj_type == 'event_file') { @@ -541,45 +387,18 @@ $events_sess.launcher.modal__title = $events_sess.launcher.modal__title ?? '*'; $events_sess.launcher.modal__open_event_file_id = $events_slct.event_file_id; - // $events_sess.launcher.modal__event_file_obj = event_file_obj; - - // $events_sess.launcher.modal__img_src = `/event/file/${event_file_obj.event_file_id}/download`; - - // $events_slct.event_file_obj = event_file_obj; - - // $slct_trigger = 'event_file'; - // $events_sess.launcher.event_file_open.open_status = 'open'; - - // $events_sess.launcher.show_launcher_message = false; - // NOTE: This is not finished yet. - // This should now trigger the Svelte component for the event launcher file container. Currently this does nothing. Need to bind to something or use the "events_sess.launcher" object? - - // let as_modal_result = open_event_file_as_modal({event_file_id: event_file_obj.event_file_id, method: 'modal', filename: event_file_obj.filename, extension: event_file_obj.extension, modal_title: poster_title}); - // if (as_modal_result) { - // console.log($events_sess.launcher); - // console.log(event_file_obj); - // events_sess.launcher.set({...$events_sess.launcher, ...as_modal_result}); - // } } // NOTE: This is not finished yet. // AE Close (event file modal) } else if (cmd.startsWith('ae_close:')) { - console.log(); let cmd_parts = cmd.split(':'); let what = cmd_parts[1]; - // let obj_type = obj_parts[0]; - // let obj_id = obj_parts[1]; if (what == 'event_file_modal') { $events_sess.launcher.modal__title = ''; $events_sess.launcher.modal__open_event_file_id = null; $events_sess.launcher.modal__event_file_obj = null; - - // $events_sess.launcher.modal__img_src = null; - // $events_slct.event_file_id = null; - // $slct_trigger = 'event_file'; - // $events_sess.launcher.event_file_open.open_status = 'close'; } clearInterval(idle_timer_interval); @@ -588,64 +407,25 @@ // WORKING! AE Refresh (now) } else if (cmd.startsWith('ae_refresh:')) { - console.log(); let cmd_parts = cmd.split(':'); let what = cmd_parts[1]; - // let obj_type = obj_parts[0]; - // let obj_id = obj_parts[1]; if (what == 'now') { - // window.localStorage.clear(); location.reload(); - } else { - console.log('OOPS? What went wrong?'); } } - } else { - if (log_lvl) { - console.log('Unrecognized WS event received. Probably just a message.'); - } } } // This client sent a WebSocket message. function handle_ws_sent(ws_sent_status: any) { - console.log('*** handle_ws_sent() ***', ws_sent_status); - let command = ws_sent_status.cmd; - console.log(`CMD: ${command}`); + if (log_lvl) console.log('*** handle_ws_sent() ***', ws_sent_status); $events_sess.launcher.controller_cmd = null; $events_sess.launcher.controller_trigger_send = null; } /* *** END *** Handle WebSocket events */ - $effect(() => { - if ( - $slct_trigger == 'event_file' && - $events_slct.event_file_id && - $events_sess.launcher?.event_file_open.open_status == 'open' - ) { - $slct_trigger = null; - // handle_event_file_open(); - } - - // if ($events_sess.launcher.trigger_open_file) { - // $events_sess.launcher.trigger_modal_open_file = false; - // handle_event_file_open(); - // } - }); - - $effect(() => { - if ( - $slct_trigger == 'event_file' && - $events_sess.launcher?.event_file_open.open_status == 'close' - ) { - $slct_trigger = null; - // Assuming just event file modal for now - // handle_event_file_close(); - } - }); - $effect(() => { if (trigger_handle_ws_conn) { let ws_conn_status = trigger_handle_ws_conn; // This a string status @@ -670,79 +450,33 @@ } }); - async function handle_event_file_open() { - let event_file_obj; - if ($events_slct.event_file_obj && $events_slct.event_file_obj.event_file_id) { - console.log($events_slct.event_file_obj); - event_file_obj = $events_slct.event_file_obj; - } else { - console.log('Need to look up the event file details first.'); - // let get_event_file_obj_result = await get_event_file_obj({event_file_id: $events_slct.event_file_id}); - - // event_file_obj = get_event_file_obj_result; - // console.log(event_file_obj); - } - - // let as_modal_result = open_event_file_as_modal({ - // event_file_id: event_file_obj.event_file_id, - // filename: event_file_obj.filename, - // extension: event_file_obj.extension, - // modal_title: ae_util.shorten_filename(event_file_obj.filename, 75) - // }); - - // if (as_modal_result) { - // console.log($events_sess.launcher); - - // events_sess.launcher.set({...$events_sess.launcher, ...as_modal_result}); - // // $events_sess.launcher.event_file_open = as_modal_result; - // } - } - - async function handle_event_file_close() { - // let as_modal_result = close_event_file_as_modal({}); - - // if (as_modal_result) { - // events_sess.update(n => { - // n.launcher = { ...n.launcher, ...as_modal_result }; - // return n; - // }); - // } - } - if (!$events_loc.launcher.idle_timer) { $events_loc.launcher.idle_timer = 5 * 60 * 1000; } - // $events_loc.launcher.idle_timer = .25 * 60 * 1000; if (!$events_loc.launcher.idle_cycle) { $events_loc.launcher.idle_cycle = 5 * 1000; } if (!$events_loc.launcher.idle_loop_period) { $events_loc.launcher.idle_loop_period = 3 * 60 * 1000; } - // Safer to run this once the component has mounted and initialized??? + listen({ - timer: $events_loc.launcher.idle_timer, // $events_loc.launcher.idle_timer ?? 30 * 60 * 1000, - cycle: $events_loc.launcher.idle_cycle ?? 5 * 1000 // How frequently the idle status is checked + timer: $events_loc.launcher.idle_timer, + cycle: $events_loc.launcher.idle_cycle ?? 5 * 1000 }); let idle_timer_interval: any = $state(); - // clearInterval(idle_timer_interval); - let saver_looping: boolean = $state(false); function handle_idle_client() { // Start the digital poster screen saver after additional idle time. - if ($lq__event_session_obj && $lq__event_session_obj?.type_code == 'poster') { if (log_lvl) { console.log( `Turned idle! Open poster file for poster session in ${($events_loc.launcher.idle_loop_period / 60000).toPrecision(4)} minutes.` ); } - if (saver_looping) { - console.log('Screen saver already looping.'); - return false; - } + if (saver_looping) return false; saver_looping = true; @@ -754,20 +488,11 @@ ); } - // console.log($events_loc.launcher.screen_saver_img_kv.length()); - if ($events_loc.launcher.screen_saver_img_kv) { - console.log($events_loc.launcher.screen_saver_img_kv); - - let modal_title: string = ''; - const rand_index = Math.floor( Math.random() * Object.keys($events_loc.launcher.screen_saver_img_kv).length ); - if (log_lvl) { - console.log(`Random index = ${rand_index}`); - } let event_file_obj = $events_loc.launcher.screen_saver_img_kv[ @@ -776,41 +501,26 @@ $events_slct.event_file_id = event_file_obj.event_file_id; $events_slct.event_file_obj = event_file_obj; - // $slct_trigger = 'event_file'; - // $events_loc.launcher.event_file_open.open_status = 'open'; $events_sess.launcher.modal__open_event_file_id = null; - // clearInterval(idle_timer_interval); - // if (!modal_title) { - // modal_title = event_file_obj.filename; - // } $events_sess.launcher.modal__title = event_file_obj.filename ?? '*'; $events_sess.launcher.modal__open_event_file_id = $events_slct.event_file_id; $events_sess.launcher.modal__event_file_obj = event_file_obj; - // $events_sess.launcher.modal__img_src = `/event/file/${event_file_obj.event_file_id}/download`; return true; } - console.log('No screen saver images found.'); return false; }, $events_loc.launcher.idle_loop_period ?? 2 * 60 * 1000 ); - // console.log('User is no longer idle???'); } else { - console.log('Not a poster session so no screen saver.'); saver_looping = false; return false; } } onIdle(() => { - // This is called when the user has gone idle for the specified time. - - // alert('USER IS IDLE'); - - log_lvl = 1; if (log_lvl) { console.log( `User has gone idle after ${($events_loc.launcher?.idle_timer / 60000).toPrecision(4)} minutes.`, @@ -818,23 +528,12 @@ ); } clearInterval(idle_timer_interval); - handle_idle_client(); }); $effect(() => { - if ($idle) { - // log_lvl = 1; - // if (log_lvl) { - // console.log(`User has gone idle after ${($events_loc.launcher?.idle_timer / 60000).toPrecision(4)} minutes.`, $idle); - // } - // // clearInterval(idle_timer_interval); - // if (!saver_looping) { - // handle_idle_client(); - // } - } else { - log_lvl = 1; - if (log_lvl) { + if (!$idle) { + if (log_lvl > 1) { console.log( `User is active again after being idle. End screen saver if active.`, $idle @@ -847,7 +546,6 @@ - Æ: {$lq__event_location_obj?.name ?? '-- not set --'} @@ -856,7 +554,6 @@ -
- Æ Launcher @@ -934,7 +630,6 @@ {/if} -
- - - - - - - -
- - - {#if !$events_slct.event_location_id} -
- - You must select a location first - +
+ + Please select a location from the menu
{/if} - {#if $events_slct.event_session_id && $lq__event_session_obj} + {:else if $events_slct.event_session_id} +
+ + Loading session details... +
{/if}
@@ -1051,8 +721,6 @@ {@render children?.()}
- -
- -
- - - - - - {online?.current ? '' : 'Offline!'} - - - - - - - - - {#if $events_sess.launcher?.av_recording_status} - - - {:else} - - - {/if} - -
@@ -1269,12 +876,6 @@ View Selected Session {/if} - - @@ -1305,7 +906,6 @@
-
         {JSON.stringify($events_loc.launcher, null, 2)}
     
@@ -1316,9 +916,6 @@
- - - { - $events_sess.launcher.modal__open_event_file_id = null; - if ( - $events_loc.launcher.controller == 'local_push' && - $events_sess.launcher.ws_connect_status == 'connected' - ) { - // // This should work....???? - // console.log(`TEST - FAIL??? Local Push Controller Command: ae_close:event_file_modal`); - // console.log(`Before: ${$events_sess.launcher.controller_trigger_send}`); - // // $events_sess.launcher.controller_cmd = `ae_close:event_file_modal`; - // // $events_sess.launcher.controller_trigger_send = true; - // // $events_sess = $events_sess; - // // events_sess.set($events_sess); - // // tick(); - // // events_sess.set($events_sess); - // console.log(`After: ${$events_sess.launcher.controller_trigger_send}`); - } - }} > {#snippet header()} -

{ $events_sess.launcher.modal__open_event_file_id = null; - if ( - $events_loc.launcher.controller == 'local_push' && - $events_sess.launcher.ws_connect_status == 'connected' - ) { - } }} title="Close Modal" > - {/snippet} - - - - + {#if $events_sess.launcher.modal__open_event_file_id} Placeholder: /event/file/{$events_sess.launcher
-                .modal__open_event_file_id}/download?filename={$events_slct.event_file_obj
-                .filename}&x_no_account_id_token=direct-download {:else} @@ -1434,17 +990,10 @@ {/if} - - - - - - - - {#if $events_loc.launcher.controller_group_code && $events_loc.launcher.ws_connect} - - -{/if} +{/if} \ No newline at end of file diff --git a/src/routes/events/[event_id]/(launcher)/menu_session_list.svelte b/src/routes/events/[event_id]/(launcher)/menu_session_list.svelte index ef08be73..72b9d83e 100644 --- a/src/routes/events/[event_id]/(launcher)/menu_session_list.svelte +++ b/src/routes/events/[event_id]/(launcher)/menu_session_list.svelte @@ -67,20 +67,19 @@ if (trigger_reload__event_session_obj_id) { if (log_lvl) { console.log( - `trigger_reload__event_session_obj_id changed: ${trigger_reload__event_session_obj_id}` + `[UI Trace] trigger_reload__event_session_obj_id changed: ${trigger_reload__event_session_obj_id}` ); } - let event_session_id = trigger_reload__event_session_obj_id; + let event_session_id = String(trigger_reload__event_session_obj_id); trigger_reload__event_session_obj_id = false; slct__event_session_id = event_session_id; - console.log(`slct__event_session_id = `, slct__event_session_id); + + if (log_lvl) console.log(`[UI Trace] UI setting slct__event_session_id = ${slct__event_session_id}`); handle_load_ae_obj_id__event_session(event_session_id); if ($events_loc.launcher.controller == 'local_push') { - console.log( - `Local Push Controller Command: ae_load:event_session=${event_session_id}` - ); + if (log_lvl) console.log(`[UI Trace] Local Push Controller Command: ae_load:event_session=${event_session_id}`); $events_sess.launcher.controller_cmd = `ae_load:event_session=${event_session_id}`; $events_sess.launcher.controller_trigger_send = true; } @@ -88,37 +87,20 @@ data_url.searchParams.set('session_id', event_session_id); let new_url = data_url.toString(); - console.log(new_url); - // goto(new_url, {replaceState: true}); // Updates the URL without adding a new entry to the history - goto(new_url, { replaceState: false }); // Updates the URL history without reloading the page + if (log_lvl) console.log(`[UI Trace] Updating URL to: ${new_url}`); + goto(new_url, { replaceState: false }); } }); function handle_load_ae_obj_id__event_session(event_session_id: any) { if (log_lvl) { console.log( - `handle_load_ae_obj_id__event_session: event_session_id = `, - event_session_id + `[UI Trace] handle_load_ae_obj_id__event_session: Calling library for id=${event_session_id}` ); } - loading__session_id_status = true; - - // slct__event_session_id = null; - - // slct__event_session_id = event_session_id; - // $events_slct.event_session_id = event_session_id; - // data_url.searchParams.set('session_id', event_session_id); - - // let new_url = data_url.toString(); - // console.log(new_url); - // loading__session_id_status = false; - // goto(new_url, {replaceState: true}); // Updates the URL without reloading the page - // goto(new_url, {replaceState: false}); // Updates the URL history without reloading the page loading__session_id_status = 'loading'; - // $events_slct.event_session_obj = event_session_obj; - ae_promises.slct__event_session_id = events_func .load_ae_obj_id__event_session({ api_cfg: $ae_api, @@ -129,20 +111,13 @@ log_lvl: log_lvl }) .then(async (load_results) => { - console.log(`load_results = `, load_results); + if (log_lvl) console.log(`[UI Trace] handle_load_ae_obj_id: Library returned results.`, load_results); if (load_results) { $events_slct.event_session_obj = load_results; $events_slct.event_file_obj_li = load_results.event_file_li ?? []; $events_slct.event_presentation_obj_li = load_results.event_presentation_li ?? []; - // $events_slct.event_presenter_obj_li = load_results.event_presenter_obj_li; } - - // let new_url = data_url.toString(); - // console.log(new_url); - // loading__session_id_status = false; - // // goto(new_url, {replaceState: true}); // Updates the URL without reloading the page - // goto(new_url, {replaceState: false}); // Updates the URL history without reloading the page }) .finally(() => { loading__session_id_status = false; @@ -202,42 +177,6 @@ return; } trigger_reload__event_session_obj_id = event_session_obj?.id; - // handle_load_ae_obj_id__event_session(event_session_obj?.id); - - // loading__session_id_status = true; - - // slct__event_session_id = null; - - // slct__event_session_id = event_session_obj?.id; - // // $events_slct.event_session_id = event_session_obj?.id; - // data_url.searchParams.set('session_id', event_session_obj?.id); - - // let new_url = data_url.toString(); - // console.log(new_url); - // loading__session_id_status = false; - // // goto(new_url, {replaceState: true}); // Updates the URL without reloading the page - // // goto(new_url, {replaceState: false}); // Updates the URL history without reloading the page - // loading__session_id_status = 'loading'; - - // $events_slct.event_session_obj = event_session_obj; - - // ae_promises.slct__event_session_id = events_func.load_ae_obj_id__event_session({ - // api_cfg: $ae_api, - // event_session_id: event_session_obj?.id, - // inc_file_li: true, - // inc_presentation_li: true, - // inc_presenter_li: true, - // log_lvl: log_lvl - // }) - // .then(async (load_results) => { - // console.log(`load_results = `, load_results); - - // // let new_url = data_url.toString(); - // // console.log(new_url); - // loading__session_id_status = false; - // // // goto(new_url, {replaceState: true}); // Updates the URL without reloading the page - // // goto(new_url, {replaceState: false}); // Updates the URL history without reloading the page - // }); }, hover_timer_wait); }} onmouseleave={() => { @@ -248,50 +187,6 @@ $events_slct.event_file_id = null; $events_slct.event_file_obj = null; - - // handle_load_ae_obj_id__event_session(event_session_obj?.id); - - // loading__session_id_status = true; - - // slct__event_session_id = null; - // // await tick(); - - // slct__event_session_id = event_session_obj?.id; - // // $events_slct.event_session_id = event_session_obj?.id; - // data_url.searchParams.set('session_id', event_session_obj?.id); - - // let new_url = data_url.toString(); - // console.log(new_url); - // // goto(new_url, {replaceState: true}); // Updates the URL without reloading the page - // // goto(new_url, {replaceState: false}); // Updates the URL history without reloading the page - // loading__session_id_status = 'loading'; - - // // $events_slct.event_session_id = event_session_obj?.id; - // $events_slct.event_session_obj = event_session_obj; - - // ae_promises.slct__event_session_id = events_func.load_ae_obj_id__event_session({ - // api_cfg: $ae_api, - // event_session_id: event_session_obj?.id, - // inc_file_li: true, - // inc_presentation_li: true, - // inc_presenter_li: true, - // log_lvl: log_lvl - // }) - // .then(async (load_results) => { - // console.log(`load_results = `, load_results); - - // // let new_url = data_url.toString(); - // // console.log(new_url); - // loading__session_id_status = false; - // // // goto(new_url, {replaceState: true}); // Updates the URL history without reloading the page - // // goto(new_url, {replaceState: false}); - // }); - - // if ($events_loc.launcher.controller == 'local_push') { - // console.log(`Local Push Controller Command: ae_load:event_session=${event_session_obj?.id}`); - // $events_sess.launcher.controller_cmd = `ae_load:event_session=${event_session_obj?.id}`; - // $events_sess.launcher.controller_trigger_send = true; - // } }} class=" btn btn-sm hover:preset-filled-primary-500 @@ -310,7 +205,7 @@ " class:preset-filled-primary-500={slct__event_session_id === event_session_obj?.id} - class:preset-tonal-secondary={slct__event_session_id != + class:preset-tonal-secondary={slct__event_session_id != event_session_obj?.id} class:border-secondary-500={slct__event_session_id != event_session_obj?.id} class:font-bold={slct__event_session_id === event_session_obj?.id} @@ -362,4 +257,4 @@ {:else}
No sessions found.
{/if} - + \ No newline at end of file