mirror of
https://codeberg.org/PLG-Development/PLG-MuDiCS
synced 2026-07-06 00:47:09 +00:00
fix(control): better folder view, especially for same named folders on different displays
This commit is contained in:
@@ -14,7 +14,11 @@
|
|||||||
get_shifted_color
|
get_shifted_color
|
||||||
} from '../ts/stores/ui_behavior';
|
} from '../ts/stores/ui_behavior';
|
||||||
import Button from './Button.svelte';
|
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 {
|
import {
|
||||||
is_selected,
|
is_selected,
|
||||||
@@ -56,7 +60,11 @@
|
|||||||
|
|
||||||
const is_folder = file.type === 'inode/directory';
|
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) {
|
if (full_string) {
|
||||||
return (
|
return (
|
||||||
get_formated_date_string(date_object, true) + ' ' + get_formated_time_string(date_object)
|
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"
|
})} rounded-r-lg transition-colors duration-200 gap-4 flex flex-row justify-between cursor-pointer group w-full min-w-0"
|
||||||
>
|
>
|
||||||
<div class="flex flex-row gap-2 min-w-0 w-full">
|
<div class="flex flex-row gap-2 min-w-0 w-full">
|
||||||
<div
|
<div class="aspect-square rounded-md flex justify-center items-center">
|
||||||
class="aspect-square rounded-md flex justify-center items-center"
|
|
||||||
>
|
|
||||||
{#if is_folder}
|
{#if is_folder}
|
||||||
<Folder class="size-full p-2" />
|
<Folder class="size-full p-2" />
|
||||||
{:else if thumbnail_url}
|
{:else if thumbnail_url}
|
||||||
<img
|
<img
|
||||||
src={thumbnail_url}
|
src={thumbnail_url}
|
||||||
alt="file_thumbnail"
|
alt="file_thumbnail"
|
||||||
class="object-contain size-full select-none block p-1"
|
class="object-contain size-full select-none block p-1 rounded-lg"
|
||||||
draggable="false"
|
draggable="false"
|
||||||
/>
|
/>
|
||||||
{:else if supported_file_type_icon[get_file_type(file)?.display_name || '']}
|
{:else if supported_file_type_icon[get_file_type(file)?.display_name || '']}
|
||||||
@@ -187,7 +193,9 @@
|
|||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<div class="content-center truncate select-none w-full" title={file.name}>
|
<div class="content-center truncate select-none w-full" title={file.name}>
|
||||||
{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}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
|
|||||||
@@ -74,9 +74,14 @@ done
|
|||||||
for (const response_element of response) {
|
for (const response_element of response) {
|
||||||
// filter hidden files (start with '.' -> './.config')
|
// filter hidden files (start with '.' -> './.config')
|
||||||
if (response_element.name.charAt(2) !== '.') {
|
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 = {
|
const folder_element: FolderElement = {
|
||||||
id: get_uuid(),
|
id: get_uuid(),
|
||||||
hash: JSON.stringify(response_element),
|
hash: JSON.stringify(truncated),
|
||||||
name: response_element.name.slice(2), // remove "./"
|
name: response_element.name.slice(2), // remove "./"
|
||||||
type: response_element.type,
|
type: response_element.type,
|
||||||
date_created: new Date(response_element.created),
|
date_created: new Date(response_element.created),
|
||||||
|
|||||||
@@ -191,15 +191,21 @@ export function get_current_folder_elements(all_files: Record<string, Record<str
|
|||||||
FileOnDisplay:
|
FileOnDisplay:
|
||||||
for (const file_on_display of files_on_display_array[key]) {
|
for (const file_on_display of files_on_display_array[key]) {
|
||||||
for (const existing_file of files) {
|
for (const existing_file of files) {
|
||||||
|
const both_same_folder = file_on_display.type === "inode/directory" && existing_file.type === "inode/directory" && file_on_display.name === existing_file.name;
|
||||||
|
if (both_same_folder && file_on_display.size !== existing_file.size) {
|
||||||
|
existing_file.size = -1;
|
||||||
|
}
|
||||||
if (file_on_display.hash === existing_file.hash) {
|
if (file_on_display.hash === existing_file.hash) {
|
||||||
continue FileOnDisplay;
|
continue FileOnDisplay;
|
||||||
|
} else if (both_same_folder) {
|
||||||
|
existing_file.date_created = null;
|
||||||
|
continue FileOnDisplay;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
files.push(file_on_display);
|
files.push({ ...file_on_display });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return sort_files(files);
|
return sort_files(files);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -30,10 +30,10 @@ export const supported_file_type_icon: Record<string, typeof X> = {
|
|||||||
|
|
||||||
export type FolderElement = {
|
export type FolderElement = {
|
||||||
id?: string;
|
id?: string;
|
||||||
hash: string | null;
|
hash: string;
|
||||||
name: string;
|
name: string;
|
||||||
type: string;
|
type: string;
|
||||||
date_created: Date;
|
date_created: Date | null;
|
||||||
size: number;
|
size: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ export function get_uuid(): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function get_file_size_display_string(size: number, toFixed: number | null = null): 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";
|
if (size === 0) return "0 B";
|
||||||
|
|
||||||
const k = 1024;
|
const k = 1024;
|
||||||
|
|||||||
Reference in New Issue
Block a user