From 84f6f0df691b1cce68740023597efd993a188f9c Mon Sep 17 00:00:00 2001 From: Jonas Lochmann Date: Mon, 19 Sep 2022 02:00:00 +0200 Subject: [PATCH] Make websocket pushes more targeted --- src/function/child/add-device.ts | 12 +++++- src/function/child/set-primary-device.ts | 5 ++- src/function/device/remove-device.ts | 5 ++- src/function/device/report-device-removed.ts | 5 ++- src/function/parent/link-mail-address.ts | 5 ++- .../parent/recover-parent-password.ts | 5 ++- src/function/parent/sign-in-into-family.ts | 5 ++- src/function/purchase/add-purchase.ts | 5 ++- src/function/sync/apply-actions/cache.ts | 19 +++++++-- .../addinstalledapps.ts | 3 +- .../dispatch-app-logic-action/addusedtime.ts | 4 +- .../dispatch-app-logic-action/addusedtime2.ts | 8 ++-- .../finishkeyrequest.ts | 2 + .../dispatch-app-logic-action/forcesync.ts | 4 +- .../marktaskpendingaction.ts | 3 +- .../removeinstalledapps.ts | 3 +- .../replytokeyrequest.ts | 3 +- .../sendkeyrequest.ts | 2 +- .../signoutatdevice.ts | 4 +- .../trieddisablingdeviceadmin.ts | 4 +- .../updateappactivities.ts | 3 +- .../updatedevicestatus.ts | 2 +- .../updateinstalledapps.ts | 2 + .../uploaddevicepublickey.ts | 1 + .../childchangepassword.ts | 2 +- .../dispatch-child-action/childsignin.ts | 4 +- .../dispatch-parent-action/addcategoryapps.ts | 2 +- .../addcategorynetworkid.ts | 4 +- .../dispatch-parent-action/addu2fkey.ts | 2 +- .../dispatch-parent-action/adduser.ts | 2 +- .../changeparentpassword.ts | 4 +- .../dispatch-parent-action/createcategory.ts | 4 +- .../createtimelimitrule.ts | 4 +- .../dispatch-parent-action/deletecategory.ts | 4 +- .../deletechildtaskaction.ts | 3 +- .../deletetimelimitrule.ts | 4 +- .../ignoremanipulation.ts | 2 + .../incrementcategoryextratime.ts | 4 +- .../removecategoryapps.ts | 4 +- .../dispatch-parent-action/removeu2fkey.ts | 2 +- .../dispatch-parent-action/removeuser.ts | 4 +- .../dispatch-parent-action/renamechild.ts | 3 +- .../resetcategorynetworkids.ts | 4 +- .../reviewchildtaskaction.ts | 3 ++ .../setcategoryextratime.ts | 4 +- .../setcategoryforunassignedapps.ts | 4 +- .../setchildpassword.ts | 2 +- .../setconsiderrebootmanipulation.ts | 6 ++- .../setdevicedefaultuser.ts | 6 ++- .../setdevicedefaultusertimeout.ts | 4 +- .../dispatch-parent-action/setdeviceuser.ts | 6 ++- .../dispatch-parent-action/setkeepsignedin.ts | 6 ++- .../setparentcategory.ts | 4 +- .../setrelaxprimarydevice.ts | 4 +- .../setsenddeviceconnected.ts | 4 +- .../setuserdisablelmitsuntil.ts | 4 +- .../dispatch-parent-action/setusertimezone.ts | 4 +- .../updatecategorybatterylimit.ts | 4 +- .../updatecategoryblockallnotifications.ts | 4 +- .../updatecategoryblockedtimes.ts | 4 +- .../updatecategorydisablelimits.ts | 4 +- .../updatecategoryflags.ts | 3 +- .../updatecategorysorting.ts | 4 +- .../updatecategorytemporarilyblocked.ts | 4 +- .../updatecategorytimewarnings.ts | 2 +- .../updatecategorytitle.ts | 4 +- .../updatechildtaskaction.ts | 3 +- .../updatedevicename.ts | 4 +- .../updateenableactivitylevelblocking.ts | 5 ++- .../updatenetworktimeverification.ts | 6 ++- .../updateparentnotificationflags.ts | 3 +- .../updatetimelimitrule.ts | 4 +- .../dispatch-parent-action/updateuserflags.ts | 3 +- .../updateuserlimitlogincategory.ts | 3 +- .../updateuserlimitloginpreblockduration.ts | 3 +- src/function/sync/apply-actions/index.ts | 15 ++++--- src/function/websocket/index.ts | 40 +++++++++++-------- src/worker/delete-deprecated-purchases.ts | 5 ++- 78 files changed, 224 insertions(+), 140 deletions(-) diff --git a/src/function/child/add-device.ts b/src/function/child/add-device.ts index a377854..3c6d6de 100644 --- a/src/function/child/add-device.ts +++ b/src/function/child/add-device.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -65,7 +65,15 @@ export const addChildDevice = async ({ database, websocket, request }: { transaction }) - await notifyClientsAboutChangesDelayed({ familyId, websocket, database, isImportant: true, sourceDeviceId: deviceId, transaction }) + await notifyClientsAboutChangesDelayed({ + familyId, + websocket, + database, + generalLevel: 1, + targetedLevels: new Map(), + sourceDeviceId: deviceId, + transaction + }) return { deviceId, diff --git a/src/function/child/set-primary-device.ts b/src/function/child/set-primary-device.ts index 5c0ede8..4fb6d1a 100644 --- a/src/function/child/set-primary-device.ts +++ b/src/function/child/set-primary-device.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -164,7 +164,8 @@ export const setPrimaryDevice = async ({ database, websocket, deviceAuthToken, c sourceDeviceId: deviceEntry.deviceId, websocket, database, - isImportant: false, // the source device knows it already + generalLevel: 1, // the source device knows it already + targetedLevels: new Map(), transaction }) diff --git a/src/function/device/remove-device.ts b/src/function/device/remove-device.ts index c4fad70..840cbe3 100644 --- a/src/function/device/remove-device.ts +++ b/src/function/device/remove-device.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -104,7 +104,8 @@ export async function removeDevice ({ database, familyId, deviceId, websocket, t websocket, familyId, sourceDeviceId: null, - isImportant: false, + generalLevel: 1, + targetedLevels: new Map(), transaction }) diff --git a/src/function/device/report-device-removed.ts b/src/function/device/report-device-removed.ts index bf62b36..bfda3a7 100644 --- a/src/function/device/report-device-removed.ts +++ b/src/function/device/report-device-removed.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -65,7 +65,8 @@ export async function reportDeviceRemoved ({ database, deviceAuthToken, websocke websocket, familyId: deviceEntry.familyId, sourceDeviceId: null, - isImportant: false, + generalLevel: 1, + targetedLevels: new Map(), transaction }) diff --git a/src/function/parent/link-mail-address.ts b/src/function/parent/link-mail-address.ts index 7390cbb..4d0661f 100644 --- a/src/function/parent/link-mail-address.ts +++ b/src/function/parent/link-mail-address.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -101,9 +101,10 @@ export const linkMailAddress = async ({ mailAuthToken, deviceAuthToken, parentUs await notifyClientsAboutChangesDelayed({ familyId, sourceDeviceId: null, + generalLevel: 1, + targetedLevels: new Map(), database, websocket, - isImportant: true, transaction }) }) diff --git a/src/function/parent/recover-parent-password.ts b/src/function/parent/recover-parent-password.ts index 240f613..056234a 100644 --- a/src/function/parent/recover-parent-password.ts +++ b/src/function/parent/recover-parent-password.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -68,7 +68,8 @@ export const recoverParentPassword = async ({ database, websocket, password, mai database, familyId: userEntry.familyId, websocket, - isImportant: true, + generalLevel: 2, + targetedLevels: new Map(), sourceDeviceId: null, transaction }) diff --git a/src/function/parent/sign-in-into-family.ts b/src/function/parent/sign-in-into-family.ts index 9d8073a..8a355ca 100644 --- a/src/function/parent/sign-in-into-family.ts +++ b/src/function/parent/sign-in-into-family.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -80,7 +80,8 @@ export const signInIntoFamily = async ({ database, mailAuthToken, newDeviceInfo, familyId: userEntry.familyId, websocket, database, - isImportant: true, + generalLevel: 1, + targetedLevels: new Map(), sourceDeviceId: deviceId, transaction }) diff --git a/src/function/purchase/add-purchase.ts b/src/function/purchase/add-purchase.ts index 959e3ca..ed7e8c5 100644 --- a/src/function/purchase/add-purchase.ts +++ b/src/function/purchase/add-purchase.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -83,7 +83,8 @@ export const addPurchase = async ({ database, familyId, type, transactionId, web sourceDeviceId: null, database, websocket, - isImportant: true, + generalLevel: 2, + targetedLevels: new Map(), transaction }) } diff --git a/src/function/sync/apply-actions/cache.ts b/src/function/sync/apply-actions/cache.ts index bf2aefd..f756a55 100644 --- a/src/function/sync/apply-actions/cache.ts +++ b/src/function/sync/apply-actions/cache.ts @@ -32,7 +32,7 @@ export class Cache { transaction: Sequelize.Transaction readonly database: Database readonly connectedDevicesManager: VisibleConnectedDevicesManager - private shouldTriggerFullSync = false + private requireSenderDoFullSync = false categoriesWithModifiedApps = new Set() categoriesWithModifiedBaseData = new Set() @@ -46,7 +46,8 @@ export class Cache { invalidiateUserList = false invalidiateDeviceList = false invalidateU2fList = false - areChangesImportant = false + triggeredSyncLevel: 0 | 1 | 2 = 0 // 0 = no, 1 = unimportant, 2 = important + targetedTriggeredSyncLevels = new Map() constructor ({ familyId, deviceId, hasFullVersion, database, transaction, connectedDevicesManager }: { familyId: string @@ -64,6 +65,16 @@ export class Cache { this.connectedDevicesManager = connectedDevicesManager } + incrementTriggeredSyncLevel(newLevel: 1 | 2) { + if (newLevel > this.triggeredSyncLevel) this.triggeredSyncLevel = newLevel + } + + incrementTargetedTriggeredSyncLevel(deviceId: string, newLevel: 1 | 2) { + const oldLevel = this.targetedTriggeredSyncLevels.get(deviceId) || 0 + + if (newLevel > oldLevel) this.targetedTriggeredSyncLevels.set(deviceId, newLevel) + } + async subtransaction (callback: () => Promise): Promise { const oldTransaction = this.transaction @@ -144,8 +155,8 @@ export class Cache { return !!userEntry }) - shouldDoFullSync = () => this.shouldTriggerFullSync - requireFullSync: () => void = () => this.shouldTriggerFullSync = true + isSenderDoFullSyncTrue = () => this.requireSenderDoFullSync + requireSenderFullSync: () => void = () => this.requireSenderDoFullSync = true async saveModifiedVersionNumbers () { const { database, transaction, familyId } = this diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/addinstalledapps.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/addinstalledapps.ts index 013b27e..708c9a6 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/addinstalledapps.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/addinstalledapps.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -59,4 +59,5 @@ export async function dispatchAddInstalledApps ({ deviceId, action, cache }: { ) cache.devicesWithModifiedInstalledApps.add(deviceId) + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime.ts index 1a5a5c2..3f3be9f 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -156,4 +156,6 @@ export async function dispatchAddUsedTime ({ action, cache }: { }) } } + + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime2.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime2.ts index b0d9f24..d3be3b6 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime2.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/addusedtime2.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -72,7 +72,7 @@ export async function dispatchAddUsedTimeVersion2 ({ deviceId, action, cache, ev // verify that the category exists if (!categoryEntryUnsafe) { eventHandler.countEvent('add used time category to add time for not found') - cache.requireFullSync() + cache.requireSenderFullSync() continue } @@ -247,9 +247,11 @@ export async function dispatchAddUsedTimeVersion2 ({ deviceId, action, cache, ev // As it should occur not too often, a full sync should be no problem. // To keep an eye on it, it is counted. - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) eventHandler.countEvent('add used time for a different user than the current user of the device') } } + + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/finishkeyrequest.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/finishkeyrequest.ts index 1bad5c4..74b3129 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/finishkeyrequest.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/finishkeyrequest.ts @@ -31,4 +31,6 @@ export async function dispatchFinishKeyRequestAction ({ action, cache, deviceId }, transaction: cache.transaction }) + + // no sync triggered } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/forcesync.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/forcesync.ts index 00ea17b..ada5dc1 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/forcesync.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/forcesync.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -23,5 +23,5 @@ export async function dispatchForceSyncAction ({ cache }: { action: ForceSyncAction cache: Cache }) { - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/marktaskpendingaction.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/marktaskpendingaction.ts index a5d7ef8..5533589 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/marktaskpendingaction.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/marktaskpendingaction.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -99,6 +99,7 @@ export async function dispatchMarkTaskPendingAction ({ action, cache, deviceId } }) cache.categoriesWithModifiedTasks.add(taskInfo.categoryId) + cache.incrementTriggeredSyncLevel(1) // parents are not faster reachable await sendTaskDoneMails({ database: cache.database, diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/removeinstalledapps.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/removeinstalledapps.ts index 03768a3..aa28b34 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/removeinstalledapps.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/removeinstalledapps.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -36,4 +36,5 @@ export async function dispatchRemoveInstalledApps ({ deviceId, action, cache }: }) cache.devicesWithModifiedInstalledApps.add(deviceId) + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/replytokeyrequest.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/replytokeyrequest.ts index a9c49c4..33f522f 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/replytokeyrequest.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/replytokeyrequest.ts @@ -105,6 +105,5 @@ export async function dispatchReplyToKeyRequestAction ({ deviceId, action, cache transaction: cache.transaction }) - // there is no way (yet) to inform the specific device only - cache.areChangesImportant = true + cache.incrementTargetedTriggeredSyncLevel(request.senderDeviceId, 2) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/sendkeyrequest.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/sendkeyrequest.ts index 2907ab5..a79b1f2 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/sendkeyrequest.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/sendkeyrequest.ts @@ -72,5 +72,5 @@ export async function dispatchSendKeyRequestAction ({ action, cache, deviceId }: transaction: cache.transaction }) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/signoutatdevice.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/signoutatdevice.ts index a15684c..d300581 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/signoutatdevice.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/signoutatdevice.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -57,4 +57,6 @@ export async function dispatchSignOutAtDevice ({ deviceId, cache }: { }) }) } + + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/trieddisablingdeviceadmin.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/trieddisablingdeviceadmin.ts index a376abd..dfde422 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/trieddisablingdeviceadmin.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/trieddisablingdeviceadmin.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -46,7 +46,7 @@ export async function dispatchTriedDisablingDeviceAdmin ({ deviceId, cache }: { await deviceEntry.save({ transaction: cache.transaction }) cache.invalidiateDeviceList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(1) } if (!hadManipulationBefore) { diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/updateappactivities.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/updateappactivities.ts index 82ea302..55cbfb1 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/updateappactivities.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/updateappactivities.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -95,4 +95,5 @@ export async function dispatchUpdateAppActivities ({ deviceId, action, cache }: } cache.devicesWithModifiedInstalledApps.add(deviceId) + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/updatedevicestatus.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/updatedevicestatus.ts index e2d4a06..1f9a601 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/updatedevicestatus.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/updatedevicestatus.ts @@ -177,5 +177,5 @@ export async function dispatchUpdateDeviceStatus ({ deviceId, action, cache }: { } cache.invalidiateDeviceList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts index fce5d06..6fac11f 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts @@ -54,4 +54,6 @@ export async function dispatchUpdateInstalledApps ({ deviceId, action, cache }: cache.devicesWithModifiedInstalledApps.add(deviceId) } + + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/uploaddevicepublickey.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/uploaddevicepublickey.ts index 0650328..0ac9b90 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/uploaddevicepublickey.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/uploaddevicepublickey.ts @@ -42,6 +42,7 @@ export async function dispatchUploadDevicePublicKeyAction ({ deviceId, action, c await deviceEntry.save({ transaction: cache.transaction }) cache.invalidiateDeviceList = true + cache.incrementTriggeredSyncLevel(2) } else if (deviceEntry.publicKey.equals(action.key)) { eventHandler.countEvent('dispatchUploadDevicePublicKeyAction:duplicate action') } else { diff --git a/src/function/sync/apply-actions/dispatch-child-action/childchangepassword.ts b/src/function/sync/apply-actions/dispatch-child-action/childchangepassword.ts index 6946a98..374d796 100644 --- a/src/function/sync/apply-actions/dispatch-child-action/childchangepassword.ts +++ b/src/function/sync/apply-actions/dispatch-child-action/childchangepassword.ts @@ -52,5 +52,5 @@ export const dispatchChildChangePassword = async ({ action, childUserId, cache } } cache.invalidiateUserList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-child-action/childsignin.ts b/src/function/sync/apply-actions/dispatch-child-action/childsignin.ts index 9699fb2..1704572 100644 --- a/src/function/sync/apply-actions/dispatch-child-action/childsignin.ts +++ b/src/function/sync/apply-actions/dispatch-child-action/childsignin.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -71,4 +71,6 @@ export const dispatchChildSignIn = async ({ deviceId, childUserId, cache }: { cache.invalidiateUserList = true } + + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/addcategoryapps.ts b/src/function/sync/apply-actions/dispatch-parent-action/addcategoryapps.ts index a588681..e6b8b72 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/addcategoryapps.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/addcategoryapps.ts @@ -189,5 +189,5 @@ export async function dispatchAddCategoryApps ({ action, cache, fromChildSelfLim oldCategories.forEach((categoryId) => cache.categoriesWithModifiedApps.add(categoryId)) cache.categoriesWithModifiedApps.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/addcategorynetworkid.ts b/src/function/sync/apply-actions/dispatch-parent-action/addcategorynetworkid.ts index f58b31d..4425600 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/addcategorynetworkid.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/addcategorynetworkid.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -75,5 +75,5 @@ export async function dispatchAddCategoryNetworkId ({ action, cache }: { }, { transaction: cache.transaction }) cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/addu2fkey.ts b/src/function/sync/apply-actions/dispatch-parent-action/addu2fkey.ts index 7ce3d42..5aa752a 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/addu2fkey.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/addu2fkey.ts @@ -52,5 +52,5 @@ export async function dispatchAddU2f ({ action, cache, parentUserId, authenticat }, { transaction: cache.transaction }) cache.invalidateU2fList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/adduser.ts b/src/function/sync/apply-actions/dispatch-parent-action/adduser.ts index be70581..995a3fa 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/adduser.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/adduser.ts @@ -48,7 +48,7 @@ export async function dispatchAddUser ({ action, cache }: { }, { transaction: cache.transaction }) cache.invalidiateUserList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(1) cache.doesUserExist.cache.set(action.userId, true) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/changeparentpassword.ts b/src/function/sync/apply-actions/dispatch-parent-action/changeparentpassword.ts index d13e48a..b419ab9 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/changeparentpassword.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/changeparentpassword.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -59,5 +59,5 @@ export async function dispatchChangeParentPassword ({ action, cache }: { } cache.invalidiateUserList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/createcategory.ts b/src/function/sync/apply-actions/dispatch-parent-action/createcategory.ts index a362e68..8acf060 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/createcategory.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/createcategory.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -86,5 +86,5 @@ export async function dispatchCreateCategory ({ action, cache, fromChildSelfLimi // update the cache cache.doesCategoryExist.cache.set(action.categoryId, true) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/createtimelimitrule.ts b/src/function/sync/apply-actions/dispatch-parent-action/createtimelimitrule.ts index 0d3bb5f..8e98ceb 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/createtimelimitrule.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/createtimelimitrule.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -59,5 +59,5 @@ export async function dispatchCreateTimeLimitRule ({ action, cache, fromChildSel }, { transaction: cache.transaction }) cache.categoriesWithModifiedTimeLimitRules.add(action.rule.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/deletecategory.ts b/src/function/sync/apply-actions/dispatch-parent-action/deletecategory.ts index b9a2a7b..cafce98 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/deletecategory.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/deletecategory.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -80,7 +80,7 @@ export async function dispatchDeleteCategory ({ action, cache }: { // update the cache cache.doesCategoryExist.cache.set(action.categoryId, false) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) if (affectedUserRows !== 0) { cache.invalidiateUserList = true diff --git a/src/function/sync/apply-actions/dispatch-parent-action/deletechildtaskaction.ts b/src/function/sync/apply-actions/dispatch-parent-action/deletechildtaskaction.ts index 0ec5f38..f8f5077 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/deletechildtaskaction.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/deletechildtaskaction.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -45,4 +45,5 @@ export async function dispatchDeleteChildTaskAction ({ action, cache }: { }) cache.categoriesWithModifiedTasks.add(taskInfo.categoryId) + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/deletetimelimitrule.ts b/src/function/sync/apply-actions/dispatch-parent-action/deletetimelimitrule.ts index e685955..9419b4a 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/deletetimelimitrule.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/deletetimelimitrule.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -38,5 +38,5 @@ export async function dispatchDeleteTimeLimitRule ({ action, cache }: { await ruleEntry.destroy({ transaction: cache.transaction }) cache.categoriesWithModifiedTimeLimitRules.add(ruleEntry.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/ignoremanipulation.ts b/src/function/sync/apply-actions/dispatch-parent-action/ignoremanipulation.ts index b943935..e592bca 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/ignoremanipulation.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/ignoremanipulation.ts @@ -87,4 +87,6 @@ export async function dispatchIgnoreManipulation ({ action, cache }: { await deviceEntry.save({ transaction: cache.transaction }) cache.invalidiateDeviceList = true + cache.incrementTriggeredSyncLevel(1) + cache.incrementTargetedTriggeredSyncLevel(action.deviceId, 2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/incrementcategoryextratime.ts b/src/function/sync/apply-actions/dispatch-parent-action/incrementcategoryextratime.ts index 17ae903..359260e 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/incrementcategoryextratime.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/incrementcategoryextratime.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -41,7 +41,7 @@ export async function dispatchIncrementCategoryExtraTime ({ action, cache }: { await category.save({ transaction: cache.transaction }) cache.categoriesWithModifiedBaseData.add(category.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } const categoryEntry = await cache.database.category.findOne({ diff --git a/src/function/sync/apply-actions/dispatch-parent-action/removecategoryapps.ts b/src/function/sync/apply-actions/dispatch-parent-action/removecategoryapps.ts index d5f0f31..91d2d4f 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/removecategoryapps.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/removecategoryapps.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -42,5 +42,5 @@ export async function dispatchRemoveCategoryApps ({ action, cache }: { } cache.categoriesWithModifiedApps.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/removeu2fkey.ts b/src/function/sync/apply-actions/dispatch-parent-action/removeu2fkey.ts index 1e85f96..964090d 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/removeu2fkey.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/removeu2fkey.ts @@ -43,5 +43,5 @@ export async function dispatchRemoveU2f ({ action, cache, parentUserId, authenti }) cache.invalidateU2fList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/removeuser.ts b/src/function/sync/apply-actions/dispatch-parent-action/removeuser.ts index ad794b9..1e09eb5 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/removeuser.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/removeuser.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -178,7 +178,7 @@ export async function dispatchRemoveUser ({ action, cache, parentUserId }: { await user.destroy({ transaction: cache.transaction }) cache.invalidiateUserList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) cache.doesUserExist.cache.set(action.userId, false) cache.getSecondPasswordHashOfParent.cache.delete(action.userId) diff --git a/src/function/sync/apply-actions/dispatch-parent-action/renamechild.ts b/src/function/sync/apply-actions/dispatch-parent-action/renamechild.ts index 51f9560..95689b7 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/renamechild.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/renamechild.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -49,4 +49,5 @@ export async function dispatchRenameChild ({ action, cache }: { cache.invalidiateUserList = true cache.doesUserExist.cache.set(action.childId, false) + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/resetcategorynetworkids.ts b/src/function/sync/apply-actions/dispatch-parent-action/resetcategorynetworkids.ts index d71d730..aeaf013 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/resetcategorynetworkids.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/resetcategorynetworkids.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -45,5 +45,5 @@ export async function dispatchResetCategoryNetworkIds ({ action, cache }: { }) cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/reviewchildtaskaction.ts b/src/function/sync/apply-actions/dispatch-parent-action/reviewchildtaskaction.ts index 30b382b..0b6adf3 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/reviewchildtaskaction.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/reviewchildtaskaction.ts @@ -98,6 +98,8 @@ export async function dispatchReviewChildTaskAction ({ action, cache }: { }, transaction: cache.transaction }) + + cache.incrementTriggeredSyncLevel(2) } else { await cache.database.childTask.update({ pendingRequest: 0 @@ -111,4 +113,5 @@ export async function dispatchReviewChildTaskAction ({ action, cache }: { } cache.categoriesWithModifiedTasks.add(taskInfo.categoryId) + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setcategoryextratime.ts b/src/function/sync/apply-actions/dispatch-parent-action/setcategoryextratime.ts index 06c1b39..6905588 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setcategoryextratime.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setcategoryextratime.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -52,5 +52,5 @@ export async function dispatchSetCategoryExtraTime ({ action, cache }: { }) cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setcategoryforunassignedapps.ts b/src/function/sync/apply-actions/dispatch-parent-action/setcategoryforunassignedapps.ts index d21d9a1..21afdbf 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setcategoryforunassignedapps.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setcategoryforunassignedapps.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -78,5 +78,5 @@ export async function dispatchSetCategoryForUnassignedApps ({ action, cache }: { }) cache.invalidiateUserList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setchildpassword.ts b/src/function/sync/apply-actions/dispatch-parent-action/setchildpassword.ts index f7fba42..de63d88 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setchildpassword.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setchildpassword.ts @@ -51,5 +51,5 @@ export async function dispatchSetChildPassword ({ action, cache }: { } cache.invalidiateUserList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setconsiderrebootmanipulation.ts b/src/function/sync/apply-actions/dispatch-parent-action/setconsiderrebootmanipulation.ts index 398d0d1..19b4ae7 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setconsiderrebootmanipulation.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setconsiderrebootmanipulation.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -46,5 +46,7 @@ export async function dispatchSetConsiderRebootManipulation ({ action, cache }: }) cache.invalidiateDeviceList = true - cache.areChangesImportant = true + + cache.incrementTriggeredSyncLevel(1) + cache.incrementTargetedTriggeredSyncLevel(action.deviceId, 2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setdevicedefaultuser.ts b/src/function/sync/apply-actions/dispatch-parent-action/setdevicedefaultuser.ts index dea14b8..e1478bb 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setdevicedefaultuser.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setdevicedefaultuser.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -54,5 +54,7 @@ export async function dispatchSetDeviceDefaultUser ({ action, cache }: { }) cache.invalidiateDeviceList = true - cache.areChangesImportant = true + + cache.incrementTriggeredSyncLevel(1) + cache.incrementTargetedTriggeredSyncLevel(action.deviceId, 2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setdevicedefaultusertimeout.ts b/src/function/sync/apply-actions/dispatch-parent-action/setdevicedefaultusertimeout.ts index 645a56d..d7c43f3 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setdevicedefaultusertimeout.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setdevicedefaultusertimeout.ts @@ -46,5 +46,7 @@ export async function dispatchSetDeviceDefaultUserTimeout ({ action, cache }: { }) cache.invalidiateDeviceList = true - cache.areChangesImportant = true + + cache.incrementTriggeredSyncLevel(1) + cache.incrementTargetedTriggeredSyncLevel(action.deviceId, 2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setdeviceuser.ts b/src/function/sync/apply-actions/dispatch-parent-action/setdeviceuser.ts index 3edf454..e365efd 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setdeviceuser.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setdeviceuser.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -55,5 +55,7 @@ export async function dispatchSetDeviceUser ({ action, cache }: { }) cache.invalidiateDeviceList = true - cache.areChangesImportant = true + + cache.incrementTriggeredSyncLevel(1) + cache.incrementTargetedTriggeredSyncLevel(action.deviceId, 2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setkeepsignedin.ts b/src/function/sync/apply-actions/dispatch-parent-action/setkeepsignedin.ts index 4a91c6d..319b01a 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setkeepsignedin.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setkeepsignedin.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -63,6 +63,8 @@ export async function dispatchSetKeepSignedIn ({ action, cache, parentUserId }: if (affectedRows !== 0) { cache.invalidiateDeviceList = true - cache.areChangesImportant = true + + cache.incrementTriggeredSyncLevel(1) + cache.incrementTargetedTriggeredSyncLevel(action.deviceId, 2) } } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setparentcategory.ts b/src/function/sync/apply-actions/dispatch-parent-action/setparentcategory.ts index b6cbc11..1f5e345 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setparentcategory.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setparentcategory.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -118,5 +118,5 @@ export async function dispatchSetParentCategory ({ action, cache, fromChildSelfL }) cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setrelaxprimarydevice.ts b/src/function/sync/apply-actions/dispatch-parent-action/setrelaxprimarydevice.ts index a10a7c4..34b462e 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setrelaxprimarydevice.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setrelaxprimarydevice.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -48,5 +48,5 @@ export async function dispatchSetRelaxPrimaryDevice ({ action, cache }: { }) cache.invalidiateUserList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setsenddeviceconnected.ts b/src/function/sync/apply-actions/dispatch-parent-action/setsenddeviceconnected.ts index 04a4cac..9bb7aa7 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setsenddeviceconnected.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setsenddeviceconnected.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -42,4 +42,6 @@ export async function dispatchSetSendDeviceConnected ({ action, cache, sourceDev cache.devicesWithModifiedShowDeviceConnected.set(action.deviceId, action.enable) cache.invalidiateDeviceList = true + + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setuserdisablelmitsuntil.ts b/src/function/sync/apply-actions/dispatch-parent-action/setuserdisablelmitsuntil.ts index db51649..ede6514 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setuserdisablelmitsuntil.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setuserdisablelmitsuntil.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -55,5 +55,5 @@ export async function dispatchUserSetDisableLimitsUntil ({ action, cache }: { }) cache.invalidiateUserList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/setusertimezone.ts b/src/function/sync/apply-actions/dispatch-parent-action/setusertimezone.ts index c74da7c..c68787f 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setusertimezone.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setusertimezone.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -46,5 +46,5 @@ export async function dispatchSetUserTimezone ({ action, cache }: { }) cache.invalidiateUserList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorybatterylimit.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorybatterylimit.ts index b1329b6..24abf1c 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorybatterylimit.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorybatterylimit.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -46,5 +46,5 @@ export async function dispatchUpdateCategoryBatteryLimit ({ action, cache }: { await categoryEntry.save({ transaction: cache.transaction }) cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockallnotifications.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockallnotifications.ts index 51fe5e8..4554a62 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockallnotifications.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockallnotifications.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -72,6 +72,6 @@ export async function dispatchUpdateCategoryBlockAllNotifications ({ action, cac if (affectedRows !== 0) { cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockedtimes.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockedtimes.ts index 10f7f39..c51a7a4 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockedtimes.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockedtimes.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -70,5 +70,5 @@ export async function dispatchUpdateCategoryBlockedTimes ({ action, cache, fromC }) cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorydisablelimits.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorydisablelimits.ts index 5c45987..b7f917a 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorydisablelimits.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorydisablelimits.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -71,6 +71,6 @@ export async function dispatchUpdateCategoryDisableLimits ({ action, cache, from if (affectedRows !== 0) { cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryflags.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryflags.ts index 3120704..fb2a456 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryflags.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryflags.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -49,4 +49,5 @@ export async function dispatchUpdateCategoryFlagsAction ({ action, cache }: { await categoryEntry.save({ transaction: cache.transaction }) cache.categoriesWithModifiedBaseData.add(action.categoryId) + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorysorting.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorysorting.ts index ec4d279..2b5369c 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorysorting.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorysorting.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -42,4 +42,6 @@ export async function dispatchUpdateCategorySorting ({ action, cache }: { cache.categoriesWithModifiedBaseData.add(categoryId) } + + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytemporarilyblocked.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytemporarilyblocked.ts index 1af30d8..9672cfb 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytemporarilyblocked.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytemporarilyblocked.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -80,6 +80,6 @@ export async function dispatchUpdateCategoryTemporarilyBlocked ({ action, cache, if (affectedRows !== 0) { cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytimewarnings.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytimewarnings.ts index 21045b7..1c936e7 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytimewarnings.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytimewarnings.ts @@ -66,5 +66,5 @@ export async function dispatchUpdateCategoryTimeWarnings ({ action, cache }: { } cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytitle.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytitle.ts index d575031..d1e42d0 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytitle.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytitle.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -47,6 +47,6 @@ export async function dispatchUpdateCategoryTitle ({ action, cache }: { if (affectedRows !== 0) { cache.categoriesWithModifiedBaseData.add(action.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatechildtaskaction.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatechildtaskaction.ts index 2b2a3d5..f416140 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatechildtaskaction.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatechildtaskaction.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -84,5 +84,6 @@ export async function dispatchUpdateChildTaskAction ({ action, cache }: { cache.categoriesWithModifiedTasks.add(taskInfo.categoryId) cache.categoriesWithModifiedTasks.add(action.categoryId) + cache.incrementTriggeredSyncLevel(1) } } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatedevicename.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatedevicename.ts index c052861..bd607f1 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatedevicename.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatedevicename.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -47,6 +47,6 @@ export async function dispatchUpdateDeviceName ({ action, cache }: { if (affectedRows !== 0) { cache.invalidiateDeviceList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(1) } } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updateenableactivitylevelblocking.ts b/src/function/sync/apply-actions/dispatch-parent-action/updateenableactivitylevelblocking.ts index 4050c1b..7f451cc 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updateenableactivitylevelblocking.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updateenableactivitylevelblocking.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -46,5 +46,6 @@ export async function dispatchUpdateEnableActivityLevelBlocking ({ action, cache }) cache.invalidiateDeviceList = true - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(1) + cache.incrementTargetedTriggeredSyncLevel(action.deviceId, 2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatenetworktimeverification.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatenetworktimeverification.ts index eb8475a..73f558c 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatenetworktimeverification.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatenetworktimeverification.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -46,5 +46,7 @@ export async function dispatchUpdateNetworkTimeVerification ({ action, cache }: }) cache.invalidiateDeviceList = true - cache.areChangesImportant = true + + cache.incrementTriggeredSyncLevel(1) + cache.incrementTargetedTriggeredSyncLevel(action.deviceId, 1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updateparentnotificationflags.ts b/src/function/sync/apply-actions/dispatch-parent-action/updateparentnotificationflags.ts index 2465de7..90ff047 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updateparentnotificationflags.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updateparentnotificationflags.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -45,4 +45,5 @@ export async function dispatchUpdateParentNotificationFlags ({ action, cache }: await parentEntry.save({ transaction: cache.transaction }) cache.invalidiateUserList = true + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updatetimelimitrule.ts b/src/function/sync/apply-actions/dispatch-parent-action/updatetimelimitrule.ts index a96b86a..dfe26e9 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatetimelimitrule.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatetimelimitrule.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -47,5 +47,5 @@ export async function dispatchUpdateTimelimitRule ({ action, cache }: { await ruleEntry.save({ transaction: cache.transaction }) cache.categoriesWithModifiedTimeLimitRules.add(ruleEntry.categoryId) - cache.areChangesImportant = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updateuserflags.ts b/src/function/sync/apply-actions/dispatch-parent-action/updateuserflags.ts index 4e40900..c8127ec 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updateuserflags.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updateuserflags.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -49,4 +49,5 @@ export async function dispatchUpdateUserFlagsAction ({ action, cache }: { await userEntry.save({ transaction: cache.transaction }) cache.invalidiateUserList = true + cache.incrementTriggeredSyncLevel(1) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updateuserlimitlogincategory.ts b/src/function/sync/apply-actions/dispatch-parent-action/updateuserlimitlogincategory.ts index ba3e47e..be1d88c 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updateuserlimitlogincategory.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updateuserlimitlogincategory.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -76,4 +76,5 @@ export async function dispatchUpdateUserLimitLoginCategoryAction ({ action, cach } cache.invalidiateUserList = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/dispatch-parent-action/updateuserlimitloginpreblockduration.ts b/src/function/sync/apply-actions/dispatch-parent-action/updateuserlimitloginpreblockduration.ts index d75635f..4eed512 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updateuserlimitloginpreblockduration.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updateuserlimitloginpreblockduration.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -69,4 +69,5 @@ export async function dispatchUpdateUserLimitPreBlockDuration ({ action, cache, }) cache.invalidiateUserList = true + cache.incrementTriggeredSyncLevel(2) } diff --git a/src/function/sync/apply-actions/index.ts b/src/function/sync/apply-actions/index.ts index a425de9..67949a9 100644 --- a/src/function/sync/apply-actions/index.ts +++ b/src/function/sync/apply-actions/index.ts @@ -124,7 +124,7 @@ export const applyActionsFromDevice = async ({ database, request, websocket, con eventHandler.countEvent('applyActionsFromDevice errorDispatchingAction:other:' + stack) } - cache.requireFullSync() + cache.requireSenderFullSync() } } @@ -148,20 +148,25 @@ export const applyActionsFromDevice = async ({ database, request, websocket, con await notifyClientsAboutChangesDelayed({ familyId: baseInfo.familyId, sourceDeviceId: baseInfo.deviceId, - isImportant: cache.areChangesImportant, websocket, database, - transaction + transaction, + generalLevel: cache.triggeredSyncLevel, + targetedLevels: cache.targetedTriggeredSyncLevels }) - if (cache.areChangesImportant) { + if (cache.triggeredSyncLevel === 2) { transaction.afterCommit(() => { eventHandler.countEvent('applyActionsFromDevice areChangesImportant') }) + } else if ([...cache.targetedTriggeredSyncLevels.entries()].some((entry) => entry[1] === 2)) { + transaction.afterCommit(() => { + eventHandler.countEvent('applyActionsFromDevice areChangesImportantTargeted') + }) } return { - shouldDoFullSync: cache.shouldDoFullSync() + shouldDoFullSync: cache.isSenderDoFullSyncTrue() } }) } diff --git a/src/function/websocket/index.ts b/src/function/websocket/index.ts index de33f37..8564103 100644 --- a/src/function/websocket/index.ts +++ b/src/function/websocket/index.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2020 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -15,39 +15,45 @@ * along with this program. If not, see . */ -import * as Sequelize from 'sequelize' import { Database, Transaction } from '../../database' import { WebsocketApi } from '../../websocket' -export const notifyClientsAboutChangesDelayed = async ({ familyId, sourceDeviceId, database, websocket, isImportant, transaction }: { +export const notifyClientsAboutChangesDelayed = async ({ + familyId, sourceDeviceId, database, + websocket, transaction, generalLevel, targetedLevels +}: { familyId: string sourceDeviceId: string | null // this device will not get an push database: Database websocket: WebsocketApi - isImportant: boolean transaction: Transaction + generalLevel: 0 | 1 | 2 + targetedLevels: Map }) => { const relatedDeviceEntries = (await database.device.findAll({ - where: sourceDeviceId ? { - familyId, - deviceId: { - [Sequelize.Op.not]: sourceDeviceId - } - } : { + where: { familyId }, - attributes: ['deviceAuthToken'], + attributes: ['deviceId', 'deviceAuthToken'], transaction })).map((item) => ({ + deviceId: item.deviceId, deviceAuthToken: item.deviceAuthToken })) transaction.afterCommit(() => { - relatedDeviceEntries.forEach((item) => { - websocket.triggerSyncByDeviceAuthToken({ - deviceAuthToken: item.deviceAuthToken, - isImportant - }) - }) + for (const deviceEntry of relatedDeviceEntries) { + if (deviceEntry.deviceId === sourceDeviceId) continue + + const targetedLevel = targetedLevels.get(deviceEntry.deviceId) ?? 0 + const effectiveLevel = Math.max(targetedLevel, generalLevel) + + if (effectiveLevel > 0) { + websocket.triggerSyncByDeviceAuthToken({ + deviceAuthToken: deviceEntry.deviceAuthToken, + isImportant: effectiveLevel === 2 + }) + } + } }) } diff --git a/src/worker/delete-deprecated-purchases.ts b/src/worker/delete-deprecated-purchases.ts index a6247ef..35928d5 100644 --- a/src/worker/delete-deprecated-purchases.ts +++ b/src/worker/delete-deprecated-purchases.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 - 2021 Jonas Lochmann + * Copyright (C) 2019 - 2022 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -77,7 +77,8 @@ async function deleteDeprecatedPurchases ({ database, websocket }: { sourceDeviceId: null, database, websocket, - isImportant: true, + generalLevel: 2, + targetedLevels: new Map(), transaction }) }