From d7b1c00861e40939ea78fb3209b8660fec3e673d Mon Sep 17 00:00:00 2001 From: Dustin Brett Date: Sun, 19 Jan 2025 13:29:14 -0800 Subject: [PATCH] Log more recent files --- components/system/Files/FileEntry/useFile.ts | 9 ++++-- contexts/session/useSessionContextState.ts | 31 ++++++++++++++------ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/components/system/Files/FileEntry/useFile.ts b/components/system/Files/FileEntry/useFile.ts index c9291fb0..6cd3749e 100644 --- a/components/system/Files/FileEntry/useFile.ts +++ b/components/system/Files/FileEntry/useFile.ts @@ -62,11 +62,14 @@ const useFile = (url: string, path: string): UseFile => { ? processIcon : icon ); - if (runUrl && pid) { + + const recentUrl = runUrl || path; + + if (recentUrl && pid) { updateRecentFiles( - runUrl, + recentUrl, pid, - isYouTubeUrl(runUrl) ? basename(path, extname(path)) : undefined + isYouTubeUrl(recentUrl) ? basename(path, extname(path)) : undefined ); } } diff --git a/contexts/session/useSessionContextState.ts b/contexts/session/useSessionContextState.ts index da1ec299..4b37c5d0 100644 --- a/contexts/session/useSessionContextState.ts +++ b/contexts/session/useSessionContextState.ts @@ -1,4 +1,4 @@ -import { dirname, extname } from "path"; +import { basename, dirname } from "path"; import { type SetStateAction, useCallback, @@ -28,10 +28,12 @@ import { DEFAULT_WALLPAPER_FIT, DESKTOP_PATH, SESSION_FILE, + SHORTCUT_EXTENSION, SYSTEM_FILES, TRANSITIONS_IN_MILLISECONDS, } from "utils/constants"; -import { updateIconPositionsIfEmpty } from "utils/functions"; +import { getExtension, updateIconPositionsIfEmpty } from "utils/functions"; +import { getShortcutInfo } from "components/system/Files/FileEntry/functions"; const DEFAULT_SESSION = ( typeof window === "object" && "DEBUG_DEFAULT_SESSION" in window @@ -66,12 +68,22 @@ const useSessionContextState = (): SessionContextState => { const [runHistory, setRunHistory] = useState([]); const [recentFiles, setRecentFiles] = useState([]); const updateRecentFiles = useCallback( - (url: string, pid: string, title?: string) => - (title || extname(url)) && - pid !== "FileExplorer" && + async (url: string, pid: string, title?: string): Promise => { + const ext = getExtension(url); + + if (!(title || ext) || pid === "FileExplorer") return; + + let baseUrl = url; + let baseTitle = title; + + if (pid && ext === SHORTCUT_EXTENSION) { + ({ url: baseUrl } = getShortcutInfo(await readFile(url))); + baseTitle = title || basename(url, ext); + } + setRecentFiles((currentRecentFiles) => { const entryIndex = currentRecentFiles.findIndex( - ([recentUrl, recentPid]) => recentUrl === url && recentPid === pid + ([recentUrl, recentPid]) => recentUrl === baseUrl && recentPid === pid ); if (entryIndex !== -1) { @@ -82,12 +94,13 @@ const useSessionContextState = (): SessionContextState => { ] as RecentFiles; } - return [[url, pid, title], ...currentRecentFiles].slice( + return [[baseUrl, pid, baseTitle], ...currentRecentFiles].slice( 0, KEEP_RECENT_FILES_LIST_COUNT ) as RecentFiles; - }), - [] + }); + }, + [readFile] ); const prependToStack = useCallback( (id: string) =>