From a2ba41ed2adf5c71e27fcfea751c1b50204b243f Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Tue, 22 Aug 2023 09:23:53 +0300 Subject: [PATCH] Switch entirely to dynamic room list entries (normalizedMatchRoomName brings the same behavior as the old implementation) and cleanup --- .../Sources/Application/AppSettings.swift | 4 -- .../Screens/HomeScreen/HomeScreenModels.swift | 8 +--- .../HomeScreen/HomeScreenViewModel.swift | 7 +--- .../DeveloperOptionsScreenModels.swift | 1 - .../View/DeveloperOptionsScreen.swift | 7 ---- .../RoomSummary/RoomSummaryProvider.swift | 40 +++++-------------- 6 files changed, 11 insertions(+), 56 deletions(-) diff --git a/ElementX/Sources/Application/AppSettings.swift b/ElementX/Sources/Application/AppSettings.swift index bb5a23838..9b464e275 100644 --- a/ElementX/Sources/Application/AppSettings.swift +++ b/ElementX/Sources/Application/AppSettings.swift @@ -38,7 +38,6 @@ final class AppSettings { case notificationSettingsEnabled case swiftUITimelineEnabled case pollsInTimeline - case dynamicEntriesEnabled } private static var suiteName: String = InfoPlistReader.main.appGroupIdentifier @@ -224,7 +223,4 @@ final class AppSettings { @UserPreference(key: UserDefaultsKeys.pollsInTimeline, defaultValue: false, storageType: .userDefaults(store)) var pollsInTimelineEnabled - - @UserPreference(key: UserDefaultsKeys.dynamicEntriesEnabled, defaultValue: true, storageType: .userDefaults(store)) - var dynamicEntriesEnabled } diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift index 0b88c3e6d..5bd92e125 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift @@ -79,18 +79,12 @@ struct HomeScreenViewState: BindableState { var selectedRoomID: String? - var dynamicEntriesEnabled: Bool - var visibleRooms: [HomeScreenRoom] { if roomListMode == .skeletons { return placeholderRooms } - if dynamicEntriesEnabled || bindings.searchQuery.isEmpty { - return rooms - } - - return rooms.filter { $0.name.localizedStandardContains(bindings.searchQuery) } + return rooms } var bindings = HomeScreenViewStateBindings() diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift index f1088a4ca..7bf53a55f 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift @@ -49,7 +49,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol roomSummaryProvider = userSession.clientProxy.roomSummaryProvider inviteSummaryProvider = userSession.clientProxy.inviteSummaryProvider - super.init(initialViewState: HomeScreenViewState(userID: userSession.userID, dynamicEntriesEnabled: appSettings.dynamicEntriesEnabled), + super.init(initialViewState: HomeScreenViewState(userID: userSession.userID), imageProvider: userSession.mediaProvider) userSession.callbacks @@ -74,12 +74,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol .weakAssign(to: \.state.selectedRoomID, on: self) .store(in: &cancellables) - appSettings.$dynamicEntriesEnabled - .weakAssign(to: \.state.dynamicEntriesEnabled, on: self) - .store(in: &cancellables) - context.$viewState - .filter { _ in appSettings.dynamicEntriesEnabled } .map(\.bindings.searchQuery) .debounceAndRemoveDuplicates() .sink { [weak self] searchQuery in diff --git a/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenModels.swift b/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenModels.swift index 9fcd0c7f7..a3255f19d 100644 --- a/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenModels.swift +++ b/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/DeveloperOptionsScreenModels.swift @@ -49,7 +49,6 @@ protocol DeveloperOptionsProtocol: AnyObject { var notificationSettingsEnabled: Bool { get set } var swiftUITimelineEnabled: Bool { get set } var pollsInTimelineEnabled: Bool { get set } - var dynamicEntriesEnabled: Bool { get set } } extension AppSettings: DeveloperOptionsProtocol { } diff --git a/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/View/DeveloperOptionsScreen.swift b/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/View/DeveloperOptionsScreen.swift index 6e525341d..7ec796678 100644 --- a/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/View/DeveloperOptionsScreen.swift +++ b/ElementX/Sources/Screens/Settings/DeveloperOptionsScreen/View/DeveloperOptionsScreen.swift @@ -38,13 +38,6 @@ struct DeveloperOptionsScreen: View { } } - Section("Room list") { - Toggle(isOn: $context.dynamicEntriesEnabled) { - Text("Dynamic entries") - Text("Requires app reboot") - } - } - Section("Notifications") { Toggle(isOn: $context.notificationSettingsEnabled) { Text("Show notification settings") diff --git a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift index 773f34769..749c3eb67 100644 --- a/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift +++ b/ElementX/Sources/Services/Room/RoomSummary/RoomSummaryProvider.swift @@ -78,36 +78,16 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol { } self.roomList = roomList - + do { - if appSettings.dynamicEntriesEnabled { - listUpdatesSubscriptionResult = roomList.entriesWithDynamicFilter(listener: RoomListEntriesListenerProxy { [weak self] updates in - guard let self else { return } - MXLog.info("\(name): Received list update") - diffsPublisher.send(updates) - }) - - listUpdatesTaskHandle = listUpdatesSubscriptionResult?.entriesStream - - // Forces the listener above to be called with the current state - updateFilterPattern(nil) - } else { - let listUpdatesSubscriptionResult = roomList.entries(listener: RoomListEntriesListenerProxy { [weak self] updates in - guard let self else { return } - MXLog.info("\(name): Received list update") - diffsPublisher.send(updates) - }) - - listUpdatesTaskHandle = listUpdatesSubscriptionResult.entriesStream - - rooms = listUpdatesSubscriptionResult.entries.map { roomListEntry in - buildSummaryForRoomListEntry(roomListEntry) - } - - // Manually call it here as the didSet doesn't work from constructors - roomListSubject.send(rooms) - } - + listUpdatesSubscriptionResult = roomList.entriesWithDynamicFilter(listener: RoomListEntriesListenerProxy { [weak self] updates in + guard let self else { return } + MXLog.info("\(name): Received list update") + diffsPublisher.send(updates) + }) + + listUpdatesTaskHandle = listUpdatesSubscriptionResult?.entriesStream + let stateUpdatesSubscriptionResult = try roomList.loadingState(listener: RoomListStateObserver { [weak self] state in guard let self else { return } MXLog.info("\(name): Received state update: \(state)") @@ -139,8 +119,6 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol { return } - guard appSettings.dynamicEntriesEnabled else { return } - _ = listUpdatesSubscriptionResult?.dynamicFilter.set(kind: .normalizedMatchRoomName(pattern: pattern.lowercased())) }