diff --git a/control/frontend/src/lib/components/InodeElement.svelte b/control/frontend/src/lib/components/InodeElement.svelte index 6c77515..d8e8e8f 100755 --- a/control/frontend/src/lib/components/InodeElement.svelte +++ b/control/frontend/src/lib/components/InodeElement.svelte @@ -12,9 +12,7 @@ get_file_primary_key, type FileOnDisplay, type FileTransferTask, - is_folder - } from '$lib/ts/types'; import { @@ -27,6 +25,7 @@ change_file_path, current_file_path, get_date_mapping, + get_folder_elements, get_missing_colliding_display_ids } from '$lib/ts/stores/files'; import RefreshPlay from '../svgs/RefreshPlay.svelte'; @@ -50,6 +49,12 @@ missing_colliding_displays_ids = liveQuery(() => get_missing_colliding_display_ids(file, s)); }); + let file_size: Observable | undefined = $state(); + $effect(() => { + const f = file; + file_size = liveQuery(() => get_size_recursively(f)); + }); + let file_transfer_task: FileTransferTask | null = $derived( $file_transfer_tasks.hasOwnProperty(file_primary_key) ? $file_transfer_tasks[file_primary_key] @@ -205,6 +210,22 @@ return Math.min(total_percentage, 100); } + + async function get_size_recursively(file: Inode): Promise { + if (is_folder(file)) { + const folder_elements = await get_folder_elements( + file.path + file.name + '/', + $selected_display_ids + ); + let out: number = 0; + for (const el of folder_elements) { + out += await get_size_recursively(el); + } + return out; + } else { + return file.size; + } + }
- {get_file_size_display_string(file.size)} + {get_file_size_display_string($file_size ?? -1)}
diff --git a/control/frontend/src/lib/ts/utils.ts b/control/frontend/src/lib/ts/utils.ts index b7324eb..a8279f0 100644 --- a/control/frontend/src/lib/ts/utils.ts +++ b/control/frontend/src/lib/ts/utils.ts @@ -55,7 +55,7 @@ export function get_uuid(): string { export function get_file_size_display_string(size: number, toFixed: number | null = null): string { if (size < 0) - return toFixed === null ? 'versch.' : 'Verschiedene Größen auf verschiedenen Bildschirmen'; + return toFixed === null ? '...' : 'Größe wird aktuell berechnet'; if (size === 0) return '0 B'; const k = 1024;