diff --git a/packages/desktop/app/javascripts/Main/FileBackups/FileBackupsManager.ts b/packages/desktop/app/javascripts/Main/FileBackups/FileBackupsManager.ts index 6c3a56277..7f98363f5 100644 --- a/packages/desktop/app/javascripts/Main/FileBackups/FileBackupsManager.ts +++ b/packages/desktop/app/javascripts/Main/FileBackups/FileBackupsManager.ts @@ -2,9 +2,11 @@ import { FileBackupsDevice, FileBackupsMapping } from '@web/Application/Device/D import { AppState } from 'app/application' import { shell } from 'electron' import { StoreKeys } from '../Store' +import path from 'path' import { + deleteFile, ensureDirectoryExists, - moveDirContents, + moveFiles, openDirectoryPicker, readJSONFile, writeFile, @@ -61,12 +63,37 @@ export class FilesBackupManager implements FileBackupsDevice { const oldPath = await this.getFilesBackupsLocation() if (oldPath) { - await moveDirContents(oldPath, newPath) + await this.transferFilesBackupsToNewLocation(oldPath, newPath) + } else { + this.appState.store.set(StoreKeys.FileBackupsLocation, newPath) } + return newPath + } + + private async transferFilesBackupsToNewLocation(oldPath: string, newPath: string): Promise { + const mapping = await this.getMappingFileFromDisk() + if (!mapping) { + return + } + + const entries = Object.values(mapping.files) + const itemFolders = entries.map((entry) => path.join(oldPath, entry.relativePath)) + await moveFiles(itemFolders, newPath) + + for (const entry of entries) { + entry.absolutePath = path.join(newPath, entry.relativePath) + } + + const oldMappingFileLocation = this.getMappingFileLocation() + this.appState.store.set(StoreKeys.FileBackupsLocation, newPath) - return newPath + const result = await this.saveFilesBackupsMappingFile(mapping) + + if (result === 'success') { + await deleteFile(oldMappingFileLocation) + } } public getFilesBackupsLocation(): Promise { diff --git a/packages/desktop/app/javascripts/Main/Packages/PackageManager.ts b/packages/desktop/app/javascripts/Main/Packages/PackageManager.ts index 29a65208e..900b55f0b 100644 --- a/packages/desktop/app/javascripts/Main/Packages/PackageManager.ts +++ b/packages/desktop/app/javascripts/Main/Packages/PackageManager.ts @@ -288,12 +288,13 @@ async function installComponent( const sendInstalledMessage = (component: Component, error?: { message: string; tag: string }) => { if (error) { logError(`Error when installing component ${name}: ` + error.message) - } else { - logMessage(`Installed component ${name} (${version})`) + return } + + logMessage(`Installed component ${name} (${version})`) + webContents.send(MessageToWebApp.InstallComponentComplete, { component, - error, }) } diff --git a/packages/desktop/app/javascripts/Renderer/Renderer.ts b/packages/desktop/app/javascripts/Renderer/Renderer.ts index 5ebf02daf..d070f94e4 100644 --- a/packages/desktop/app/javascripts/Renderer/Renderer.ts +++ b/packages/desktop/app/javascripts/Renderer/Renderer.ts @@ -152,7 +152,7 @@ function listenForMessagesSentFromMainToPreloadToUs(device: DesktopDevice) { } else if (message === MessageToWebApp.WindowFocused) { receiver.windowGainedFocus() } else if (message === MessageToWebApp.InstallComponentComplete) { - receiver.onComponentInstallationComplete(data.component, data.error) + receiver.onComponentInstallationComplete(data.component, undefined) } else if (message === MessageToWebApp.UpdateAvailable) { receiver.updateAvailable() } else if (message === MessageToWebApp.PerformAutomatedBackup) { diff --git a/packages/web/src/javascripts/Services/DesktopManager.ts b/packages/web/src/javascripts/Services/DesktopManager.ts index 4126aad15..ba0512e5a 100644 --- a/packages/web/src/javascripts/Services/DesktopManager.ts +++ b/packages/web/src/javascripts/Services/DesktopManager.ts @@ -68,7 +68,6 @@ export class DesktopManager return component.payloadRepresentation().ejected() } - // All `components` should be installed syncComponentsInstallation(components: SNComponent[]) { Promise.all( components.map((component) => { @@ -114,7 +113,7 @@ export class DesktopManager this.webApplication.notifyWebEvent(WebAppEvent.WindowDidBlur) } - async onComponentInstallationComplete(componentData: DecryptedTransferPayload, error: unknown) { + async onComponentInstallationComplete(componentData: DecryptedTransferPayload) { const component = this.application.items.findItem(componentData.uuid) if (!component) { return @@ -124,15 +123,11 @@ export class DesktopManager component, (m) => { const mutator = m as ComponentMutator - if (error) { - mutator.setAppDataItem(AppDataField.ComponentInstallError, error) - } else { - // eslint-disable-next-line camelcase - mutator.local_url = componentData.content.local_url as string - // eslint-disable-next-line camelcase - mutator.package_info = componentData.content.package_info - mutator.setAppDataItem(AppDataField.ComponentInstallError, undefined) - } + // eslint-disable-next-line camelcase + mutator.local_url = componentData.content.local_url as string + // eslint-disable-next-line camelcase + mutator.package_info = componentData.content.package_info + mutator.setAppDataItem(AppDataField.ComponentInstallError, undefined) }, undefined, )