diff --git a/src/function/sync/get-server-data-status.ts b/src/function/sync/get-server-data-status.ts index 9f62a08..00aebe2 100644 --- a/src/function/sync/get-server-data-status.ts +++ b/src/function/sync/get-server-data-status.ts @@ -191,37 +191,64 @@ export const generateServerDataStatus = async ({ database, clientStatus, familyI const idsOfDevicesWhereInstalledAppsMustBeSynced = [...addedDeviceIds, ...deviceIdsWhereInstalledAppsHaveChanged] if (idsOfDevicesWhereInstalledAppsMustBeSynced.length > 0) { - const dataToSync = (await database.app.findAll({ - where: { - familyId, - deviceId: { - [Sequelize.Op.in]: idsOfDevicesWhereInstalledAppsMustBeSynced - } - }, - attributes: [ - 'deviceId', - 'packageName', - 'title', - 'isLaunchable', - 'recommendation' - ], - transaction - })).map((item) => ({ - deviceId: item.deviceId, - packageName: item.packageName, - title: item.title, - isLaunchable: item.isLaunchable, - recommendation: item.recommendation - })) - - result.apps = idsOfDevicesWhereInstalledAppsMustBeSynced.map((deviceId): ServerInstalledAppsData => ({ - deviceId, - apps: dataToSync.filter((item) => item.deviceId === deviceId).map((item) => ({ + const [appsToSync, activitiesToSync] = await Promise.all([ + database.app.findAll({ + where: { + familyId, + deviceId: { + [Sequelize.Op.in]: idsOfDevicesWhereInstalledAppsMustBeSynced + } + }, + attributes: [ + 'deviceId', + 'packageName', + 'title', + 'isLaunchable', + 'recommendation' + ], + transaction + }).map((item) => ({ + deviceId: item.deviceId, packageName: item.packageName, title: item.title, isLaunchable: item.isLaunchable, recommendation: item.recommendation })), + database.appActivity.findAll({ + where: { + familyId, + deviceId: { + [Sequelize.Op.in]: idsOfDevicesWhereInstalledAppsMustBeSynced + } + }, + attributes: [ + 'deviceId', + 'packageName', + 'title', + 'className' + ], + transaction + }).map((item) => ({ + deviceId: item.deviceId, + packageName: item.packageName, + activityName: item.activityName, + title: item.title + })) + ]) + + result.apps = idsOfDevicesWhereInstalledAppsMustBeSynced.map((deviceId): ServerInstalledAppsData => ({ + deviceId, + apps: appsToSync.filter((item) => item.deviceId === deviceId).map((item) => ({ + packageName: item.packageName, + title: item.title, + isLaunchable: item.isLaunchable, + recommendation: item.recommendation + })), + activities: activitiesToSync.filter((item) => item.deviceId === deviceId).map((item) => ({ + p: item.packageName, + c: item.activityName, + t: item.title + })), version: getServerInstalledAppsVersionByDeviceId(deviceId) })) } diff --git a/src/object/serverdatastatus.ts b/src/object/serverdatastatus.ts index 39f2b54..61db358 100644 --- a/src/object/serverdatastatus.ts +++ b/src/object/serverdatastatus.ts @@ -15,6 +15,7 @@ * along with this program. If not, see . */ +import { SerializedAppActivityItem } from '../model/appactivity' import { SerializedInstalledApp } from '../model/installedapp' import { NewPermissionStatus } from '../model/newpermissionstatus' import { ProtectionLevel } from '../model/protectionlevel' @@ -135,4 +136,5 @@ export interface ServerInstalledAppsData { deviceId: string version: string apps: Array + activities: Array }