mirror of
https://codeberg.org/PLG-Development/PLG-MuDiCS
synced 2026-07-06 00:47:09 +00:00
refactor(control): replace === 'inode/directory' with is_folder()
This commit is contained in:
@@ -11,7 +11,10 @@
|
|||||||
type Inode,
|
type Inode,
|
||||||
get_file_primary_key,
|
get_file_primary_key,
|
||||||
type FileOnDisplay,
|
type FileOnDisplay,
|
||||||
type FileTransferTask
|
type FileTransferTask,
|
||||||
|
|
||||||
|
is_folder
|
||||||
|
|
||||||
} from '$lib/ts/types';
|
} from '$lib/ts/types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -69,7 +72,7 @@
|
|||||||
get_date_mapping(file_primary_key)
|
get_date_mapping(file_primary_key)
|
||||||
);
|
);
|
||||||
|
|
||||||
const is_folder = file.type === 'inode/directory';
|
const file_is_folder = $derived(is_folder(file));
|
||||||
|
|
||||||
function get_created_info(date_mapping: Record<string, Date> | undefined, full_string = false) {
|
function get_created_info(date_mapping: Record<string, Date> | undefined, full_string = false) {
|
||||||
if (!date_mapping) return '';
|
if (!date_mapping) return '';
|
||||||
@@ -149,7 +152,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function open() {
|
async function open() {
|
||||||
if (is_folder) {
|
if (file_is_folder) {
|
||||||
await change_file_path($current_file_path + file.name + '/');
|
await change_file_path($current_file_path + file.name + '/');
|
||||||
} else {
|
} else {
|
||||||
const path_to_file = $current_file_path + file.name;
|
const path_to_file = $current_file_path + file.name;
|
||||||
@@ -213,28 +216,28 @@
|
|||||||
{#if !not_interactable}
|
{#if !not_interactable}
|
||||||
<div class="h-{$current_height.file} aspect-square max-w-15 flex">
|
<div class="h-{$current_height.file} aspect-square max-w-15 flex">
|
||||||
<Button
|
<Button
|
||||||
disabled={!is_folder && get_file_type(file) === null}
|
disabled={!file_is_folder && get_file_type(file) === null}
|
||||||
title={!is_folder && get_file_type(file) === null ? 'Dateityp nicht unterstützt' : ''}
|
title={!file_is_folder && get_file_type(file) === null ? 'Dateityp nicht unterstützt' : ''}
|
||||||
className="flex rounded-l-lg rounded-r-none {is_folder
|
className="flex rounded-l-lg rounded-r-none {file_is_folder
|
||||||
? 'text-stone-450'
|
? 'text-stone-450'
|
||||||
: 'text-stone-800'} w-full"
|
: 'text-stone-800'} w-full"
|
||||||
div_class="w-full"
|
div_class="w-full"
|
||||||
bg={get_selectable_color_classes(
|
bg={get_selectable_color_classes(
|
||||||
!is_folder && get_file_type(file) !== null,
|
!file_is_folder && get_file_type(file) !== null,
|
||||||
{
|
{
|
||||||
bg: true
|
bg: true
|
||||||
},
|
},
|
||||||
-50
|
-50
|
||||||
)}
|
)}
|
||||||
hover_bg={get_selectable_color_classes(
|
hover_bg={get_selectable_color_classes(
|
||||||
!is_folder,
|
!file_is_folder,
|
||||||
{
|
{
|
||||||
bg: true
|
bg: true
|
||||||
},
|
},
|
||||||
50
|
50
|
||||||
)}
|
)}
|
||||||
active_bg={get_selectable_color_classes(
|
active_bg={get_selectable_color_classes(
|
||||||
!is_folder,
|
!file_is_folder,
|
||||||
{
|
{
|
||||||
bg: true
|
bg: true
|
||||||
},
|
},
|
||||||
@@ -245,7 +248,7 @@
|
|||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{#if is_folder}
|
{#if file_is_folder}
|
||||||
<ArrowRight class="size-full" strokeWidth="3" />
|
<ArrowRight class="size-full" strokeWidth="3" />
|
||||||
{:else if $missing_colliding_displays_ids && $missing_colliding_displays_ids.missing.length !== 0}
|
{:else if $missing_colliding_displays_ids && $missing_colliding_displays_ids.missing.length !== 0}
|
||||||
<RefreshPlay className="size-full" />
|
<RefreshPlay className="size-full" />
|
||||||
@@ -274,7 +277,7 @@
|
|||||||
{/if}
|
{/if}
|
||||||
<div class="flex flex-row gap-2 min-w-0 w-full z-10">
|
<div class="flex flex-row gap-2 min-w-0 w-full z-10">
|
||||||
<div class="aspect-square rounded-md flex justify-center items-center">
|
<div class="aspect-square rounded-md flex justify-center items-center">
|
||||||
{#if is_folder}
|
{#if file_is_folder}
|
||||||
<Folder class="size-full p-2" />
|
<Folder class="size-full p-2" />
|
||||||
{:else if $thumbnail_url || null}
|
{:else if $thumbnail_url || null}
|
||||||
<img
|
<img
|
||||||
@@ -291,7 +294,7 @@
|
|||||||
{/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.includes('.') && !file_is_folder && get_file_type(file)
|
||||||
? file.name.slice(0, file.name.lastIndexOf('.'))
|
? file.name.slice(0, file.name.lastIndexOf('.'))
|
||||||
: file.name}
|
: file.name}
|
||||||
</div>
|
</div>
|
||||||
@@ -343,7 +346,7 @@
|
|||||||
class="w-12 content-center text-center select-none text-xs whitespace-nowrap truncate"
|
class="w-12 content-center text-center select-none text-xs whitespace-nowrap truncate"
|
||||||
title={file.type}
|
title={file.type}
|
||||||
>
|
>
|
||||||
{is_folder ? 'Ordner' : (get_file_type(file)?.display_name ?? '?')}
|
{file_is_folder ? 'Ordner' : (get_file_type(file)?.display_name ?? '?')}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="h-[70%] border {get_grayed_out_border_color_strings(
|
class="h-[70%] border {get_grayed_out_border_color_strings(
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { notifications } from './stores/notification';
|
|||||||
import { generate_thumbnail } from './stores/thumbnails';
|
import { generate_thumbnail } from './stores/thumbnails';
|
||||||
import {
|
import {
|
||||||
get_file_primary_key,
|
get_file_primary_key,
|
||||||
|
is_folder,
|
||||||
type FileLoadingData,
|
type FileLoadingData,
|
||||||
type FileOnDisplay,
|
type FileOnDisplay,
|
||||||
type FileTransferTask,
|
type FileTransferTask,
|
||||||
@@ -109,7 +110,7 @@ export async function add_sync_recursively(
|
|||||||
);
|
);
|
||||||
if (!file_data) return console.warn('Sync canceled: no file_data');
|
if (!file_data) return console.warn('Sync canceled: no file_data');
|
||||||
|
|
||||||
if (file_data.file.type === 'inode/directory') {
|
if (is_folder(file_data.file)) {
|
||||||
const new_path = file_data.file.path + file_data.file.name + '/';
|
const new_path = file_data.file.path + file_data.file.name + '/';
|
||||||
const elements_in_folder = await get_folder_elements(new_path, selected_display_ids);
|
const elements_in_folder = await get_folder_elements(new_path, selected_display_ids);
|
||||||
if (elements_in_folder.length === 0) {
|
if (elements_in_folder.length === 0) {
|
||||||
@@ -294,7 +295,7 @@ export async function download_file(selected_file_id: string, selected_display_i
|
|||||||
selected_file_id,
|
selected_file_id,
|
||||||
selected_display_ids
|
selected_display_ids
|
||||||
);
|
);
|
||||||
if (!file_data || file_data.file.type === 'inode/directory')
|
if (!file_data || is_folder(file_data.file))
|
||||||
return console.warn('Download cancelled: is folder');
|
return console.warn('Download cancelled: is folder');
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { get, writable, type Writable } from 'svelte/store';
|
import { get, writable, type Writable } from 'svelte/store';
|
||||||
import {
|
import {
|
||||||
get_file_primary_key,
|
get_file_primary_key,
|
||||||
|
is_folder,
|
||||||
type Display,
|
type Display,
|
||||||
type FileOnDisplay,
|
type FileOnDisplay,
|
||||||
type Inode,
|
type Inode,
|
||||||
@@ -59,7 +60,7 @@ export async function remove_file_from_display_recusively(
|
|||||||
|
|
||||||
const inode_element = await get_file_by_id(found.file_primary_key);
|
const inode_element = await get_file_by_id(found.file_primary_key);
|
||||||
if (!inode_element) return;
|
if (!inode_element) return;
|
||||||
if (inode_element.type === 'inode/directory') {
|
if (is_folder(inode_element)) {
|
||||||
const path_inside_folder = inode_element.path + inode_element.name + `/`;
|
const path_inside_folder = inode_element.path + inode_element.name + `/`;
|
||||||
const primary_file_keys_in_folder = (
|
const primary_file_keys_in_folder = (
|
||||||
await db.files.where('path').equals(path_inside_folder).toArray()
|
await db.files.where('path').equals(path_inside_folder).toArray()
|
||||||
@@ -149,7 +150,7 @@ export async function get_displays_where_path_not_exists(
|
|||||||
const folders_of_current_path = await db.files
|
const folders_of_current_path = await db.files
|
||||||
.where('name')
|
.where('name')
|
||||||
.equals(last_path_part)
|
.equals(last_path_part)
|
||||||
.filter((inode) => inode.path === path_without_last_part && inode.type === 'inode/directory')
|
.filter((inode) => inode.path === path_without_last_part && is_folder(inode))
|
||||||
.first();
|
.first();
|
||||||
if (!folders_of_current_path) return [];
|
if (!folders_of_current_path) return [];
|
||||||
const folder_primary_key = get_file_primary_key(folders_of_current_path);
|
const folder_primary_key = get_file_primary_key(folders_of_current_path);
|
||||||
@@ -278,7 +279,7 @@ export async function update_folder_elements_recursively(
|
|||||||
};
|
};
|
||||||
await db.files_on_display.put(file_on_display);
|
await db.files_on_display.put(file_on_display);
|
||||||
|
|
||||||
if (new_element.folder_element.type === 'inode/directory') {
|
if (is_folder(new_element.folder_element)) {
|
||||||
await update_folder_elements_recursively(
|
await update_folder_elements_recursively(
|
||||||
display,
|
display,
|
||||||
file_path + new_element.folder_element.name + '/'
|
file_path + new_element.folder_element.name + '/'
|
||||||
@@ -334,8 +335,8 @@ export async function get_folder_elements(
|
|||||||
|
|
||||||
function sort_files(files: Inode[]) {
|
function sort_files(files: Inode[]) {
|
||||||
files.sort((a, b) => {
|
files.sort((a, b) => {
|
||||||
const isDirA = a.type === 'inode/directory';
|
const isDirA = is_folder(a);
|
||||||
const isDirB = b.type === 'inode/directory';
|
const isDirB = is_folder(b);
|
||||||
|
|
||||||
// Ordner zuerst
|
// Ordner zuerst
|
||||||
if (isDirA && !isDirB) return -1;
|
if (isDirA && !isDirB) return -1;
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ export type FileTransferTaskData =
|
|||||||
type: 'sync';
|
type: 'sync';
|
||||||
destination_display_data: {
|
destination_display_data: {
|
||||||
display: ShortDisplay;
|
display: ShortDisplay;
|
||||||
loading_data: FileLoadingData
|
loading_data: FileLoadingData;
|
||||||
}[];
|
}[];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -135,11 +135,11 @@ export type PopupContent = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export type NumberSetting = {
|
export type NumberSetting = {
|
||||||
max: number,
|
max: number;
|
||||||
min: number,
|
min: number;
|
||||||
now: number,
|
now: number;
|
||||||
step: number
|
step: number;
|
||||||
}
|
};
|
||||||
|
|
||||||
export type DisplayStatus = 'host_offline' | 'app_offline' | 'app_online' | null;
|
export type DisplayStatus = 'host_offline' | 'app_offline' | 'app_online' | null;
|
||||||
|
|
||||||
@@ -148,3 +148,7 @@ export function to_display_status(value: string): DisplayStatus {
|
|||||||
? (value as DisplayStatus)
|
? (value as DisplayStatus)
|
||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function is_folder(inode: Inode) {
|
||||||
|
return inode.type === 'inode/directory';
|
||||||
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
import { slide } from 'svelte/transition';
|
import { slide } from 'svelte/transition';
|
||||||
import InodeElement from '../lib/components/InodeElement.svelte';
|
import InodeElement from '../lib/components/InodeElement.svelte';
|
||||||
import PopUp from '$lib/components/PopUp.svelte';
|
import PopUp from '$lib/components/PopUp.svelte';
|
||||||
import { get_file_primary_key, type Inode, type PopupContent } from '$lib/ts/types';
|
import { get_file_primary_key, is_folder, type Inode, type PopupContent } from '$lib/ts/types';
|
||||||
import TextInput from '$lib/components/TextInput.svelte';
|
import TextInput from '$lib/components/TextInput.svelte';
|
||||||
import {
|
import {
|
||||||
first_letter_is_valid,
|
first_letter_is_valid,
|
||||||
@@ -59,7 +59,9 @@
|
|||||||
$effect(() => {
|
$effect(() => {
|
||||||
const s = $selected_file_ids;
|
const s = $selected_file_ids;
|
||||||
one_file_selected = liveQuery(async () => {
|
one_file_selected = liveQuery(async () => {
|
||||||
return s.length === 1 && (await get_file_by_id(s[0]))?.type !== 'inode/directory';
|
const inode = await get_file_by_id(s[0]);
|
||||||
|
if (!inode) return false;
|
||||||
|
return s.length === 1 && is_folder(inode);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -110,14 +112,14 @@
|
|||||||
const show_edit_file_popup = async () => {
|
const show_edit_file_popup = async () => {
|
||||||
const file = await get_file_by_id($selected_file_ids[0]);
|
const file = await get_file_by_id($selected_file_ids[0]);
|
||||||
if (!file) return;
|
if (!file) return;
|
||||||
const is_folder = file.type === 'inode/directory';
|
const file_is_folder = is_folder(file);
|
||||||
const extension = is_folder ? '' : '.' + file.name.split('.').at(-1) || '';
|
const extension = file_is_folder ? '' : '.' + file.name.split('.').at(-1) || '';
|
||||||
current_name = file.name.slice(0, file.name.length - extension.length);
|
current_name = file.name.slice(0, file.name.length - extension.length);
|
||||||
current_valid = true;
|
current_valid = true;
|
||||||
popup_content = {
|
popup_content = {
|
||||||
open: true,
|
open: true,
|
||||||
snippet: edit_file_name_popup,
|
snippet: edit_file_name_popup,
|
||||||
title: `${is_folder ? 'Ordner' : 'Datei'} umbenennen`,
|
title: `${file_is_folder ? 'Ordner' : 'Datei'} umbenennen`,
|
||||||
title_icon: FolderPlus,
|
title_icon: FolderPlus,
|
||||||
snippet_arg: extension,
|
snippet_arg: extension,
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user