chore: fix errenous windows paths from previous migration

This commit is contained in:
Mo
2023-05-07 07:38:22 -05:00
parent ae03f84651
commit e351a97940
11 changed files with 101 additions and 17 deletions

View File

@@ -62,6 +62,10 @@ export class FilesBackupManager implements FileBackupsDevice {
return uuid
}
async joinPaths(...paths: string[]): Promise<string> {
return path.join(...paths)
}
public async migrateLegacyFileBackupsToNewStructure(newLocation: string): Promise<void> {
const legacyLocation = await this.getLegacyFilesBackupsLocation()
if (!legacyLocation) {

View File

@@ -76,6 +76,7 @@ export class RemoteBridge implements CrossProcessBridge {
migrateLegacyFileBackupsToNewStructure: this.migrateLegacyFileBackupsToNewStructure.bind(this),
getUserDocumentsDirectory: this.getUserDocumentsDirectory.bind(this),
monitorPlaintextBackupsLocationForChanges: this.monitorPlaintextBackupsLocationForChanges.bind(this),
joinPaths: this.joinPaths.bind(this),
}
}
@@ -235,6 +236,10 @@ export class RemoteBridge implements CrossProcessBridge {
return this.fileBackups.monitorPlaintextBackupsLocationForChanges(backupsDirectory)
}
joinPaths(...paths: string[]): Promise<string> {
return this.fileBackups.joinPaths(...paths)
}
askForMediaAccess(type: 'camera' | 'microphone'): Promise<boolean> {
return this.media.askForMediaAccess(type)
}

View File

@@ -153,6 +153,10 @@ export class DesktopDevice extends WebOrDesktopDevice implements DesktopDeviceIn
return this.remoteBridge.monitorPlaintextBackupsLocationForChanges(backupsDirectory)
}
joinPaths(...paths: string[]): Promise<string> {
return this.remoteBridge.joinPaths(...paths)
}
async performHardReset(): Promise<void> {
console.error('performHardReset is not yet implemented')
}

View File

@@ -19,6 +19,8 @@ export interface FileBackupsDevice
TextBackupsMethods {
openLocation(path: string): Promise<void>
joinPaths(...paths: string[]): Promise<string>
/**
* The reason we combine presenting a directory picker and transfering old files to the new location
* in one function is so we don't have to expose a general `transferDirectories` function to the web app,

View File

@@ -5,7 +5,7 @@ import { SuperConverterServiceInterface } from './SuperConverterServiceInterface
export interface BackupServiceInterface {
openAllDirectoriesContainingBackupFiles(): void
prependWorkspacePathForPath(path: string): string
prependWorkspacePathForPath(path: string): Promise<string>
importWatchedDirectoryChanges(changes: DesktopWatchedDirectoriesChanges): Promise<void>
setSuperConverter(converter: SuperConverterServiceInterface): void

View File

@@ -184,17 +184,17 @@ export class FilesBackupService extends AbstractService implements BackupService
return this.storage.getValue(StorageKey.TextBackupsEnabled, undefined, true)
}
prependWorkspacePathForPath(path: string): string {
async prependWorkspacePathForPath(path: string): Promise<string> {
const workspacePath = this.session.getWorkspaceDisplayIdentifier()
return `${workspacePath}/${path}`
return this.device.joinPaths(workspacePath, path)
}
async enableTextBackups(): Promise<void> {
let location = this.getTextBackupsLocation()
if (!location) {
location = await this.device.presentDirectoryPickerForLocationChangeAndTransferOld(
this.prependWorkspacePathForPath(TextBackupsDirectoryName),
await this.prependWorkspacePathForPath(TextBackupsDirectoryName),
)
if (!location) {
return
@@ -223,7 +223,7 @@ export class FilesBackupService extends AbstractService implements BackupService
async changeTextBackupsLocation(): Promise<string | undefined> {
const oldLocation = this.getTextBackupsLocation()
const newLocation = await this.device.presentDirectoryPickerForLocationChangeAndTransferOld(
this.prependWorkspacePathForPath(TextBackupsDirectoryName),
await this.prependWorkspacePathForPath(TextBackupsDirectoryName),
oldLocation,
)
@@ -253,7 +253,7 @@ export class FilesBackupService extends AbstractService implements BackupService
let location = this.getPlaintextBackupsLocation()
if (!location) {
location = await this.device.presentDirectoryPickerForLocationChangeAndTransferOld(
this.prependWorkspacePathForPath(PlaintextBackupsDirectoryName),
await this.prependWorkspacePathForPath(PlaintextBackupsDirectoryName),
)
if (!location) {
return
@@ -285,7 +285,7 @@ export class FilesBackupService extends AbstractService implements BackupService
async changePlaintextBackupsLocation(): Promise<string | undefined> {
const oldLocation = this.getPlaintextBackupsLocation()
const newLocation = await this.device.presentDirectoryPickerForLocationChangeAndTransferOld(
this.prependWorkspacePathForPath(PlaintextBackupsDirectoryName),
await this.prependWorkspacePathForPath(PlaintextBackupsDirectoryName),
oldLocation,
)
@@ -302,7 +302,7 @@ export class FilesBackupService extends AbstractService implements BackupService
let location = this.getFilesBackupsLocation()
if (!location) {
location = await this.device.presentDirectoryPickerForLocationChangeAndTransferOld(
this.prependWorkspacePathForPath(FileBackupsDirectoryName),
await this.prependWorkspacePathForPath(FileBackupsDirectoryName),
)
if (!location) {
return
@@ -328,7 +328,7 @@ export class FilesBackupService extends AbstractService implements BackupService
public async changeFilesBackupsLocation(): Promise<string | undefined> {
const oldLocation = this.getFilesBackupsLocation()
const newLocation = await this.device.presentDirectoryPickerForLocationChangeAndTransferOld(
this.prependWorkspacePathForPath(FileBackupsDirectoryName),
await this.prependWorkspacePathForPath(FileBackupsDirectoryName),
oldLocation,
)
if (!newLocation) {

View File

@@ -1369,6 +1369,7 @@ export class SNApplication implements ApplicationInterface, AppGroupManagedAppli
singletonManager: this.singletonManager,
featuresService: this.featuresService,
environment: this.environment,
platform: this.platform,
identifier: this.identifier,
internalEventBus: this.internalEventBus,
legacySessionStorageMapper: this.legacySessionStorageMapper,

View File

@@ -1,5 +1,5 @@
import { BackupServiceInterface } from '@standardnotes/files'
import { Environment } from '@standardnotes/models'
import { Environment, Platform } from '@standardnotes/models'
import { DeviceInterface, InternalEventBusInterface, EncryptionService } from '@standardnotes/services'
import { SNSessionManager } from '../Services/Session/SessionManager'
import { ApplicationIdentifier } from '@standardnotes/common'
@@ -18,6 +18,7 @@ export type MigrationServices = {
singletonManager: SNSingletonManager
featuresService: SNFeaturesService
environment: Environment
platform: Platform
identifier: ApplicationIdentifier
legacySessionStorageMapper: MapperInterface<LegacySession, Record<string, unknown>>
internalEventBus: InternalEventBusInterface

View File

@@ -30,9 +30,11 @@ export class Migration2_167_6 extends Migration {
if (fileBackupsEnabled) {
const legacyLocation = await device.getLegacyFilesBackupsLocation()
const newLocation = `${legacyLocation}/${this.services.backups.prependWorkspacePathForPath(
FileBackupsDirectoryName,
)}`
const newLocation = await device.joinPaths(
legacyLocation as string,
await this.services.backups.prependWorkspacePathForPath(FileBackupsDirectoryName),
)
await device.migrateLegacyFileBackupsToNewStructure(newLocation)
this.services.storageService.setValue(StorageKey.FileBackupsLocation, newLocation)
}
@@ -41,9 +43,10 @@ export class Migration2_167_6 extends Migration {
if (wasLegacyDisabled) {
this.services.storageService.setValue(StorageKey.TextBackupsEnabled, false)
} else {
const newTextBackupsLocation = `${await device.getLegacyTextBackupsLocation()}/${this.services.backups.prependWorkspacePathForPath(
TextBackupsDirectoryName,
)}`
const newTextBackupsLocation = await device.joinPaths(
(await device.getLegacyTextBackupsLocation()) as string,
await this.services.backups.prependWorkspacePathForPath(TextBackupsDirectoryName),
)
this.services.storageService.setValue(StorageKey.TextBackupsLocation, newTextBackupsLocation)
this.services.storageService.setValue(StorageKey.TextBackupsEnabled, true)
}

View File

@@ -0,0 +1,54 @@
import { Platform } from '@standardnotes/models'
import { ApplicationStage, StorageKey, isDesktopDevice } from '@standardnotes/services'
import { Migration } from '@Lib/Migrations/Migration'
export class Migration2_168_6 extends Migration {
static override version(): string {
return '2.168.6'
}
protected registerStageHandlers(): void {
this.registerStageHandler(ApplicationStage.Launched_10, async () => {
await this.migrateErroneousWindowsPathFromPreviousMigration()
this.markDone()
})
}
private async migrateErroneousWindowsPathFromPreviousMigration(): Promise<void> {
const device = this.services.deviceInterface
if (!isDesktopDevice(device) || !this.services.backups) {
return
}
if (this.services.platform !== Platform.WindowsDesktop) {
return
}
const textBackupsLocation = this.services.backups.getTextBackupsLocation()
if (textBackupsLocation) {
const parts = textBackupsLocation.split('/')
if (parts.length > 1) {
const newLocation = await device.joinPaths(...parts)
this.services.storageService.setValue(StorageKey.TextBackupsLocation, newLocation)
}
}
const fileBackupsLocation = this.services.backups.getFilesBackupsLocation()
if (fileBackupsLocation) {
const parts = fileBackupsLocation.split('/')
if (parts.length > 1) {
const newLocation = await device.joinPaths(...parts)
this.services.storageService.setValue(StorageKey.FileBackupsLocation, newLocation)
}
}
const plaintextBackupsLocation = this.services.backups.getPlaintextBackupsLocation()
if (plaintextBackupsLocation) {
const parts = plaintextBackupsLocation.split('/')
if (parts.length > 1) {
const newLocation = await device.joinPaths(...parts)
this.services.storageService.setValue(StorageKey.PlaintextBackupsLocation, newLocation)
}
}
}
}

View File

@@ -4,6 +4,7 @@ import { Migration2_20_0 } from './2_20_0'
import { Migration2_36_0 } from './2_36_0'
import { Migration2_42_0 } from './2_42_0'
import { Migration2_167_6 } from './2_167_6'
import { Migration2_168_6 } from './2_168_6'
export const MigrationClasses = [
Migration2_0_15,
@@ -12,6 +13,15 @@ export const MigrationClasses = [
Migration2_36_0,
Migration2_42_0,
Migration2_167_6,
Migration2_168_6,
]
export { Migration2_0_15, Migration2_7_0, Migration2_20_0, Migration2_36_0, Migration2_42_0, Migration2_167_6 }
export {
Migration2_0_15,
Migration2_7_0,
Migration2_20_0,
Migration2_36_0,
Migration2_42_0,
Migration2_167_6,
Migration2_168_6,
}