Lots of work on the Launcher and configuration. Looks pretty good and useful.

This commit is contained in:
Scott Idem
2025-10-15 19:01:30 -04:00
parent a6058efaf0
commit 9678c5620d
16 changed files with 446 additions and 155 deletions

View File

@@ -24,7 +24,6 @@ import {
// RefreshCw,
Satellite
} from '@lucide/svelte';
// import { AppBar } from '@skeletonlabs/skeleton-svelte';
// *** Import Aether specific variables and functions
import type { key_val } from '$lib/ae_stores';
@@ -42,7 +41,7 @@ import Element_websocket_v2 from '$lib/element_websocket_v2.svelte';
// *** Set initial variables
// Quickly save the data passed from the parent(s) to the Svelte stores, localStorage, and other.
$slct.account_id = data.account_id;
// $slct.account_id = data.account_id;
// console.log(`$slct.account_id = `, $slct.account_id);
let ae_acct = data[$slct.account_id];
// console.log(`ae_acct = `, ae_acct);
@@ -639,13 +638,14 @@ async function handle_event_file_close () {
if (!$events_loc.launcher.idle_timer) {
$events_loc.launcher.idle_timer = 4 * 60 * 1000;
$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 = 1 * 60 * 1000;
$events_loc.launcher.idle_loop_period = 3 * 60 * 1000;
}
// Safer to run this once the component has mounted and initialized???
listen({
@@ -654,19 +654,27 @@ listen({
});
let idle_timer_interval: any = $state();
clearInterval(idle_timer_interval);
// 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 ($events_slct?.event_session_obj && $events_slct.event_session_obj?.type_code == 'poster') {
console.log('Open poster file in poster session...');
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;
}
saver_looping = true;
idle_timer_interval = setInterval(() => {
if (log_lvl) {
console.log('Screen saver tick!');
// console.log($events_loc.launcher.screen_saver_img_kv);
console.log(`Screen saver tick every ${($events_loc.launcher.idle_loop_period / 60000).toPrecision(4)} minutes after initially being idle for ${($events_loc.launcher.idle_timer / 60000).toPrecision(4)} minutes.`);
}
// console.log($events_loc.launcher.screen_saver_img_kv.length());
@@ -677,7 +685,9 @@ function handle_idle_client() {
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);
if (log_lvl) {
console.log(`Random index = ${rand_index}`);
}
let event_file_obj = $events_loc.launcher.screen_saver_img_kv[Object.keys($events_loc.launcher.screen_saver_img_kv)[rand_index]];
@@ -686,11 +696,14 @@ function handle_idle_client() {
// $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__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_random}/download`;
return true;
@@ -700,20 +713,47 @@ function handle_idle_client() {
}, $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.`, $idle);
}
clearInterval(idle_timer_interval);
handle_idle_client();
});
$effect(() => {
if ($idle) {
log_lvl = 1;
console.log(`User is idle after ${$events_loc.launcher?.idle_timer} milliseconds.`);
handle_idle_client();
// 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 {
console.log('User is no longer idle.');
log_lvl = 0;
log_lvl = 1;
if (log_lvl) {
console.log(`User is active again after being idle. End screen saver if active.`, $idle);
}
clearInterval(idle_timer_interval);
saver_looping = false;
}
});
</script>
@@ -943,6 +983,8 @@ $effect(() => {
</div>
<!-- hover:z-20 -->
<!-- hover:scale-105 -->
<footer
id="Main-Footer"
class:hidden={$events_loc.launcher.hide__launcher_footer}
@@ -955,7 +997,8 @@ $effect(() => {
flex flex-row items-center justify-between
sm:flex-row md:items-center md:justify-between
text-xs hover:text-base
text-xs hover:sm:text-sm hover:md:text-base hover:lg:text-lg
bg-gray-200 border-t border-gray-200
dark:bg-gray-800 dark:border-gray-600
@@ -968,10 +1011,25 @@ $effect(() => {
[Help]
</div> -->
<div class="slct_location_name transition-all duration-1000">
<span class="fas fa-map-marker-alt"></span>
<div
class="slct_location_name transition-all duration-1000"
title="Location ID: {$lq__event_location_obj?.event_location_id} Name: {$lq__event_location_obj?.name} | Device ID: {$lq__event_device_obj?.event_device_id} Name: {$lq__event_device_obj?.name}"
>
<button
class=""
onclick={() => {
$ae_loc.edit_mode = !$ae_loc.edit_mode;
}}
title="Toggle Edit Mode to show location options and more"
>
<span class="sr-only">Location:</span>
<span class="fas fa-map-marker-alt"></span>
</button>
{$lq__event_location_obj?.name}
{$lq__event_device_obj?.name}
{#if $lq__event_device_obj?.name}
<span class="fas fa-laptop mx-1"></span>
{$lq__event_device_obj?.name}
{/if}
</div>
<span
@@ -994,30 +1052,34 @@ $effect(() => {
<span
class:hidden={$events_loc.launcher.app_mode != 'native'}
class="*:hover:inline px-1 rounded-md"
class="group px-1 rounded-md"
class:preset-tonal-warning={!$events_sess.launcher?.av_recording_status}
class:preset-tonal-success={$events_sess.launcher?.av_recording_status}
>
{#if $events_sess.launcher?.av_recording_status}
<span class="fas fa-video mx-1"></span>
<span class="hidden">
<span class="hidden group-hover:inline">
AV Recording Active
</span>
{:else}
<span class="fas fa-video-slash mx-1"></span>
<span class="hidden">
<span class="hidden group-hover:inline">
AV Recording Inactive
</span>
{/if}
</span>
<div class="current_datetime">
<div class="current_datetime font-mono px-2 hover:font-bold hover:bg-white transition-all">
<span class="fas fa-calendar-alt"></span>
{ae_util.iso_datetime_formatter($time,'date_full_no_year')}
<span class="fas fa-clock"></span>
{#if $events_loc.launcher?.time_hours == 12}
{ae_util.iso_datetime_formatter($time,'time_12_long')}
{:else}
{ae_util.iso_datetime_formatter($time,'time_long')}
{ae_util.iso_datetime_formatter($time,'time_long')}
{/if}
<!-- <span class="fas fa-hourglass fa-spin"></span> -->
<!-- <span class="fas fa-hourglass"></span> -->
</div>
</footer>