From f77181a64990c2ea7baaddca3b365f71254da705 Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Sun, 25 Jan 2026 17:21:36 +0200 Subject: [PATCH] fix: gracefully handle missing directories in list operations --- packages/desktop/src-tauri/src/commands/files.rs | 14 +++++++++++--- packages/web/server/index.js | 7 +++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/packages/desktop/src-tauri/src/commands/files.rs b/packages/desktop/src-tauri/src/commands/files.rs index 46425e0a..a53a556c 100644 --- a/packages/desktop/src-tauri/src/commands/files.rs +++ b/packages/desktop/src-tauri/src/commands/files.rs @@ -185,9 +185,17 @@ pub async fn list_directory( .await .map_err(|err| err.to_list_message())?; - let metadata = fs::metadata(&resolved_path) - .await - .map_err(|err| FsCommandError::from(err).to_list_message())?; + let metadata = match fs::metadata(&resolved_path).await { + Ok(metadata) => metadata, + Err(err) if err.kind() == std::io::ErrorKind::NotFound => { + return Ok(DirectoryListResult { + directory: normalize_path(&resolved_path), + path: normalize_path(&resolved_path), + entries: Vec::new(), + }); + } + Err(err) => return Err(FsCommandError::from(err).to_list_message()), + }; if !metadata.is_dir() { return Err(FsCommandError::NotDirectory.to_list_message()); diff --git a/packages/web/server/index.js b/packages/web/server/index.js index b1e2cfb7..4525511f 100644 --- a/packages/web/server/index.js +++ b/packages/web/server/index.js @@ -6378,17 +6378,20 @@ async function main(options = {}) { entries: entries.filter(Boolean) }); } catch (error) { - console.error('Failed to list directory:', error); const err = error; if (err && typeof err === 'object' && 'code' in err) { const code = err.code; if (code === 'ENOENT') { - return res.status(404).json({ error: 'Directory not found' }); + return res.json({ + path: path.resolve(normalizeDirectoryPath(rawPath)), + entries: [] + }); } if (code === 'EACCES') { return res.status(403).json({ error: 'Access to directory denied' }); } } + console.error('Failed to list directory:', error); res.status(500).json({ error: (error && error.message) || 'Failed to list directory' }); } });