From b9d4f47f3a36e717e9cf24a6d0e5cc0cb7fd09d5 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Sun, 20 Oct 2024 16:51:22 -0400 Subject: [PATCH] Got the screen saver mostly working now. Now config options yet though. --- package-lock.json | 12 ++- package.json | 1 + src/lib/ae_events_stores.ts | 7 +- .../[event_id]/(launcher)/+layout.svelte | 85 +++++++++++++++++++ .../(launcher)/launcher_file_cont.svelte | 18 ++-- .../(launcher)/menu_session_list.svelte | 5 +- 6 files changed, 113 insertions(+), 15 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59a1c52b..e22f28fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ae-app-svelte4-tailwind-skeleton", - "version": "0.1.5", + "version": "0.1.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ae-app-svelte4-tailwind-skeleton", - "version": "0.1.5", + "version": "0.1.10", "dependencies": { "@floating-ui/dom": "^1.6.0", "@popperjs/core": "^2.11.0", @@ -49,6 +49,7 @@ "svelte": "^4.2.0", "svelte-check": "^4.0.0", "svelte-highlight": "^7.7.0", + "svelte-idle": "^3.0.1", "tailwindcss": "^3.4.10", "tslib": "^2.4.1", "typescript": "^5.0.0", @@ -5876,6 +5877,13 @@ "svelte": "^3.19.0 || ^4.0.0" } }, + "node_modules/svelte-idle": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svelte-idle/-/svelte-idle-3.0.1.tgz", + "integrity": "sha512-B0OfHwcwxuAVcKQSybToIry6g06e9CBZqxBiAU8FhOXILngtXvi1HwzUvEwpZelDrw1hVLJdfDcwBxTFZQNruw==", + "dev": true, + "license": "MIT" + }, "node_modules/svelte/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", diff --git a/package.json b/package.json index 37ce670f..c4086d5e 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "svelte": "^4.2.0", "svelte-check": "^4.0.0", "svelte-highlight": "^7.7.0", + "svelte-idle": "^3.0.1", "tailwindcss": "^3.4.10", "tslib": "^2.4.1", "typescript": "^5.0.0", diff --git a/src/lib/ae_events_stores.ts b/src/lib/ae_events_stores.ts index 4a829373..e799a78d 100644 --- a/src/lib/ae_events_stores.ts +++ b/src/lib/ae_events_stores.ts @@ -140,7 +140,12 @@ let events_local_data_struct: key_val = { 'host_file_config_path': 'device_configs/ae_native_app_config.default.json', }, - screen_saver_img_list: [], + idle_timer: 5*60*1000, // How many seconds until idle + idle_cycle: 2*1000, // How frequently the idle status is checked + idle_loop_period: 1*60*1000, // How frequently the loop runs for the screen saver and similar + + screen_saver_img_kv: {}, + // screen_saver_img_li: [], modal__title: '-- Not Set --', modal__open: null, modal__open_filename: null, diff --git a/src/routes/events/[event_id]/(launcher)/+layout.svelte b/src/routes/events/[event_id]/(launcher)/+layout.svelte index 040fc698..0e30b5b1 100644 --- a/src/routes/events/[event_id]/(launcher)/+layout.svelte +++ b/src/routes/events/[event_id]/(launcher)/+layout.svelte @@ -8,6 +8,7 @@ import { goto } from '$app/navigation'; import { sineIn } from 'svelte/easing'; import { liveQuery } from "dexie"; import { Drawer, Footer, Modal } from 'flowbite-svelte'; +import { listen, idle, onIdle } from 'svelte-idle' import type { key_val } from '$lib/ae_stores'; import { ae_util } from '$lib/ae_utils/ae_utils'; @@ -160,6 +161,7 @@ function handle_ws_conn(event) { } +// 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(event) { if (log_lvl) { @@ -265,6 +267,7 @@ function handle_ws_recv(event) { // NOTE: This is not finished yet. if (obj_type == 'event_file') { + clearInterval(idle_timer_interval); $events_slct.event_file_id = obj_id; $events_sess.launcher.modal__open = $events_slct.event_file_id; @@ -333,6 +336,7 @@ function handle_ws_recv(event) { } +// This client sent a WebSocket message. function handle_ws_sent(event) { console.log('*** handle_ws_sent() ***'); console.log(event); @@ -431,6 +435,87 @@ export let close_event_file_as_modal = function close_event_file_as_modal({}) { + + + +if (!$events_loc.launcher.idle_timer) { + $events_loc.launcher.idle_timer = 4 * 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 = 1 * 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 +}); + +let idle_timer_interval: any; +clearInterval(idle_timer_interval); + +function handle_idle_client() { + // Start the digital poster screen saver after additional idle time. + + if ($events_slct?.event_session_obj && $events_slct.event_session_obj?.type_code == 'poster') { + console.log('Open poster file in poster session...'); + + idle_timer_interval = setInterval(() => { + if (log_lvl) { + console.log('Screen saver tick!'); + // console.log($events_loc.launcher.screen_saver_img_kv); + + } + + // 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); + console.log(rand_index); + + let event_file_obj = $events_loc.launcher.screen_saver_img_kv[Object.keys($events_loc.launcher.screen_saver_img_kv)[rand_index]]; + + $events_slct.event_file_id = event_file_obj.event_file_id_random; + $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_obj.event_file_id_random; + if (!modal_title) { + modal_title = event_file_obj.filename; + } + $events_sess.launcher.modal__title = modal_title; + // $events_sess.launcher.modal__img_src = `/event/file/${event_file_obj.event_file_id_random}/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 { + return false; + } + +} + +$: { + if ($idle) { + log_lvl = 1; + console.log(`User is idle after ${$events_loc.launcher?.idle_timer} milliseconds.`); + handle_idle_client(); + } else { + console.log('User is no longer idle.'); + log_lvl = 0; + clearInterval(idle_timer_interval); + } +} diff --git a/src/routes/events/[event_id]/(launcher)/launcher_file_cont.svelte b/src/routes/events/[event_id]/(launcher)/launcher_file_cont.svelte index 658dbcfe..9e644327 100644 --- a/src/routes/events/[event_id]/(launcher)/launcher_file_cont.svelte +++ b/src/routes/events/[event_id]/(launcher)/launcher_file_cont.svelte @@ -18,7 +18,7 @@ import Element_ae_crud from '$lib/element_ae_crud.svelte'; // import { ae } from 'aether_npm_lib'; // import { } from '../../mods/electron.js'; -// import { ae_event_launcher, event_file_obj_def, open_event_file_as_modal, screen_saver_img_list } from '../../stores_mod_events'; +// import { ae_event_launcher, event_file_obj_def, open_event_file_as_modal, screen_saver_img_kv } from '../../stores_mod_events'; // *** Import Aether core components @@ -56,21 +56,21 @@ let open_file_clicked: null|boolean = null; let open_file_status: null|string = null; // null, 'checking_cache', 'checking_cache_failed', 'downloading_file', 'downloading_file_failed', 'opening_file', 'opening_file_failed', 'opening_file_success' let open_file_status_message: null|string = null; -if (!$events_loc.launcher.screen_saver_img_list) { - $events_loc.launcher.screen_saver_img_list = {}; +if (!$events_loc.launcher.screen_saver_img_kv) { + $events_loc.launcher.screen_saver_img_kv = {}; } let screen_saver_exts = ['jpg', 'png', 'PNG', 'webp']; if (screen_saver_exts.includes(event_file_obj.extension)) { - // $events_loc.launcher.screen_saver_img_list.push(event_file_obj); - // $events_loc.launcher.screen_saver_img_list[event_file_obj.event_file_id_random] = event_file_obj; + // $events_loc.launcher.screen_saver_img_kv.push(event_file_obj); + // $events_loc.launcher.screen_saver_img_kv[event_file_obj.event_file_id_random] = event_file_obj; - $events_loc.launcher.screen_saver_img_list[event_file_obj.event_file_id_random] = Object.create(event_file_obj); + $events_loc.launcher.screen_saver_img_kv[event_file_obj.event_file_id_random] = Object.create(event_file_obj); // let temp_obj = Object.create(event_file_obj) - // $events_loc.launcher.screen_saver_img_list[temp_obj.event_file_id_random] = Object.create(temp_obj); + // $events_loc.launcher.screen_saver_img_kv[temp_obj.event_file_id_random] = Object.create(temp_obj); // $ae_event_launcher = $ae_event_launcher; } @@ -80,11 +80,11 @@ onMount(() => { console.log(`Session Type: ${session_type}; Open Method: ${open_method}`); if (screen_saver_exts.includes(event_file_obj.extension)) { - // $events_loc.launcher.screen_saver_img_list[event_file_obj.event_file_id_random] = event_file_obj; + // $events_loc.launcher.screen_saver_img_kv[event_file_obj.event_file_id_random] = event_file_obj; let temp_obj = Object.create(event_file_obj) - $events_loc.launcher.screen_saver_img_list[temp_obj.event_file_id_random] = Object.create(temp_obj); + $events_loc.launcher.screen_saver_img_kv[temp_obj.event_file_id_random] = Object.create(temp_obj); // $ae_event_launcher = $ae_event_launcher; } 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 c8f6af18..ad1a2feb 100644 --- a/src/routes/events/[event_id]/(launcher)/menu_session_list.svelte +++ b/src/routes/events/[event_id]/(launcher)/menu_session_list.svelte @@ -59,11 +59,10 @@ let hover_timer: any = null; hover_timer = setTimeout(async () => { $events_slct.event_session_id = null; await tick(); - + + // $events_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); - - $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({