diff --git a/src/common/types/sync.d.ts b/src/common/types/sync.d.ts index f8f70730..67b981c3 100644 --- a/src/common/types/sync.d.ts +++ b/src/common/types/sync.d.ts @@ -69,10 +69,16 @@ declare namespace LX { isMobile: boolean } + interface ListConfig { + skipSnapshot: boolean + } + interface DislikeConfig { + skipSnapshot: boolean + } type ServerType = 'desktop-app' | 'server' interface EnabledFeatures { - list: boolean - dislike: boolean + list?: false | ListConfig + dislike?: false | DislikeConfig } type SupportedFeatures = Partial<{ [k in keyof EnabledFeatures]: number }> } diff --git a/src/main/modules/sync/client/sync/handler.ts b/src/main/modules/sync/client/sync/handler.ts index 4ddd7661..92869f61 100644 --- a/src/main/modules/sync/client/sync/handler.ts +++ b/src/main/modules/sync/client/sync/handler.ts @@ -5,20 +5,30 @@ import { featureVersion } from '../modules' - -export const getEnabledFeatures = async(socket: LX.Sync.Client.Socket, serverType: LX.Sync.ServerType, supportedFeatures: LX.Sync.SupportedFeatures): Promise => { +const handler: Omit, 'finished'> = { + async getEnabledFeatures(socket, serverType, supportedFeatures) { // const userSpace = getUserSpace(socket.userInfo.name) - switch (serverType) { - case 'server': - return { - list: featureVersion.list == supportedFeatures.list, - dislike: featureVersion.dislike == supportedFeatures.dislike, - } - case 'desktop-app': - default: - return { - list: featureVersion.list == supportedFeatures.list, - dislike: featureVersion.dislike == supportedFeatures.dislike, - } - } + const features: LX.Sync.EnabledFeatures = {} + switch (serverType) { + case 'server': + if (featureVersion.list == supportedFeatures.list) { + features.list = { skipSnapshot: false } + } + if (featureVersion.dislike == supportedFeatures.dislike) { + features.dislike = { skipSnapshot: false } + } + return features + case 'desktop-app': + default: + if (featureVersion.list == supportedFeatures.list) { + features.list = { skipSnapshot: false } + } + if (featureVersion.dislike == supportedFeatures.dislike) { + features.dislike = { skipSnapshot: false } + } + return features + } + }, } + +export default handler diff --git a/src/main/modules/sync/client/sync/index.ts b/src/main/modules/sync/client/sync/index.ts index a82a4c98..1dce9ae8 100644 --- a/src/main/modules/sync/client/sync/index.ts +++ b/src/main/modules/sync/client/sync/index.ts @@ -1,4 +1,4 @@ -import * as handler from './handler' +import handler from './handler' import { callObj as _callObj } from '../modules' export { modules } from '../modules' diff --git a/src/main/modules/sync/server/modules/dislike/sync/sync.ts b/src/main/modules/sync/server/modules/dislike/sync/sync.ts index 319b0eec..b76847f0 100644 --- a/src/main/modules/sync/server/modules/dislike/sync/sync.ts +++ b/src/main/modules/sync/server/modules/dislike/sync/sync.ts @@ -196,14 +196,16 @@ const handleMergeListDataFromSnapshot = async(socket: LX.Sync.Server.Socket, sna const syncDislike = async(socket: LX.Sync.Server.Socket) => { // socket.data.snapshotFilePath = getSnapshotFilePath(socket.keyInfo) // console.log(socket.keyInfo) - const user = getUserSpace(socket.userInfo.name) - const userCurrentDislikeInfoKey = await user.dislikeManage.getDeviceCurrentSnapshotKey(socket.keyInfo.clientId) - if (userCurrentDislikeInfoKey) { - const listData = await user.dislikeManage.snapshotDataManage.getSnapshot(userCurrentDislikeInfoKey) - if (listData) { - console.log('handleMergeDislikeDataFromSnapshot') - await handleMergeListDataFromSnapshot(socket, listData) - return + if (!(socket.feature.dislike as LX.Sync.DislikeConfig).skipSnapshot) { + const user = getUserSpace(socket.userInfo.name) + const userCurrentDislikeInfoKey = await user.dislikeManage.getDeviceCurrentSnapshotKey(socket.keyInfo.clientId) + if (userCurrentDislikeInfoKey) { + const listData = await user.dislikeManage.snapshotDataManage.getSnapshot(userCurrentDislikeInfoKey) + if (listData) { + console.log('handleMergeDislikeDataFromSnapshot') + await handleMergeListDataFromSnapshot(socket, listData) + return + } } } await handleSyncList(socket) diff --git a/src/main/modules/sync/server/modules/list/sync/sync.ts b/src/main/modules/sync/server/modules/list/sync/sync.ts index 6d962b4f..95053fa8 100644 --- a/src/main/modules/sync/server/modules/list/sync/sync.ts +++ b/src/main/modules/sync/server/modules/list/sync/sync.ts @@ -398,14 +398,16 @@ const handleMergeListDataFromSnapshot = async(socket: LX.Sync.Server.Socket, sna const syncList = async(socket: LX.Sync.Server.Socket) => { // socket.data.snapshotFilePath = getSnapshotFilePath(socket.keyInfo) // console.log(socket.keyInfo) - const user = getUserSpace(socket.userInfo.name) - const userCurrentListInfoKey = await user.listManage.getDeviceCurrentSnapshotKey(socket.keyInfo.clientId) - if (userCurrentListInfoKey) { - const listData = await user.listManage.snapshotDataManage.getSnapshot(userCurrentListInfoKey) - if (listData) { - console.log('handleMergeListDataFromSnapshot') - await handleMergeListDataFromSnapshot(socket, listData) - return + if (!(socket.feature.list as LX.Sync.ListConfig).skipSnapshot) { + const user = getUserSpace(socket.userInfo.name) + const userCurrentListInfoKey = await user.listManage.getDeviceCurrentSnapshotKey(socket.keyInfo.clientId) + if (userCurrentListInfoKey) { + const listData = await user.listManage.snapshotDataManage.getSnapshot(userCurrentListInfoKey) + if (listData) { + console.log('handleMergeListDataFromSnapshot') + await handleMergeListDataFromSnapshot(socket, listData) + return + } } } await handleSyncList(socket) diff --git a/src/main/modules/sync/server/server/sync/handler.ts b/src/main/modules/sync/server/server/sync/handler.ts index 05c136d7..d420f8a9 100644 --- a/src/main/modules/sync/server/server/sync/handler.ts +++ b/src/main/modules/sync/server/server/sync/handler.ts @@ -3,21 +3,19 @@ import { FeaturesList } from '../../../../../../common/constants_sync' import { modules } from '../../modules' +const handler: LX.Sync.ServerSyncHandlerActions = { + async onFeatureChanged(socket, feature) { + // const userSpace = getUserSpace(socket.userInfo.name) + const beforeFeature = socket.feature -export const onFeatureChanged = async(socket: LX.Sync.Server.Socket, feature: LX.Sync.EnabledFeatures) => { - // const userSpace = getUserSpace(socket.userInfo.name) - const beforeFeature = socket.feature - - for (const name of FeaturesList) { - if (feature[name] == beforeFeature[name]) continue - if (feature[name]) { - await modules[name].sync(socket).then(() => { - beforeFeature[name] = true - }).catch(_ => _) - } else { + for (const name of FeaturesList) { + const newStatus = feature[name] + if (newStatus == null) continue + beforeFeature[name] = feature[name] socket.moduleReadys[name] = false - beforeFeature[name] = false + if (feature[name]) await modules[name].sync(socket).catch(_ => _) } - } + }, } +export default handler diff --git a/src/main/modules/sync/server/server/sync/index.ts b/src/main/modules/sync/server/server/sync/index.ts index 363dd439..1471f76a 100644 --- a/src/main/modules/sync/server/server/sync/index.ts +++ b/src/main/modules/sync/server/server/sync/index.ts @@ -1,4 +1,4 @@ -import * as handler from './handler' +import handler from './handler' import { callObj as _callObj } from '../../modules' export { sync } from './sync' export { modules } from '../../modules' diff --git a/src/main/modules/sync/server/server/sync/sync.ts b/src/main/modules/sync/server/server/sync/sync.ts index 8ad581e7..629e7135 100644 --- a/src/main/modules/sync/server/server/sync/sync.ts +++ b/src/main/modules/sync/server/server/sync/sync.ts @@ -12,9 +12,8 @@ export const sync = async(socket: LX.Sync.Server.Socket) => { if (disconnected) throw new Error('disconnected') for (const moduleName of FeaturesList) { if (enabledFeatures[moduleName]) { - await modules[moduleName].sync(socket).then(() => { - socket.feature[moduleName] = true - }).catch(_ => _) + socket.feature[moduleName] = enabledFeatures[moduleName] + await modules[moduleName].sync(socket).catch(_ => _) } if (disconnected) throw new Error('disconnected') }