@@ -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