11import 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' ;
33import type { IUser , ICalendarEvent } from '@rocket.chat/core-typings' ;
4- import { UserStatus } from '@rocket.chat/core-typings' ;
54import { cronJobs } from '@rocket.chat/cron' ;
65import { Logger } from '@rocket.chat/logger' ;
76import type { InsertionModel } from '@rocket.chat/model-typings' ;
8- import { CalendarEvent , Users } from '@rocket.chat/models' ;
7+ import { CalendarEvent } from '@rocket.chat/models' ;
98import type { UpdateResult , DeleteResult } from 'mongodb' ;
109
1110import { 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 > {
0 commit comments