diff --git a/src/function/sync/apply-actions/cache.ts b/src/function/sync/apply-actions/cache.ts index 1399242..3fc5a22 100644 --- a/src/function/sync/apply-actions/cache.ts +++ b/src/function/sync/apply-actions/cache.ts @@ -15,11 +15,12 @@ * along with this program. If not, see . */ -import { memoize, uniq } from 'lodash' +import { memoize } from 'lodash' import * as Sequelize from 'sequelize' import { config } from '../../../config' import { VisibleConnectedDevicesManager } from '../../../connected-devices' import { Database } from '../../../database' +import { setToList } from '../../../util/list' import { generateVersionId } from '../../../util/token' import { SourceUserNotFoundException } from './exception/illegal-state' import { InvalidChildActionIntegrityValue } from './exception/integrity' @@ -32,12 +33,12 @@ export class Cache { readonly connectedDevicesManager: VisibleConnectedDevicesManager private shouldTriggerFullSync = false - categoriesWithModifiedApps: Array = [] - categoriesWithModifiedBaseData: Array = [] - categoriesWithModifiedTimeLimitRules: Array = [] - categoriesWithModifiedUsedTimes: Array = [] + categoriesWithModifiedApps = new Set() + categoriesWithModifiedBaseData = new Set() + categoriesWithModifiedTimeLimitRules = new Set() + categoriesWithModifiedUsedTimes = new Set() - devicesWithModifiedInstalledApps: Array = [] + devicesWithModifiedInstalledApps = new Set() devicesWithModifiedShowDeviceConnected = new Map() invalidiateUserList = false @@ -144,84 +145,84 @@ export class Cache { async saveModifiedVersionNumbers () { const { database, transaction, familyId } = this - if (this.categoriesWithModifiedApps.length > 0) { + if (this.categoriesWithModifiedApps.size > 0) { await database.category.update({ assignedAppsVersion: generateVersionId() }, { where: { familyId, categoryId: { - [Sequelize.Op.in]: uniq(this.categoriesWithModifiedApps) + [Sequelize.Op.in]: setToList(this.categoriesWithModifiedApps) } }, transaction }) - this.categoriesWithModifiedApps = [] + this.categoriesWithModifiedApps.clear() } - if (this.categoriesWithModifiedBaseData.length > 0) { + if (this.categoriesWithModifiedBaseData.size > 0) { await database.category.update({ baseVersion: generateVersionId() }, { where: { familyId, categoryId: { - [Sequelize.Op.in]: uniq(this.categoriesWithModifiedBaseData) + [Sequelize.Op.in]: setToList(this.categoriesWithModifiedBaseData) } }, transaction }) - this.categoriesWithModifiedBaseData = [] + this.categoriesWithModifiedBaseData.clear() } - if (this.categoriesWithModifiedTimeLimitRules.length > 0) { + if (this.categoriesWithModifiedTimeLimitRules.size > 0) { await database.category.update({ timeLimitRulesVersion: generateVersionId() }, { where: { familyId, categoryId: { - [Sequelize.Op.in]: uniq(this.categoriesWithModifiedTimeLimitRules) + [Sequelize.Op.in]: setToList(this.categoriesWithModifiedTimeLimitRules) } }, transaction }) - this.categoriesWithModifiedTimeLimitRules = [] + this.categoriesWithModifiedTimeLimitRules.clear() } - if (this.categoriesWithModifiedUsedTimes.length > 0) { + if (this.categoriesWithModifiedUsedTimes.size > 0) { await database.category.update({ usedTimesVersion: generateVersionId() }, { where: { familyId, categoryId: { - [Sequelize.Op.in]: uniq(this.categoriesWithModifiedUsedTimes) + [Sequelize.Op.in]: setToList(this.categoriesWithModifiedUsedTimes) } }, transaction }) - this.categoriesWithModifiedUsedTimes = [] + this.categoriesWithModifiedUsedTimes.clear() } - if (this.devicesWithModifiedInstalledApps.length > 0) { + if (this.devicesWithModifiedInstalledApps.size > 0) { await database.device.update({ installedAppsVersion: generateVersionId() }, { where: { familyId, deviceId: { - [Sequelize.Op.in]: uniq(this.devicesWithModifiedInstalledApps) + [Sequelize.Op.in]: setToList(this.devicesWithModifiedInstalledApps) } }, transaction }) - this.devicesWithModifiedInstalledApps = [] + this.devicesWithModifiedInstalledApps.clear() } if (this.invalidiateUserList) { 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 3391f30..6c7d0b1 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 @@ -48,5 +48,5 @@ export async function dispatchAddInstalledApps ({ deviceId, action, cache }: { { transaction: cache.transaction } ) - cache.devicesWithModifiedInstalledApps.push(deviceId) + cache.devicesWithModifiedInstalledApps.add(deviceId) } 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 be1a28e..3370b19 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 @@ -110,10 +110,10 @@ export async function dispatchAddUsedTime ({ action, cache }: { transaction: cache.transaction }) - cache.categoriesWithModifiedBaseData.push(categoryId) + cache.categoriesWithModifiedBaseData.add(categoryId) } - cache.categoriesWithModifiedUsedTimes.push(categoryId) + cache.categoriesWithModifiedUsedTimes.add(categoryId) } await handleAddUsedTime({ 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 8fff885..a5854ab 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 @@ -202,7 +202,7 @@ export async function dispatchAddUsedTimeVersion2 ({ deviceId, action, cache, ev } } - cache.categoriesWithModifiedUsedTimes.push(item.categoryId) + cache.categoriesWithModifiedUsedTimes.add(item.categoryId) if (item.extraTimeToSubtract !== 0) { await cache.database.category.update({ @@ -215,7 +215,7 @@ export async function dispatchAddUsedTimeVersion2 ({ deviceId, action, cache, ev transaction: cache.transaction }) - cache.categoriesWithModifiedBaseData.push(item.categoryId) + cache.categoriesWithModifiedBaseData.add(item.categoryId) } if (addUsedTimeForADifferentUserThanTheCurrentUserOfTheDevice) { 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 0324e9a..03768a3 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 @@ -35,5 +35,5 @@ export async function dispatchRemoveInstalledApps ({ deviceId, action, cache }: transaction: cache.transaction }) - cache.devicesWithModifiedInstalledApps.push(deviceId) + cache.devicesWithModifiedInstalledApps.add(deviceId) } 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 c232478..7514880 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 @@ -77,5 +77,5 @@ export async function dispatchUpdateAppActivities ({ deviceId, action, cache }: } } - cache.devicesWithModifiedInstalledApps.push(deviceId) + cache.devicesWithModifiedInstalledApps.add(deviceId) } 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 1385b5d..141ce82 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/addcategoryapps.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/addcategoryapps.ts @@ -177,7 +177,7 @@ export async function dispatchAddCategoryApps ({ action, cache, fromChildSelfLim } ) - oldCategories.forEach((categoryId) => cache.categoriesWithModifiedApps.push(categoryId)) - cache.categoriesWithModifiedApps.push(action.categoryId) + oldCategories.forEach((categoryId) => cache.categoriesWithModifiedApps.add(categoryId)) + cache.categoriesWithModifiedApps.add(action.categoryId) cache.areChangesImportant = true } 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 5f3ddd5..f58b31d 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/addcategorynetworkid.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/addcategorynetworkid.ts @@ -74,6 +74,6 @@ export async function dispatchAddCategoryNetworkId ({ action, cache }: { hashedNetworkId: action.hashedNetworkId }, { transaction: cache.transaction }) - cache.categoriesWithModifiedBaseData.push(action.categoryId) + cache.categoriesWithModifiedBaseData.add(action.categoryId) cache.areChangesImportant = true } 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 35a0741..9b6eb87 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/createtimelimitrule.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/createtimelimitrule.ts @@ -57,6 +57,6 @@ export async function dispatchCreateTimeLimitRule ({ action, cache, fromChildSel sessionPauseMilliseconds: action.rule.sessionPauseMilliseconds }, { transaction: cache.transaction }) - cache.categoriesWithModifiedTimeLimitRules.push(action.rule.categoryId) + cache.categoriesWithModifiedTimeLimitRules.add(action.rule.categoryId) cache.areChangesImportant = true } 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 e1e6909..e685955 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/deletetimelimitrule.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/deletetimelimitrule.ts @@ -37,6 +37,6 @@ export async function dispatchDeleteTimeLimitRule ({ action, cache }: { await ruleEntry.destroy({ transaction: cache.transaction }) - cache.categoriesWithModifiedTimeLimitRules.push(ruleEntry.categoryId) + cache.categoriesWithModifiedTimeLimitRules.add(ruleEntry.categoryId) cache.areChangesImportant = true } 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 5ff9710..17ae903 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/incrementcategoryextratime.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/incrementcategoryextratime.ts @@ -40,7 +40,7 @@ export async function dispatchIncrementCategoryExtraTime ({ action, cache }: { await category.save({ transaction: cache.transaction }) - cache.categoriesWithModifiedBaseData.push(category.categoryId) + cache.categoriesWithModifiedBaseData.add(category.categoryId) cache.areChangesImportant = true } 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 7f471af..d5f0f31 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/removecategoryapps.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/removecategoryapps.ts @@ -41,6 +41,6 @@ export async function dispatchRemoveCategoryApps ({ action, cache }: { }) } - cache.categoriesWithModifiedApps.push(action.categoryId) + cache.categoriesWithModifiedApps.add(action.categoryId) cache.areChangesImportant = true } 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 ee6de73..d71d730 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/resetcategorynetworkids.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/resetcategorynetworkids.ts @@ -44,6 +44,6 @@ export async function dispatchResetCategoryNetworkIds ({ action, cache }: { transaction: cache.transaction }) - cache.categoriesWithModifiedBaseData.push(action.categoryId) + cache.categoriesWithModifiedBaseData.add(action.categoryId) cache.areChangesImportant = true } 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 3e125c0..06c1b39 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setcategoryextratime.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setcategoryextratime.ts @@ -51,6 +51,6 @@ export async function dispatchSetCategoryExtraTime ({ action, cache }: { transaction: cache.transaction }) - cache.categoriesWithModifiedBaseData.push(action.categoryId) + cache.categoriesWithModifiedBaseData.add(action.categoryId) cache.areChangesImportant = true } 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 7423933..b6cbc11 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/setparentcategory.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/setparentcategory.ts @@ -117,6 +117,6 @@ export async function dispatchSetParentCategory ({ action, cache, fromChildSelfL transaction: cache.transaction }) - cache.categoriesWithModifiedBaseData.push(action.categoryId) + cache.categoriesWithModifiedBaseData.add(action.categoryId) cache.areChangesImportant = true } 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 6f7a7b8..b1329b6 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorybatterylimit.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorybatterylimit.ts @@ -45,6 +45,6 @@ export async function dispatchUpdateCategoryBatteryLimit ({ action, cache }: { await categoryEntry.save({ transaction: cache.transaction }) - cache.categoriesWithModifiedBaseData.push(action.categoryId) + cache.categoriesWithModifiedBaseData.add(action.categoryId) cache.areChangesImportant = true } 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 8868b99..59c025c 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockallnotifications.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockallnotifications.ts @@ -59,7 +59,7 @@ export async function dispatchUpdateCategoryBlockAllNotifications ({ action, cac }) if (affectedRows !== 0) { - cache.categoriesWithModifiedBaseData.push(action.categoryId) + cache.categoriesWithModifiedBaseData.add(action.categoryId) cache.areChangesImportant = true } } 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 046c9e1..10f7f39 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockedtimes.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategoryblockedtimes.ts @@ -69,6 +69,6 @@ export async function dispatchUpdateCategoryBlockedTimes ({ action, cache, fromC transaction: cache.transaction }) - cache.categoriesWithModifiedBaseData.push(action.categoryId) + cache.categoriesWithModifiedBaseData.add(action.categoryId) cache.areChangesImportant = true } 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 6948cc8..ec4d279 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorysorting.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorysorting.ts @@ -40,6 +40,6 @@ export async function dispatchUpdateCategorySorting ({ action, cache }: { } }) - cache.categoriesWithModifiedBaseData.push(categoryId) + cache.categoriesWithModifiedBaseData.add(categoryId) } } 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 61f7573..0a66438 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytemporarilyblocked.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytemporarilyblocked.ts @@ -79,7 +79,7 @@ export async function dispatchUpdateCategoryTemporarilyBlocked ({ action, cache, }) if (affectedRows !== 0) { - cache.categoriesWithModifiedBaseData.push(action.categoryId) + cache.categoriesWithModifiedBaseData.add(action.categoryId) cache.areChangesImportant = true } } 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 103cb5e..7748899 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytimewarnings.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytimewarnings.ts @@ -43,6 +43,6 @@ export async function dispatchUpdateCategoryTimeWarnings ({ action, cache }: { await categoryEntry.save({ transaction: cache.transaction }) - cache.categoriesWithModifiedBaseData.push(action.categoryId) + cache.categoriesWithModifiedBaseData.add(action.categoryId) cache.areChangesImportant = true } 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 058ee66..d575031 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytitle.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatecategorytitle.ts @@ -46,7 +46,7 @@ export async function dispatchUpdateCategoryTitle ({ action, cache }: { }) if (affectedRows !== 0) { - cache.categoriesWithModifiedBaseData.push(action.categoryId) + cache.categoriesWithModifiedBaseData.add(action.categoryId) cache.areChangesImportant = true } } 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 d7bf4b5..176958c 100644 --- a/src/function/sync/apply-actions/dispatch-parent-action/updatetimelimitrule.ts +++ b/src/function/sync/apply-actions/dispatch-parent-action/updatetimelimitrule.ts @@ -45,6 +45,6 @@ export async function dispatchUpdateTimelimitRule ({ action, cache }: { await ruleEntry.save({ transaction: cache.transaction }) - cache.categoriesWithModifiedTimeLimitRules.push(ruleEntry.categoryId) + cache.categoriesWithModifiedTimeLimitRules.add(ruleEntry.categoryId) cache.areChangesImportant = true } diff --git a/src/util/list.ts b/src/util/list.ts index c89909b..fb3005d 100644 --- a/src/util/list.ts +++ b/src/util/list.ts @@ -20,3 +20,11 @@ import { uniq } from 'lodash' export function hasDuplicates (list: Array): boolean { return uniq(list).length !== list.length } + +export function setToList (set: Set): Array { + const result: Array = [] + + set.forEach((item) => result.push(item)) + + return result +}