Skip to content

Commit 2a0e58e

Browse files
committed
fix folder tree refresh logic for pinned folders
1 parent cf0ef46 commit 2a0e58e

File tree

1 file changed

+58
-28
lines changed

1 file changed

+58
-28
lines changed

src/App.tsx

Lines changed: 58 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1325,18 +1325,27 @@ function App() {
13251325
return () => clearTimeout(timer);
13261326
}, [theme]);
13271327

1328-
const handleRefreshFolderTree = useCallback(async () => {
1329-
if (!rootPath) {
1330-
return;
1328+
const refreshAllFolderTrees = useCallback(async () => {
1329+
if (rootPath) {
1330+
try {
1331+
const treeData = await invoke(Invokes.GetFolderTree, { path: rootPath });
1332+
setFolderTree(treeData);
1333+
} catch (err) {
1334+
console.error('Failed to refresh main folder tree:', err);
1335+
setError(`Failed to refresh folder tree: ${err}.`);
1336+
}
13311337
}
1332-
try {
1333-
const treeData = await invoke(Invokes.GetFolderTree, { path: rootPath });
1334-
setFolderTree(treeData);
1335-
} catch (err) {
1336-
console.error('Failed to refresh folder tree:', err);
1337-
setError(`Failed to refresh folder tree: ${err}.`);
1338+
1339+
const currentPins = appSettings?.pinnedFolders || [];
1340+
if (currentPins.length > 0) {
1341+
try {
1342+
const trees = await invoke(Invokes.GetPinnedFolderTrees, { paths: currentPins });
1343+
setPinnedFolderTrees(trees);
1344+
} catch (err) {
1345+
console.error('Failed to refresh pinned folder trees:', err);
1346+
}
13381347
}
1339-
}, [rootPath]);
1348+
}, [rootPath, appSettings?.pinnedFolders]);
13401349

13411350
const pinnedFolders = useMemo(() => appSettings?.pinnedFolders || [], [appSettings]);
13421351

@@ -2404,7 +2413,7 @@ function App() {
24042413
listen('import-complete', () => {
24052414
if (isEffectActive) {
24062415
setImportState((prev: ImportState) => ({ ...prev, status: Status.Success }));
2407-
handleRefreshFolderTree();
2416+
refreshAllFolderTrees();
24082417
if (currentFolderPathRef.current) {
24092418
handleSelectSubfolder(currentFolderPathRef.current, false);
24102419
}
@@ -2424,7 +2433,7 @@ function App() {
24242433
isEffectActive = false;
24252434
listeners.forEach((p) => p.then((unlisten) => unlisten()));
24262435
};
2427-
}, [handleRefreshFolderTree, handleSelectSubfolder]);
2436+
}, [refreshAllFolderTrees, handleSelectSubfolder]);
24282437

24292438
useEffect(() => {
24302439
if ([Status.Success, Status.Error, Status.Cancelled].includes(exportState.status)) {
@@ -3395,7 +3404,7 @@ function App() {
33953404
if (folderName && folderName.trim() !== '' && folderActionTarget) {
33963405
try {
33973406
await invoke(Invokes.CreateFolder, { path: `${folderActionTarget}/${folderName.trim()}` });
3398-
handleRefreshFolderTree();
3407+
refreshAllFolderTrees();
33993408
} catch (err) {
34003409
setError(`Failed to create folder: ${err}`);
34013410
}
@@ -3405,20 +3414,41 @@ function App() {
34053414
const handleRenameFolder = async (newName: string) => {
34063415
if (newName && newName.trim() !== '' && folderActionTarget) {
34073416
try {
3408-
await invoke(Invokes.RenameFolder, { path: folderActionTarget, newName: newName.trim() });
3409-
if (rootPath === folderActionTarget) {
3410-
const newRootPath = folderActionTarget.substring(0, folderActionTarget.lastIndexOf('/') + 1) + newName.trim();
3411-
setRootPath(newRootPath);
3412-
handleSettingsChange({ ...appSettings, lastRootPath: newRootPath } as AppSettings);
3413-
}
3414-
if (currentFolderPath?.startsWith(folderActionTarget)) {
3415-
const newCurrentPath = currentFolderPath.replace(
3416-
folderActionTarget,
3417-
folderActionTarget.substring(0, folderActionTarget.lastIndexOf('/') + 1) + newName.trim(),
3418-
);
3417+
const oldPath = folderActionTarget;
3418+
const trimmedNewName = newName.trim();
3419+
3420+
await invoke(Invokes.RenameFolder, { path: oldPath, newName: trimmedNewName });
3421+
3422+
const parentDir = getParentDir(oldPath);
3423+
const separator = oldPath.includes('/') ? '/' : '\\';
3424+
const newPath = parentDir ? `${parentDir}${separator}${trimmedNewName}` : trimmedNewName;
3425+
3426+
const newAppSettings = { ...appSettings } as AppSettings;
3427+
let settingsChanged = false;
3428+
3429+
if (rootPath === oldPath) {
3430+
setRootPath(newPath);
3431+
newAppSettings.lastRootPath = newPath;
3432+
settingsChanged = true;
3433+
}
3434+
if (currentFolderPath?.startsWith(oldPath)) {
3435+
const newCurrentPath = currentFolderPath.replace(oldPath, newPath);
34193436
setCurrentFolderPath(newCurrentPath);
34203437
}
3421-
handleRefreshFolderTree();
3438+
3439+
const currentPins = appSettings?.pinnedFolders || [];
3440+
if (currentPins.includes(oldPath)) {
3441+
const newPins = currentPins.map(p => (p === oldPath ? newPath : p)).sort((a, b) => a.localeCompare(b));
3442+
newAppSettings.pinnedFolders = newPins;
3443+
settingsChanged = true;
3444+
}
3445+
3446+
if (settingsChanged) {
3447+
handleSettingsChange(newAppSettings);
3448+
}
3449+
3450+
await refreshAllFolderTrees();
3451+
34223452
} catch (err) {
34233453
setError(`Failed to rename folder: ${err}`);
34243454
}
@@ -3493,7 +3523,7 @@ function App() {
34933523
await invoke(Invokes.MoveFiles, { sourcePaths: copiedFilePaths, destinationFolder: targetPath });
34943524
setCopiedFilePaths([]);
34953525
setMultiSelectedPaths([]);
3496-
handleRefreshFolderTree();
3526+
refreshAllFolderTrees();
34973527
handleLibraryRefresh();
34983528
} catch (err) {
34993529
setError(`Failed to move files: ${err}`);
@@ -3527,7 +3557,7 @@ function App() {
35273557
try {
35283558
await invoke(Invokes.DeleteFolder, { path: targetPath });
35293559
if (currentFolderPath?.startsWith(targetPath)) await handleSelectSubfolder(rootPath);
3530-
handleRefreshFolderTree();
3560+
refreshAllFolderTrees();
35313561
} catch (err) {
35323562
setError(`Failed to delete folder: ${err}`);
35333563
}
@@ -3572,7 +3602,7 @@ function App() {
35723602
await invoke(Invokes.MoveFiles, { sourcePaths: copiedFilePaths, destinationFolder: currentFolderPath });
35733603
setCopiedFilePaths([]);
35743604
setMultiSelectedPaths([]);
3575-
handleRefreshFolderTree();
3605+
refreshAllFolderTrees();
35763606
handleLibraryRefresh();
35773607
} catch (err) {
35783608
setError(`Failed to move files: ${err}`);

0 commit comments

Comments
 (0)