From 4cf2633bc135deefdbfdeb1fce7b379abd30672b Mon Sep 17 00:00:00 2001
From: E44 <129310925+programmer-44@users.noreply.github.com>
Date: Sat, 22 Nov 2025 23:22:31 +0100
Subject: [PATCH] fix(control): better folder view, especially for same named
folders on different displays
---
.../src/components/FolderElementObject.svelte | 24 ++++++++++++-------
control/frontend/src/ts/api_handler.ts | 7 +++++-
control/frontend/src/ts/stores/files.ts | 10 ++++++--
control/frontend/src/ts/types.ts | 4 ++--
control/frontend/src/ts/utils.ts | 1 +
5 files changed, 33 insertions(+), 13 deletions(-)
diff --git a/control/frontend/src/components/FolderElementObject.svelte b/control/frontend/src/components/FolderElementObject.svelte
index 75d9442..d79053c 100644
--- a/control/frontend/src/components/FolderElementObject.svelte
+++ b/control/frontend/src/components/FolderElementObject.svelte
@@ -14,8 +14,12 @@
get_shifted_color
} from '../ts/stores/ui_behavior';
import Button from './Button.svelte';
- import { supported_file_type_icon, type FolderElement, type SupportedFileType } from '../ts/types';
-
+ import {
+ supported_file_type_icon,
+ type FolderElement,
+ type SupportedFileType
+ } from '../ts/types';
+
import {
is_selected,
select,
@@ -56,7 +60,11 @@
const is_folder = file.type === 'inode/directory';
- function get_created_string(date_object: Date, full_string = false) {
+ function get_created_string(date_object: Date | null, full_string = false) {
+ if (!date_object) {
+ return full_string ? 'Verschiedene Daten auf verschiedenen Bildschirmen' : 'versch.';
+ }
+
if (full_string) {
return (
get_formated_date_string(date_object, true) + ' ' + get_formated_time_string(date_object)
@@ -167,16 +175,14 @@
})} rounded-r-lg transition-colors duration-200 gap-4 flex flex-row justify-between cursor-pointer group w-full min-w-0"
>
-
+
{#if is_folder}
{:else if thumbnail_url}

{:else if supported_file_type_icon[get_file_type(file)?.display_name || '']}
@@ -187,7 +193,9 @@
{/if}
- {file.name.includes('.') && !is_folder && get_file_type(file) ? file.name.slice(0, file.name.lastIndexOf('.')) : file.name}
+ {file.name.includes('.') && !is_folder && get_file_type(file)
+ ? file.name.slice(0, file.name.lastIndexOf('.'))
+ : file.name}
'./.config')
if (response_element.name.charAt(2) !== '.') {
+ const truncated = {
+ ...response_element,
+ created: response_element.created.slice(0, 16) // truncated to YYYY-MM-DD hh-mm -> no (milli)seconds
+ };
+
const folder_element: FolderElement = {
id: get_uuid(),
- hash: JSON.stringify(response_element),
+ hash: JSON.stringify(truncated),
name: response_element.name.slice(2), // remove "./"
type: response_element.type,
date_created: new Date(response_element.created),
diff --git a/control/frontend/src/ts/stores/files.ts b/control/frontend/src/ts/stores/files.ts
index f18881a..41f7777 100644
--- a/control/frontend/src/ts/stores/files.ts
+++ b/control/frontend/src/ts/stores/files.ts
@@ -191,15 +191,21 @@ export function get_current_folder_elements(all_files: Record = {
export type FolderElement = {
id?: string;
- hash: string | null;
+ hash: string;
name: string;
type: string;
- date_created: Date;
+ date_created: Date | null;
size: number;
}
diff --git a/control/frontend/src/ts/utils.ts b/control/frontend/src/ts/utils.ts
index 12a5aef..f69c976 100644
--- a/control/frontend/src/ts/utils.ts
+++ b/control/frontend/src/ts/utils.ts
@@ -24,6 +24,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";
if (size === 0) return "0 B";
const k = 1024;