1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-24 10:27:10 +02:00

All: Fixed "Invalid lock client type" error when migrating sync target

This commit is contained in:
Laurent Cozic 2021-12-13 10:32:22 +01:00
parent 78c5877c65
commit e0e93c436b
4 changed files with 17 additions and 13 deletions

View File

@ -5,6 +5,7 @@ import MigrationHandler from '@joplin/lib/services/synchronizer/MigrationHandler
import ResourceFetcher from '@joplin/lib/services/ResourceFetcher';
import Synchronizer from '@joplin/lib/Synchronizer';
import { masterKeysWithoutPassword } from '@joplin/lib/services/e2ee/utils';
import { appTypeToLockType } from '@joplin/lib/services/synchronizer/LockHandler';
const { BaseCommand } = require('./base-command.js');
const { app } = require('./app.js');
const { OneDriveApiNodeUtils } = require('@joplin/lib/onedrive-api-node-utils.js');
@ -188,7 +189,7 @@ class Command extends BaseCommand {
sync.api(),
reg.db(),
sync.lockHandler(),
Setting.value('appType'),
appTypeToLockType(Setting.value('appType')),
Setting.value('clientId')
);

View File

@ -1,5 +1,5 @@
import Logger from './Logger';
import LockHandler, { hasActiveLock, LockClientType, LockType } from './services/synchronizer/LockHandler';
import LockHandler, { appTypeToLockType, hasActiveLock, LockClientType, LockType } from './services/synchronizer/LockHandler';
import Setting, { AppType } from './models/Setting';
import shim from './shim';
import MigrationHandler from './services/synchronizer/MigrationHandler';
@ -53,7 +53,7 @@ export default class Synchronizer {
private db_: JoplinDatabase;
private api_: FileApi;
private appType_: string;
private appType_: AppType;
private logger_: Logger = new Logger();
private state_: string = 'idle';
private cancelling_: boolean = false;
@ -77,7 +77,7 @@ export default class Synchronizer {
public dispatch: Function;
public constructor(db: JoplinDatabase, api: FileApi, appType: string) {
public constructor(db: JoplinDatabase, api: FileApi, appType: AppType) {
this.db_ = db;
this.api_ = api;
this.appType_ = appType;
@ -123,13 +123,7 @@ export default class Synchronizer {
private lockClientType(): LockClientType {
if (this.lockClientType_) return this.lockClientType_;
if (this.appType_ === AppType.Desktop) this.lockClientType_ = LockClientType.Desktop;
if (this.appType_ === AppType.Mobile) this.lockClientType_ = LockClientType.Mobile;
if (this.appType_ === AppType.Cli) this.lockClientType_ = LockClientType.Cli;
if (!this.lockClientType_) throw new Error(`Invalid client type: ${this.appType_}`);
this.lockClientType_ = appTypeToLockType(this.appType_);
return this.lockClientType_;
}
@ -141,7 +135,7 @@ export default class Synchronizer {
maxResourceSize() {
if (this.maxResourceSize_ !== null) return this.maxResourceSize_;
return this.appType_ === 'mobile' ? 100 * 1000 * 1000 : Infinity;
return this.appType_ === AppType.Mobile ? 100 * 1000 * 1000 : Infinity;
}
public setShareService(v: ShareService) {

View File

@ -3,6 +3,7 @@ import shim from '../../shim';
import JoplinError from '../../JoplinError';
import time from '../../time';
import { FileApi } from '../../file-api';
import { AppType } from '../../models/Setting';
const { fileExtension, filename } = require('../../path-utils');
export enum LockType {
@ -46,6 +47,13 @@ export function lockNameToObject(name: string, updatedTime: number = null): Lock
return lock;
}
export function appTypeToLockType(appType: AppType): LockClientType {
if (appType === AppType.Desktop) return LockClientType.Desktop;
if (appType === AppType.Mobile) return LockClientType.Mobile;
if (appType === AppType.Cli) return LockClientType.Cli;
throw new Error(`Invalid app type: ${appType}`);
}
export function hasActiveLock(locks: Lock[], currentDate: Date, lockTtl: number, lockType: LockType, clientType: LockClientType = null, clientId: string = null) {
const lock = activeLock(locks, currentDate, lockTtl, lockType, clientType, clientId);
return !!lock;

View File

@ -2,6 +2,7 @@ import shim from '../../../shim';
import MigrationHandler from '../MigrationHandler';
import Setting from '../../../models/Setting';
import { reg } from '../../../registry';
import { appTypeToLockType } from '../LockHandler';
const { useEffect, useState } = shim.react();
export interface SyncTargetUpgradeResult {
@ -28,7 +29,7 @@ export default function useSyncTargetUpgrade(): SyncTargetUpgradeResult {
synchronizer.api(),
reg.db(),
synchronizer.lockHandler(),
Setting.value('appType'),
appTypeToLockType(Setting.value('appType')),
Setting.value('clientId')
);