diff --git a/control/frontend/src/lib/components/InodeElement.svelte b/control/frontend/src/lib/components/InodeElement.svelte index d8e8e8f..5118143 100755 --- a/control/frontend/src/lib/components/InodeElement.svelte +++ b/control/frontend/src/lib/components/InodeElement.svelte @@ -31,7 +31,7 @@ import RefreshPlay from '../svgs/RefreshPlay.svelte'; import { get_file_size_display_string, get_file_type } from '$lib/ts/utils'; import { open_file } from '$lib/ts/api_handler'; - import { get_display_by_id, run_on_all_selected_displays } from '$lib/ts/stores/displays'; + import { get_display_by_id, run_on_all_selected_displays, selected_online_display_ids } from '$lib/ts/stores/displays'; import { get_thumbnail_url } from '$lib/ts/stores/thumbnails'; import { liveQuery, type Observable } from 'dexie'; import { db } from '$lib/ts/database'; @@ -45,8 +45,9 @@ | Observable<{ missing: string[]; colliding: string[] }> | undefined = $state(); $effect(() => { - const s = $selected_file_ids; - missing_colliding_displays_ids = liveQuery(() => get_missing_colliding_display_ids(file, s)); + const f = file; + const s = $selected_online_display_ids; + missing_colliding_displays_ids = liveQuery(() => get_missing_colliding_display_ids(f, s)); }); let file_size: Observable | undefined = $state(); @@ -215,7 +216,7 @@ if (is_folder(file)) { const folder_elements = await get_folder_elements( file.path + file.name + '/', - $selected_display_ids + $selected_online_display_ids ); let out: number = 0; for (const el of folder_elements) { diff --git a/control/frontend/src/lib/ts/stores/displays.ts b/control/frontend/src/lib/ts/stores/displays.ts index 264e54f..f492ddb 100755 --- a/control/frontend/src/lib/ts/stores/displays.ts +++ b/control/frontend/src/lib/ts/stores/displays.ts @@ -22,8 +22,13 @@ export const online_displays_sub = liveQuery(() => db.displays.where('status').equals('app_online').toArray() ).subscribe((value) => { online_displays.set(value); + const current_online_display_ids = value.map((d) => d.id); + selected_online_display_ids.set(get(selected_display_ids).filter((id) => current_online_display_ids.includes(id))); + console.log(get(selected_online_display_ids)) }); +export const selected_online_display_ids: Writable = writable([]); + export const local_displays: Writable = writable([]); export async function is_display_name_taken(name: string): Promise { @@ -269,15 +274,6 @@ export function set_new_display_order(display_id_group_id: string, new_data: Dis }); } -export function no_active_display_selected( - selected_display_ids: string[], - online_displays: Display[] -) { - const online_and_selected_displays = online_displays.filter((d) => - selected_display_ids.includes(d.id) - ); - return online_and_selected_displays.length === 0; -} if (dev) { setTimeout(add_testing_displays, 0); diff --git a/control/frontend/src/lib/ts/stores/files.ts b/control/frontend/src/lib/ts/stores/files.ts index 0856f3e..17a02c5 100755 --- a/control/frontend/src/lib/ts/stores/files.ts +++ b/control/frontend/src/lib/ts/stores/files.ts @@ -7,7 +7,7 @@ import { type Inode, type TreeElement } from '../types'; -import { get_display_by_id } from './displays'; +import { get_display_by_id, selected_online_display_ids } from './displays'; import { is_selected, select, selected_display_ids, selected_file_ids } from './select'; import { create_path, get_file_data, get_file_tree_data } from '../api_handler'; import { deactivate_old_thumbnail_urls, generate_thumbnail } from './thumbnails'; @@ -94,7 +94,7 @@ export async function update_current_folder_on_selected_displays() { }); const current_path = get(current_file_path); - for (const display of await db.displays.where('id').anyOf(get(selected_display_ids)).toArray()) { + for (const display of await db.displays.where('id').anyOf(get(selected_online_display_ids)).toArray()) { await update_folder_elements_recursively(display, current_path); } } @@ -371,7 +371,7 @@ export async function get_file_by_id( export async function run_for_selected_files_on_selected_displays( action: (ip: string, file_names: string[]) => Promise ): Promise { - for (const display_id of get(selected_display_ids)) { + for (const display_id of get(selected_online_display_ids)) { const file_key_strings_on_display: string[] = ( await db.files_on_display.where('display_id').equals(display_id).toArray() ).map((e) => e.file_primary_key); diff --git a/control/frontend/src/lib/ts/stores/select.ts b/control/frontend/src/lib/ts/stores/select.ts index a04d5e3..be88341 100755 --- a/control/frontend/src/lib/ts/stores/select.ts +++ b/control/frontend/src/lib/ts/stores/select.ts @@ -1,4 +1,5 @@ -import { writable, type Writable } from 'svelte/store'; +import { get, writable, type Writable } from 'svelte/store'; +import { online_displays, selected_online_display_ids } from './displays'; export const selected_file_ids: Writable = writable([]); // JSON.stringify([string, string, number, string]) export const selected_display_ids: Writable = writable([]); @@ -19,6 +20,12 @@ export function select( } return all_ids; }); + + if (selected_ids === selected_display_ids) { + const current_online_display_ids = get(online_displays).map((d) => d.id); + selected_online_display_ids.set(get(selected_display_ids).filter((id) => current_online_display_ids.includes(id))); + console.log(get(selected_online_display_ids)) + } } export function is_selected(id: string, selected_ids: string[]): boolean { diff --git a/control/frontend/src/routes/ControlView.svelte b/control/frontend/src/routes/ControlView.svelte index 4a34805..cc157cb 100644 --- a/control/frontend/src/routes/ControlView.svelte +++ b/control/frontend/src/routes/ControlView.svelte @@ -25,9 +25,8 @@ } from '$lib/ts/api_handler'; import { get_display_by_id, - no_active_display_selected, - online_displays, - run_on_all_selected_displays + run_on_all_selected_displays, + selected_online_display_ids } from '$lib/ts/stores/displays'; import { selected_display_ids } from '$lib/ts/stores/select'; import TipTapInput from './TipTapInput.svelte'; @@ -203,10 +202,10 @@
Tastatur-Eingaben Senden
@@ -273,7 +272,7 @@ | undefined = $state(); $effect(() => { const path = $current_file_path, - display_ids = $selected_display_ids; + display_ids = $selected_online_display_ids; current_folder_elements = liveQuery(() => get_folder_elements(path, display_ids)); }); let one_file_selected: Observable | undefined = $state(); @@ -91,7 +91,7 @@ async function create_new_folder() { popup_close_function(); const path_with_folder_name = ($current_file_path += current_name.trim() + '/'); - await create_path_on_all_selected_displays(path_with_folder_name, $selected_display_ids); + await create_path_on_all_selected_displays(path_with_folder_name, $selected_online_display_ids); await update_current_folder_on_selected_displays(); } @@ -127,7 +127,7 @@ current_name = ''; current_valid = false; display_names_where_path_does_not_exist = ( - await get_displays_where_path_not_exists($current_file_path, $selected_display_ids) + await get_displays_where_path_not_exists($current_file_path, $selected_online_display_ids) ).map((display) => display.name); popup_content = { open: true, @@ -277,7 +277,7 @@ multiple accept={get_accepted_file_type_string()} onchange={(e) => - add_upload((e.target as HTMLInputElement).files!, $selected_display_ids, $current_file_path)} + add_upload((e.target as HTMLInputElement).files!, $selected_online_display_ids, $current_file_path)} />
@@ -319,7 +319,7 @@ title="Neuen Ordner erstellen (Neuen Ordner mit ausgewählten Objekten erstellen)" className="px-3 flex" click_function={show_new_folder_popup} - disabled={no_active_display_selected($selected_display_ids, $online_displays)}>
@@ -344,10 +344,10 @@ click_function={async () => await sync_selected_files( $selected_file_ids, - $selected_display_ids, + $selected_online_display_ids, $current_folder_elements ?? [] )} - disabled={no_active_display_selected($selected_display_ids, $online_displays)} + disabled={$selected_online_display_ids.length === 0} > @@ -361,7 +361,7 @@ @@ -385,7 +385,7 @@
- {#if no_active_display_selected($selected_display_ids, $online_displays)} + {#if $selected_online_display_ids.length === 0} Es sind keine Bildschirme ausgewählt.