fix: multiple bug fixes
isolated users, db backup, weird disconnect issues for long voice sessions,
This commit is contained in:
@@ -11,6 +11,7 @@ import {
|
||||
tap,
|
||||
withLatestFrom
|
||||
} from 'rxjs/operators';
|
||||
import type { Message } from '../../../../shared-kernel';
|
||||
import { MessagesActions } from '../../../../store/messages/messages.actions';
|
||||
import { RoomsActions } from '../../../../store/rooms/rooms.actions';
|
||||
import { selectCurrentRoom, selectSavedRooms } from '../../../../store/rooms/rooms.selectors';
|
||||
@@ -18,6 +19,23 @@ import { UsersActions } from '../../../../store/users/users.actions';
|
||||
import { selectCurrentUser } from '../../../../store/users/users.selectors';
|
||||
import { NotificationsFacade } from '../facades/notifications.facade';
|
||||
|
||||
export function groupMessagesByRoom(messages: Message[]): Map<string, Message[]> {
|
||||
const messagesByRoom = new Map<string, Message[]>();
|
||||
|
||||
for (const message of messages) {
|
||||
const roomMessages = messagesByRoom.get(message.roomId);
|
||||
|
||||
if (roomMessages) {
|
||||
roomMessages.push(message);
|
||||
continue;
|
||||
}
|
||||
|
||||
messagesByRoom.set(message.roomId, [message]);
|
||||
}
|
||||
|
||||
return messagesByRoom;
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
export class NotificationsEffects {
|
||||
private readonly actions$ = inject(Actions);
|
||||
@@ -92,10 +110,10 @@ export class NotificationsEffects {
|
||||
{ dispatch: false }
|
||||
);
|
||||
|
||||
refreshCurrentRoomUnread$ = createEffect(
|
||||
refreshViewedRoomUnread$ = createEffect(
|
||||
() =>
|
||||
this.actions$.pipe(
|
||||
ofType(MessagesActions.loadMessagesSuccess, MessagesActions.syncMessages),
|
||||
ofType(MessagesActions.loadMessagesSuccess),
|
||||
withLatestFrom(this.store.select(selectCurrentRoom)),
|
||||
tap(([{ messages }, room]) => {
|
||||
if (room) {
|
||||
@@ -105,4 +123,17 @@ export class NotificationsEffects {
|
||||
),
|
||||
{ dispatch: false }
|
||||
);
|
||||
|
||||
refreshSyncedRoomUnread$ = createEffect(
|
||||
() =>
|
||||
this.actions$.pipe(
|
||||
ofType(MessagesActions.syncMessages),
|
||||
tap(({ messages }) => {
|
||||
for (const [roomId, roomMessages] of groupMessagesByRoom(messages)) {
|
||||
this.notifications.refreshRoomUnreadFromMessages(roomId, roomMessages);
|
||||
}
|
||||
})
|
||||
)
|
||||
, { dispatch: false }
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user