From 1ffc718cecdc74549879128843d8ce900751aa8b Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Fri, 5 Apr 2024 09:18:56 +0300 Subject: [PATCH] element-hq/element-x-ios/issues/2395 - Slightly tweak the unread invites logic, add more logs --- .../HomeScreen/HomeScreenViewModel.swift | 18 +++++++++++++----- .../InvitesScreen/InvitesScreenViewModel.swift | 9 +++++---- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift index 27d5097e6..4588a0ad1 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift @@ -262,14 +262,22 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol inviteSummaryProvider.roomListPublisher .combineLatest(appSettings.$seenInvites) .receive(on: DispatchQueue.main) - .sink { [weak self] summaries, readInvites in + .sink { [weak self] summaries, seenInvites in self?.state.hasPendingInvitations = !summaries.isEmpty - self?.state.hasUnreadPendingInvitations = summaries.contains(where: { - guard let roomId = $0.id else { + + let invites = summaries.compactMap(\.id) + + let unreadInvites = summaries.filter { summary in + guard let roomID = summary.id else { return false } - return !readInvites.contains(roomId) - }) + + return !seenInvites.contains(roomID) + } + + MXLog.info("Received invite list update - invites: \(invites), seenInvites: \(seenInvites), unreadInvites: \(unreadInvites)") + + self?.state.hasUnreadPendingInvitations = !unreadInvites.isEmpty } .store(in: &cancellables) } diff --git a/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift index b5fae7edd..997fb757d 100644 --- a/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift +++ b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift @@ -84,15 +84,16 @@ class InvitesScreenViewModel: InvitesScreenViewModelType, InvitesScreenViewModel .sink { [weak self] roomSummaries in guard let self else { return } - let invites: [InvitesScreenRoomDetails] = roomSummaries.compactMap { summary in + self.appSettings.seenInvites = Set(roomSummaries.compactMap(\.id)) + + MXLog.info("Updated seen invites: \(self.appSettings.seenInvites)") + + self.state.invites = roomSummaries.compactMap { summary in guard case .filled(let details) = summary else { return nil } return InvitesScreenRoomDetails(roomDetails: details, isUnread: !self.previouslySeenInvites.contains(details.id)) } - - self.state.invites = invites - self.appSettings.seenInvites = Set(invites.map(\.roomDetails.id)) } .store(in: &cancellables) }