diff --git a/src/lib/apis/terminal/index.ts b/src/lib/apis/terminal/index.ts index 4dca975669..8a89f8ff7f 100644 --- a/src/lib/apis/terminal/index.ts +++ b/src/lib/apis/terminal/index.ts @@ -36,6 +36,7 @@ export type FileEntry = { type: 'file' | 'directory'; size?: number; modified?: number; + created?: number | null; writable?: boolean; }; diff --git a/src/lib/components/chat/FileNav.svelte b/src/lib/components/chat/FileNav.svelte index 0630a36754..813e30749e 100644 --- a/src/lib/components/chat/FileNav.svelte +++ b/src/lib/components/chat/FileNav.svelte @@ -325,7 +325,7 @@ let error: string | null = null; // ── Browser view state ────────────────────────────────────────────── - type SortMode = 'name' | 'size' | 'date'; + type SortMode = 'name' | 'size' | 'date' | 'created'; type BrowserRow = FileEntry & { fullPath: string; parentPath: string; @@ -391,6 +391,13 @@ return [...items].sort((a, b) => { // Directories always first if (a.type !== b.type) return a.type === 'directory' ? -1 : 1; + if (mode === 'created') { + // Older servers and some filesystems do not expose creation time. + if (a.created == null && b.created != null) return 1; + if (a.created != null && b.created == null) return -1; + const cmp = (a.created ?? 0) - (b.created ?? 0) || a.name.localeCompare(b.name); + return asc ? cmp : -cmp; + } if (mode === 'date') { if (a.modified !== undefined && b.modified !== undefined) { return asc ? a.modified - b.modified : b.modified - a.modified; @@ -2047,6 +2054,7 @@ {canGoForward} {sortBy} {sortAsc} + showDateAdded {showHidden} viewMode={isSearching ? null : viewMode} onViewModeChange={changeViewMode} @@ -2632,7 +2640,8 @@ onSelect={handleSelect} onLongPress={enterSelectionMode} onToggleExpand={toggleExpand} - showDate={sortBy === 'date'} + showDate={sortBy === 'date' || sortBy === 'created'} + dateField={sortBy === 'created' ? 'created' : 'modified'} {showHidden} parentWritable={currentWritable} /> diff --git a/src/lib/components/chat/FileNav/FileEntryRow.svelte b/src/lib/components/chat/FileNav/FileEntryRow.svelte index 0e6cda7d6a..3da59f19df 100644 --- a/src/lib/components/chat/FileNav/FileEntryRow.svelte +++ b/src/lib/components/chat/FileNav/FileEntryRow.svelte @@ -58,9 +58,11 @@ export let onLongPress: () => void = () => {}; export let onToggleExpand: (path: string) => void = () => {}; export let showDate: boolean = false; + export let dateField: 'modified' | 'created' = 'modified'; export let showHidden: boolean = false; export let parentWritable = true; + $: entryDate = entry[dateField]; $: entryPath = fullPath ?? (entry.type === 'directory' ? `${currentPath}${entry.name}/` : `${currentPath}${entry.name}`); @@ -511,16 +513,16 @@ {/if} {:else if entry.type === 'file' && entry.size !== undefined && !renaming} - {#if showDate && entry.modified} + {#if showDate && entryDate != null} {formatRelativeTime(entry.modified)}{formatRelativeTime(entryDate)} {/if} {formatFileSize(entry.size)} {:else if entry.type === 'directory' && !renaming} - {#if showDate && entry.modified} + {#if showDate && entryDate != null} {formatRelativeTime(entry.modified)}{formatRelativeTime(entryDate)} {/if} {#if terminalUrl} diff --git a/src/lib/components/chat/FileNav/FileNavToolbar.svelte b/src/lib/components/chat/FileNav/FileNavToolbar.svelte index 28352c56d5..8a2b1f0bdc 100644 --- a/src/lib/components/chat/FileNav/FileNavToolbar.svelte +++ b/src/lib/components/chat/FileNav/FileNavToolbar.svelte @@ -29,9 +29,10 @@ export let onToggleHidden: () => void = () => {}; // Sort controls - export let sortBy: 'name' | 'size' | 'date' = 'name'; + export let sortBy: 'name' | 'size' | 'date' | 'created' = 'name'; export let sortAsc: boolean = true; - export let onSort: (mode: 'name' | 'size' | 'date') => void = () => {}; + export let showDateAdded = false; + export let onSort: (mode: 'name' | 'size' | 'date' | 'created') => void = () => {}; // Back / forward navigation export let canGoBack = false; @@ -230,6 +231,28 @@ /> {/if} + {#if showDateAdded} + + {/if} diff --git a/src/lib/i18n/locales/en-GB/translation.json b/src/lib/i18n/locales/en-GB/translation.json index 5d14d0291c..e2b6717c59 100644 --- a/src/lib/i18n/locales/en-GB/translation.json +++ b/src/lib/i18n/locales/en-GB/translation.json @@ -747,6 +747,7 @@ "Database": "", "Datalab Marker API": "", "Date is required": "", + "Date Added": "", "Date Modified": "", "Date range": "", "Day": "", diff --git a/src/lib/i18n/locales/en-US/translation.json b/src/lib/i18n/locales/en-US/translation.json index c8feaf2ab3..ff8bede83f 100644 --- a/src/lib/i18n/locales/en-US/translation.json +++ b/src/lib/i18n/locales/en-US/translation.json @@ -756,6 +756,7 @@ "Database": "", "Datalab Marker API": "", "Date is required": "", + "Date Added": "", "Date Modified": "", "Date range": "", "Day": "",