diff --git a/app/apps/server/bridges/activation.js b/app/apps/server/bridges/activation.js index 30983357bdff3..a878a63a70483 100644 --- a/app/apps/server/bridges/activation.js +++ b/app/apps/server/bridges/activation.js @@ -1,3 +1,7 @@ +import { STATUS_MAP } from '../../../../imports/users-presence/server/activeUsers'; +import { Users } from '../../../models/server'; +import { Notifications } from '../../../notifications/server'; + export class AppActivationBridge { constructor(orch) { this.orch = orch; @@ -16,6 +20,16 @@ export class AppActivationBridge { } async appStatusChanged(app, status) { + const { _id, username } = Users.findOneByAppId(app.getID(), { fields: { username: 1 } }); + const userStatus = ['auto_enabled', 'manually_enabled'].includes(status) ? 'online' : 'offline'; + + Users.updateStatusById(_id, userStatus); + Notifications.notifyLogged('user-status', [ + _id, + username, + STATUS_MAP[userStatus], + ]); + await this.orch.getNotifier().appStatusUpdated(app.getID(), status); } } diff --git a/app/models/server/models/Users.js b/app/models/server/models/Users.js index dac4c1f652271..1db4188319b73 100644 --- a/app/models/server/models/Users.js +++ b/app/models/server/models/Users.js @@ -429,6 +429,12 @@ export class Users extends Base { return this.find(query, options); } + findOneByAppId(appId, options) { + const query = { appId }; + + return this.findOne(query, options); + } + findOneByImportId(_id, options) { return this.findOne({ importIds: _id }, options); } @@ -833,6 +839,16 @@ export class Users extends Base { return this.update(_id, update); } + updateStatusById(_id, status) { + const update = { + $set: { + status, + }, + }; + + return this.update(_id, update); + } + setServiceId(_id, serviceName, serviceId) { const update = { $set: {} }; diff --git a/imports/users-presence/server/activeUsers.js b/imports/users-presence/server/activeUsers.js index cd076842b8f51..8a62c88d42109 100644 --- a/imports/users-presence/server/activeUsers.js +++ b/imports/users-presence/server/activeUsers.js @@ -3,7 +3,7 @@ import { UserPresenceEvents } from 'meteor/konecty:user-presence'; import { Notifications } from '../../../app/notifications/server'; // mirror of object in /imports/startup/client/listenActiveUsers.js - keep updated -const STATUS_MAP = { +export const STATUS_MAP = { offline: 0, online: 1, away: 2,