Skip to content

Commit 319fbf9

Browse files
committed
start working on calendar things
1 parent 90096b4 commit 319fbf9

2 files changed

Lines changed: 13 additions & 93 deletions

File tree

apps/meteor/server/services/calendar/service.ts

Lines changed: 3 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
import type { ICalendarService } from '@rocket.chat/core-services';
2-
import { ServiceClassInternal, api } from '@rocket.chat/core-services';
2+
import { Presence, ServiceClassInternal, api } from '@rocket.chat/core-services';
33
import type { IUser, ICalendarEvent } from '@rocket.chat/core-typings';
4-
import { UserStatus } from '@rocket.chat/core-typings';
54
import { cronJobs } from '@rocket.chat/cron';
65
import { Logger } from '@rocket.chat/logger';
76
import type { InsertionModel } from '@rocket.chat/model-typings';
8-
import { CalendarEvent, Users } from '@rocket.chat/models';
7+
import { CalendarEvent } from '@rocket.chat/models';
98
import type { UpdateResult, DeleteResult } from 'mongodb';
109

1110
import { applyStatusChange } from './statusEvents/applyStatusChange';
@@ -285,26 +284,10 @@ export class CalendarService extends ServiceClassInternal implements ICalendarSe
285284
return;
286285
}
287286

288-
const user = await Users.findOneById(event.uid, { projection: { statusDefault: 1 } });
289-
if (!user || user.statusDefault === UserStatus.OFFLINE) {
290-
return;
291-
}
292-
293-
const overlappingEvents = await CalendarEvent.findOverlappingEvents(event._id, event.uid, event.startTime, event.endTime)
294-
.sort({ startTime: -1 })
295-
.toArray();
296-
const previousStatus = overlappingEvents.at(0)?.previousStatus ?? user.statusDefault;
297-
298-
if (previousStatus) {
299-
await CalendarEvent.updateEvent(event._id, { previousStatus });
300-
}
301-
302287
await applyStatusChange({
303288
eventId: event._id,
304289
uid: event.uid,
305-
startTime: event.startTime,
306290
endTime: event.endTime,
307-
status: UserStatus.BUSY,
308291
});
309292
}
310293

@@ -313,31 +296,7 @@ export class CalendarService extends ServiceClassInternal implements ICalendarSe
313296
return;
314297
}
315298

316-
const user = await Users.findOneById(event.uid, { projection: { statusDefault: 1 } });
317-
if (!user) {
318-
return;
319-
}
320-
321-
// Only restore status if:
322-
// 1. The current statusDefault is BUSY (meaning it was set by our system, not manually changed by user)
323-
// 2. We have a previousStatus stored from before the event started
324-
325-
if (user.statusDefault === UserStatus.BUSY && event.previousStatus && event.previousStatus !== user.statusDefault) {
326-
await applyStatusChange({
327-
eventId: event._id,
328-
uid: event.uid,
329-
startTime: event.startTime,
330-
endTime: event.endTime,
331-
status: event.previousStatus,
332-
});
333-
} else {
334-
logger.debug({
335-
msg: 'Not restoring status for user',
336-
userId: event.uid,
337-
currentStatusDefault: user.statusDefault,
338-
previousStatus: event.previousStatus,
339-
});
340-
}
299+
await Presence.endActiveState(event.uid);
341300
}
342301

343302
private async sendCurrentNotifications(date: Date): Promise<void> {
Lines changed: 10 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,31 @@
1-
import { api } from '@rocket.chat/core-services';
1+
import { Presence } from '@rocket.chat/core-services';
22
import { UserStatus } from '@rocket.chat/core-typings';
33
import type { ICalendarEvent, IUser } from '@rocket.chat/core-typings';
44
import { Logger } from '@rocket.chat/logger';
5-
import { Users } from '@rocket.chat/models';
65

76
const logger = new Logger('Calendar');
87

98
export async function applyStatusChange({
109
eventId,
1110
uid,
12-
startTime,
1311
endTime,
14-
status,
1512
}: {
1613
eventId: ICalendarEvent['_id'];
1714
uid: IUser['_id'];
18-
startTime: Date;
1915
endTime?: Date;
20-
status?: UserStatus;
21-
shouldScheduleRemoval?: boolean;
2216
}): 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-
3817
logger.debug({
39-
msg: 'Applying status change for event',
18+
msg: 'Applying status change for event via presence engine',
4019
eventId,
41-
user: { _id: uid, statusDefault: user?.statusDefault },
42-
startTime,
20+
uid,
4321
endTime,
44-
newStatus,
45-
previousStatus,
4622
});
4723

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+
});
7031
}

0 commit comments

Comments
 (0)