The Launcher works pretty well. Except for the native app...

This commit is contained in:
Scott Idem
2025-10-16 16:07:37 -04:00
parent 8d15a5ba0b
commit 8b22c0fc34
7 changed files with 97 additions and 65 deletions

View File

@@ -1,6 +1,6 @@
{
"name": "osit-aether-app-svelte",
"version": "3.9.4",
"version": "3.9.5",
"description": "One Sky IT's Aether App created with Svelte, SvelteKit, Tailwind CSS, Lucide, Font Awesome, and Skeleton UI. -Scott Idem",
"homepage": "https://oneskyit.com/",
"private": true,

View File

@@ -126,11 +126,14 @@ let events_local_data_struct: key_val = {
hide__ws_messages: true,
hide__ws_commands: true,
hide_content__draft_files: true,
show_content__disabled_files: false,
show_content__hidden_files: false,
show_content__hidden_presentations: false,
show_content__hidden_presenters: false,
show_content__hidden_sessions: false,
show_content__draft_files: false,
// These should be renamed to match the pres_mgmt section. Use "hide" instead of "show".
show_content__session_code: true,

View File

@@ -10,9 +10,12 @@ interface Props {
hide_created_on?: boolean;
hide_os?: boolean;
hide_size?: boolean;
hide_draft?: boolean; // Based on the file purpose
show_bak_download?: boolean;
// export let hide_api_download: boolean = true;
btn_size?: string;
text_size?: string;
text_size_md?: string;
session_type?: string; // oral, poster, workshop, symposium, roundtable, other
open_method?: null|string; // modal, download, native open (download, cache, copy, open), URL
modal_title?: string;
@@ -23,19 +26,22 @@ interface Props {
}
let {
log_lvl = 0,
log_lvl = $bindable(0),
event_file_id,
event_file_obj = $bindable({}),
max_filename_length = 50,
hide_launch_icon = false,
hide_meta = false,
hide_created_on = false,
hide_os = false,
hide_size = false,
max_filename_length = $bindable(50),
hide_launch_icon = $bindable(false),
hide_meta = $bindable(false),
hide_created_on = $bindable(false),
hide_os = $bindable(false),
hide_size = $bindable(false),
hide_draft = $bindable(false),
show_bak_download = false,
btn_size = 'btn_md',
session_type = 'oral',
open_method = 'download',
btn_size = $bindable('btn-sm'),
text_size = $bindable('text-sm'),
text_size_md = $bindable('md:text-base'),
session_type = $bindable('oral'),
open_method = $bindable('download'),
modal_title = $bindable(''),
modal__title = $bindable(''),
@@ -262,16 +268,18 @@ function preventDefault(fn) {
<div
class:justify-between={!hide_meta}
class:justify-center={hide_meta}
class:hidden={hide_draft && (event_file_obj.file_purpose == 'outline' || event_file_obj.file_purpose == 'draft')}
class="
event_launcher_file_cont
grow
flex flex-col md:flex-row flex-wrap
gap-1 items-center
gap-1 items-center justify-center
max-w-full
transition-all
"
class:justify-between={!hide_meta}
class:justify-center={hide_meta}
>
{#if open_file_clicked}
@@ -306,7 +314,7 @@ function preventDefault(fn) {
{/if}
<span class="event_file_action">
<span class="event_file_action grow max-w-full flex flex-row flex-wrap gap-1 items-center justify-center">
<!-- First [WORKING!] - Handle opening using a modal. This applies to all Launcher app modes (default, onsite, native) -->
{#if (session_type == 'poster' || open_method == 'modal')}
@@ -455,6 +463,9 @@ function preventDefault(fn) {
log_lvl: 1
});
$events_slct.event_file_id = event_file_id;
$events_slct.event_file_obj = event_file_obj;
// window.postMessage({ type: 'download_event_file', event_file_id: event_file_id, filename: event_file_obj.filename, auto_download: true }, '*');
if ($events_loc.launcher.controller == 'local_push') {
@@ -464,15 +475,18 @@ function preventDefault(fn) {
// tick();
}
}}
class:outline-2={$events_slct.event_file_id == event_file_id}
class="
btn btn-sm
btn {btn_size}
gap-1
min-w-full w-full max-w-96
preset-tonal-primary border border-primary-500
min-w-72 lg:min-w-96
"
title={`Download this file:\n${event_file_obj.filename}\n[API] SHA256: ${event_file_obj.hash_sha256.slice(0, 10)}...\nHosted ID: ${event_file_obj.hosted_file_id_random} Event File ID: ${event_file_id}`}
>
{#await ae_promises[event_file_id]}
<span class="text-sm">
<span class="shrink text-sm p-0">
<span class="fas fa-spinner fa-spin mx-0.5"></span>
<span class="">
Downloading
@@ -483,7 +497,7 @@ function preventDefault(fn) {
</span>
</span>
{:then result}
<span class="text-xs">
<span class="shrink text-xs">
<span class="fas fa-{ae_util.file_extension_icon(event_file_obj.extension)} mx-0.5"></span>
{event_file_obj.extension}
{#if result === null}
@@ -495,7 +509,12 @@ function preventDefault(fn) {
</span>
{/await}
<span class="grow text-xs md:text-sm border-l border-gray-400 pl-1">
<span
class="
grow {text_size} {text_size_md} max-w-96 border-l border-gray-400 pl-1
overflow-hidden text-ellipsis text-left
"
>
<!-- {event_file_obj.filename_no_ext} -->
<!-- {ae_util.shorten_filename({filename: event_file_obj.filename_w_ext, max_length: 40})} -->
{ae_util.shorten_string({string: event_file_obj.filename_no_ext, begin_length: 45, max_length: 65})}

View File

@@ -75,6 +75,7 @@ import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$
import { events_loc, events_sess, events_slct, events_trigger } from '$lib/ae_events_stores';
import { events_func } from '$lib/ae_events_functions';
import Event_launcher_file_cont from './launcher_file_cont.svelte';
import Menu_location_list_menu from './menu_location_list.svelte';
import Menu_session_list_menu from './menu_session_list.svelte';
@@ -129,6 +130,27 @@ let ae_promises: key_val = $state({
</strong>
</div> -->
{#each $lq__event_event_file_obj_li as event_file_obj, index}
<Event_launcher_file_cont
event_file_id={event_file_obj.event_file_id_random}
event_file_obj={event_file_obj}
hide_launch_icon={true}
hide_meta={true}
hide_created_on={true}
hide_os={true}
hide_size={true}
show_bak_download={$ae_loc.trusted_access && $ae_loc.edit_mode}
btn_size={'btn-sm'}
text_size={'text-xs'}
text_size_md={'text-xs'}
session_type={event_file_obj?.event_session_type_code ?? 'oral'}
open_method={event_file_obj?.event_session_type_code == 'poster' ? 'modal' : null}
modal_title={$lq__event_session_obj?.name}
bind:modal__title={$events_sess.launcher.modal__title}
bind:modal__open_event_file_id={$events_sess.launcher.modal__open_event_file_id}
bind:modal__event_file_obj={$events_sess.launcher.modal__event_file_obj}
/>
<button
disabled={!$ae_loc.trusted_access}
onclick={() => {
@@ -194,49 +216,26 @@ let ae_promises: key_val = $state({
{#if $lq__location_event_file_obj_li}
<div class="w-full flex flex-col gap-0.5">
{#each $lq__location_event_file_obj_li as event_file_obj, index}
<button
disabled={!$ae_loc.trusted_access}
onclick={() => {
// ae_promises[event_file_obj.event_file_id_random]
ae_promises[event_file_obj?.event_file_id_random] = api.download_hosted_file({
api_cfg: $ae_api,
hosted_file_id: event_file_obj?.hosted_file_id_random,
return_file: true,
filename: event_file_obj?.filename,
auto_download: true,
log_lvl: 0
});
}}
class="
btn btn-sm
text-xs w-full
preset-tonal-primary
hover:preset-tonal-success
transition-all
"
title={`Download this file:\n${event_file_obj.filename}\n[API] SHA256: ${event_file_obj.hash_sha256.slice(0, 10)}... Hosted ID: ${event_file_obj.hosted_file_id_random} Event File ID: ${event_file_obj.event_file_id_random}`}
>
{#await ae_promises[event_file_obj.event_file_id_random]}
<span class="fas fa-spinner fa-spin mx-1"></span>
<span class="">
Downloading
{#if $ae_sess.api_download_kv[event_file_obj.hosted_file_id_random]}
{$ae_sess.api_download_kv[event_file_obj.hosted_file_id_random].percent_completed}%
{/if}
:
</span>
{:then}
<!-- <span class="fas fa-download mx-1"></span> -->
<span class="fas fa-{ae_util.file_extension_icon(event_file_obj.extension)}"></span>
<!-- <span class="text-sm">
Download:
</span> -->
{/await}
<Event_launcher_file_cont
event_file_id={event_file_obj.event_file_id_random}
event_file_obj={event_file_obj}
hide_launch_icon={true}
hide_meta={true}
hide_created_on={true}
hide_os={true}
hide_size={true}
show_bak_download={$ae_loc.trusted_access && $ae_loc.edit_mode}
btn_size={'btn-sm'}
text_size={'text-xs'}
text_size_md={'text-xs'}
session_type={event_file_obj?.event_session_type_code ?? 'oral'}
open_method={event_file_obj?.event_session_type_code == 'poster' ? 'modal' : null}
modal_title={$lq__event_session_obj?.name}
<span class="grow">
{ae_util.shorten_filename({filename: event_file_obj.filename, max_length: 30})}
</span>
</button>
bind:modal__title={$events_sess.launcher.modal__title}
bind:modal__open_event_file_id={$events_sess.launcher.modal__open_event_file_id}
bind:modal__event_file_obj={$events_sess.launcher.modal__event_file_obj}
/>
{/each}
</div>
{/if}
@@ -262,7 +261,14 @@ let ae_promises: key_val = $state({
>
<button
onclick={() => {
$events_loc.launcher.show_content__hidden_files = !$events_loc.launcher.show_content__hidden_files;
if ($events_loc.launcher.show_content__hidden_files) {
$events_loc.launcher.show_content__hidden_files = false;
$events_loc.launcher.hide_content__draft_files = true;
} else {
$events_loc.launcher.show_content__hidden_files = true;
$events_loc.launcher.hide_content__draft_files = false;
}
}}
class="
btn btn-sm
@@ -272,6 +278,7 @@ let ae_promises: key_val = $state({
hover:preset-tonal-success
transition-all
"
title="Toggle showing hidden files. Including files marked as 'draft'."
>
{#if $events_loc.launcher.show_content__hidden_files}
<span class="fas fa-eye-slash m-1 text-neutral-800/80"></span>

View File

@@ -81,6 +81,7 @@ let lq__event_file_obj_li = $derived(liveQuery(async () => {
event_file_id={event_file_obj.event_file_id_random}
event_file_obj={event_file_obj}
hide_created_on={false}
bind:hide_draft={$events_loc.launcher.hide_content__draft_files}
show_bak_download={$ae_loc.trusted_access}
session_type={event_file_obj?.event_session_type_code ?? 'oral'}
open_method={event_file_obj?.event_session_type_code == 'poster' ? 'modal' : null}

View File

@@ -15,7 +15,7 @@ let {
import type { key_val } from '$lib/ae_stores';
import { ae_util } from '$lib/ae_utils/ae_utils';
import { api } from '$lib/api';
// import Element_ae_crud from '$lib/element_ae_crud.svelte';
import Event_launcher_file_cont from './launcher_file_cont.svelte';
import Launcher_presenter_view from './launcher_presenter_view.svelte';
@@ -28,7 +28,6 @@ import { ae_snip, ae_loc, ae_sess, ae_api, ae_trig, slct, slct_trigger } from '$
import { db_events } from "$lib/ae_events/db_events";
import { events_loc, events_sess, events_slct, events_trigger } from '$lib/ae_events_stores';
import { events_func } from '$lib/ae_events_functions';
import { hide } from '@popperjs/core';
// let load_event_session_obj = events_func.load_ae_obj_id__event_session({

View File

@@ -229,6 +229,9 @@ function handle_load_ae_obj_id__event_session(event_session_id: any) {
onclick={async () => {
trigger_reload__event_session_obj_id = event_session_obj?.id;
$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;