diff --git a/packages/desktop-electron/index.ts b/packages/desktop-electron/index.ts index cecd667e6fe..611855f3542 100644 --- a/packages/desktop-electron/index.ts +++ b/packages/desktop-electron/index.ts @@ -554,8 +554,8 @@ ipcMain.handle( await copy(currentBudgetDirectory, newDirectory, { overwrite: true, + preserveTimestamps: true, }); - await remove(currentBudgetDirectory); } catch (error) { logMessage( 'error', @@ -563,5 +563,30 @@ ipcMain.handle( ); throw error; } + + try { + await promiseRetry( + async retry => { + try { + return await remove(currentBudgetDirectory); + } catch (error) { + logMessage( + 'info', + `Retrying: Clean up old directory: ${currentBudgetDirectory}`, + ); + + retry(error); + } + }, + { minTimeout: 200, maxTimeout: 500, factor: 1.25 }, + ); + } catch (error) { + // Fail silently. The move worked, but the old directory wasn't cleaned up - most likely a permission issue. + // This call needs to succeed to allow the user to continue using the app with the files in the new location. + logMessage( + 'error', + `There was an error removing the old directory: ${error}`, + ); + } }, ); diff --git a/packages/desktop-electron/package.json b/packages/desktop-electron/package.json index 99f34d45d4d..4473931e3ed 100644 --- a/packages/desktop-electron/package.json +++ b/packages/desktop-electron/package.json @@ -86,7 +86,7 @@ }, "dependencies": { "better-sqlite3": "^11.7.0", - "fs-extra": "^11.2.0", + "fs-extra": "^11.3.0", "promise-retry": "^2.0.1" }, "devDependencies": { diff --git a/upcoming-release-notes/4507.md b/upcoming-release-notes/4507.md new file mode 100644 index 00000000000..265cac2fdd9 --- /dev/null +++ b/upcoming-release-notes/4507.md @@ -0,0 +1,6 @@ +--- +category: Bugfix +authors: [MikesGlitch] +--- + +Allow desktop app to move budget files even when cleanup tasks fail diff --git a/yarn.lock b/yarn.lock index 319d30ea0d9..073ffd5ea7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10172,7 +10172,7 @@ __metadata: cross-env: "npm:^7.0.3" electron: "npm:30.0.6" electron-builder: "npm:24.13.3" - fs-extra: "npm:^11.2.0" + fs-extra: "npm:^11.3.0" promise-retry: "npm:^2.0.1" typescript: "npm:^5.5.4" languageName: unknown @@ -12425,7 +12425,7 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^11.1.0, fs-extra@npm:^11.2.0": +"fs-extra@npm:^11.1.0": version: 11.2.0 resolution: "fs-extra@npm:11.2.0" dependencies: @@ -12436,6 +12436,17 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^11.3.0": + version: 11.3.0 + resolution: "fs-extra@npm:11.3.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10/c9fe7b23dded1efe7bbae528d685c3206477e20cc60e9aaceb3f024f9b9ff2ee1f62413c161cb88546cc564009ab516dec99e9781ba782d869bb37e4fe04a97f + languageName: node + linkType: hard + "fs-extra@npm:^8.0.1, fs-extra@npm:^8.1.0": version: 8.1.0 resolution: "fs-extra@npm:8.1.0"