|
1 | | -import { api } from '@rocket.chat/core-services'; |
| 1 | +import { Presence } from '@rocket.chat/core-services'; |
2 | 2 | import { UserStatus } from '@rocket.chat/core-typings'; |
3 | 3 | import type { ICalendarEvent, IUser } from '@rocket.chat/core-typings'; |
4 | 4 | import { Logger } from '@rocket.chat/logger'; |
5 | | -import { Users } from '@rocket.chat/models'; |
6 | 5 |
|
7 | 6 | const logger = new Logger('Calendar'); |
8 | 7 |
|
9 | 8 | export async function applyStatusChange({ |
10 | 9 | eventId, |
11 | 10 | uid, |
12 | | - startTime, |
13 | 11 | endTime, |
14 | | - status, |
15 | 12 | }: { |
16 | 13 | eventId: ICalendarEvent['_id']; |
17 | 14 | uid: IUser['_id']; |
18 | | - startTime: Date; |
19 | 15 | endTime?: Date; |
20 | | - status?: UserStatus; |
21 | | - shouldScheduleRemoval?: boolean; |
22 | 16 | }): Promise<void> { |
23 | | - const user = await Users.findOneById(uid, { projection: { roles: 1, username: 1, name: 1, statusDefault: 1 } }); |
24 | | - |
25 | | - if (!user || user.statusDefault === UserStatus.OFFLINE) { |
26 | | - logger.debug({ |
27 | | - msg: 'Cannot apply status change for event, user is offline or does not exist', |
28 | | - eventId, |
29 | | - uid, |
30 | | - }); |
31 | | - |
32 | | - return; |
33 | | - } |
34 | | - |
35 | | - const newStatus = status ?? UserStatus.BUSY; |
36 | | - const previousStatus = user.statusDefault; |
37 | | - |
38 | 17 | logger.debug({ |
39 | | - msg: 'Applying status change for event', |
| 18 | + msg: 'Applying status change for event via presence engine', |
40 | 19 | eventId, |
41 | | - user: { _id: uid, statusDefault: user?.statusDefault }, |
42 | | - startTime, |
| 20 | + uid, |
43 | 21 | endTime, |
44 | | - newStatus, |
45 | | - previousStatus, |
46 | 22 | }); |
47 | 23 |
|
48 | | - let statusChanged = false; |
49 | | - |
50 | | - if (newStatus === UserStatus.BUSY) { |
51 | | - await Users.updateStatusAndStatusDefault(uid, newStatus, newStatus); |
52 | | - statusChanged = true; |
53 | | - } else if (user.statusDefault === UserStatus.BUSY) { |
54 | | - await Users.updateStatusAndStatusDefault(uid, newStatus, newStatus); |
55 | | - statusChanged = true; |
56 | | - } |
57 | | - |
58 | | - if (statusChanged) { |
59 | | - await api.broadcast('presence.status', { |
60 | | - user: { |
61 | | - status: newStatus, |
62 | | - _id: uid, |
63 | | - roles: user.roles, |
64 | | - username: user.username, |
65 | | - name: user.name, |
66 | | - }, |
67 | | - previousStatus, |
68 | | - }); |
69 | | - } |
| 24 | + await Presence.setActiveState(uid, { |
| 25 | + statusDefault: UserStatus.BUSY, |
| 26 | + statusText: '', |
| 27 | + statusSource: 'external', |
| 28 | + statusEmoji: '📅', |
| 29 | + ...(endTime && { statusExpiresAt: endTime }), |
| 30 | + }); |
70 | 31 | } |
0 commit comments