chore(control): show folder_size as sum of all folder_elements

This commit is contained in:
E44
2026-01-19 18:33:59 +01:00
parent c09e4b2d8d
commit 2711d89f22
2 changed files with 26 additions and 5 deletions
@@ -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<number> | 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<number> {
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;
}
}
</script>
<div
@@ -355,9 +376,9 @@
></div>
<div
class="w-12 content-center text-center select-none text-xs whitespace-nowrap"
title={get_file_size_display_string(file.size, 3)}
title={get_file_size_display_string($file_size ?? -1, 3)}
>
{get_file_size_display_string(file.size)}
{get_file_size_display_string($file_size ?? -1)}
</div>
</div>
</div>
+1 -1
View File
@@ -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;