Switch entirely to dynamic room list entries (normalizedMatchRoomName brings the same behavior as the old implementation) and cleanup

This commit is contained in:
Stefan Ceriu
2023-08-22 09:23:53 +03:00
committed by Stefan Ceriu
parent 8dca82e65e
commit 269fd3d1f6
6 changed files with 11 additions and 56 deletions
@@ -38,7 +38,6 @@ final class AppSettings {
case notificationSettingsEnabled case notificationSettingsEnabled
case swiftUITimelineEnabled case swiftUITimelineEnabled
case pollsInTimeline case pollsInTimeline
case dynamicEntriesEnabled
} }
private static var suiteName: String = InfoPlistReader.main.appGroupIdentifier private static var suiteName: String = InfoPlistReader.main.appGroupIdentifier
@@ -224,7 +223,4 @@ final class AppSettings {
@UserPreference(key: UserDefaultsKeys.pollsInTimeline, defaultValue: false, storageType: .userDefaults(store)) @UserPreference(key: UserDefaultsKeys.pollsInTimeline, defaultValue: false, storageType: .userDefaults(store))
var pollsInTimelineEnabled var pollsInTimelineEnabled
@UserPreference(key: UserDefaultsKeys.dynamicEntriesEnabled, defaultValue: true, storageType: .userDefaults(store))
var dynamicEntriesEnabled
} }
@@ -79,18 +79,12 @@ struct HomeScreenViewState: BindableState {
var selectedRoomID: String? var selectedRoomID: String?
var dynamicEntriesEnabled: Bool
var visibleRooms: [HomeScreenRoom] { var visibleRooms: [HomeScreenRoom] {
if roomListMode == .skeletons { if roomListMode == .skeletons {
return placeholderRooms return placeholderRooms
} }
if dynamicEntriesEnabled || bindings.searchQuery.isEmpty { return rooms
return rooms
}
return rooms.filter { $0.name.localizedStandardContains(bindings.searchQuery) }
} }
var bindings = HomeScreenViewStateBindings() var bindings = HomeScreenViewStateBindings()
@@ -49,7 +49,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
roomSummaryProvider = userSession.clientProxy.roomSummaryProvider roomSummaryProvider = userSession.clientProxy.roomSummaryProvider
inviteSummaryProvider = userSession.clientProxy.inviteSummaryProvider inviteSummaryProvider = userSession.clientProxy.inviteSummaryProvider
super.init(initialViewState: HomeScreenViewState(userID: userSession.userID, dynamicEntriesEnabled: appSettings.dynamicEntriesEnabled), super.init(initialViewState: HomeScreenViewState(userID: userSession.userID),
imageProvider: userSession.mediaProvider) imageProvider: userSession.mediaProvider)
userSession.callbacks userSession.callbacks
@@ -74,12 +74,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
.weakAssign(to: \.state.selectedRoomID, on: self) .weakAssign(to: \.state.selectedRoomID, on: self)
.store(in: &cancellables) .store(in: &cancellables)
appSettings.$dynamicEntriesEnabled
.weakAssign(to: \.state.dynamicEntriesEnabled, on: self)
.store(in: &cancellables)
context.$viewState context.$viewState
.filter { _ in appSettings.dynamicEntriesEnabled }
.map(\.bindings.searchQuery) .map(\.bindings.searchQuery)
.debounceAndRemoveDuplicates() .debounceAndRemoveDuplicates()
.sink { [weak self] searchQuery in .sink { [weak self] searchQuery in
@@ -49,7 +49,6 @@ protocol DeveloperOptionsProtocol: AnyObject {
var notificationSettingsEnabled: Bool { get set } var notificationSettingsEnabled: Bool { get set }
var swiftUITimelineEnabled: Bool { get set } var swiftUITimelineEnabled: Bool { get set }
var pollsInTimelineEnabled: Bool { get set } var pollsInTimelineEnabled: Bool { get set }
var dynamicEntriesEnabled: Bool { get set }
} }
extension AppSettings: DeveloperOptionsProtocol { } extension AppSettings: DeveloperOptionsProtocol { }
@@ -38,13 +38,6 @@ struct DeveloperOptionsScreen: View {
} }
} }
Section("Room list") {
Toggle(isOn: $context.dynamicEntriesEnabled) {
Text("Dynamic entries")
Text("Requires app reboot")
}
}
Section("Notifications") { Section("Notifications") {
Toggle(isOn: $context.notificationSettingsEnabled) { Toggle(isOn: $context.notificationSettingsEnabled) {
Text("Show notification settings") Text("Show notification settings")
@@ -78,36 +78,16 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
} }
self.roomList = roomList self.roomList = roomList
do { do {
if appSettings.dynamicEntriesEnabled { listUpdatesSubscriptionResult = roomList.entriesWithDynamicFilter(listener: RoomListEntriesListenerProxy { [weak self] updates in
listUpdatesSubscriptionResult = roomList.entriesWithDynamicFilter(listener: RoomListEntriesListenerProxy { [weak self] updates in guard let self else { return }
guard let self else { return } MXLog.info("\(name): Received list update")
MXLog.info("\(name): Received list update") diffsPublisher.send(updates)
diffsPublisher.send(updates) })
})
listUpdatesTaskHandle = listUpdatesSubscriptionResult?.entriesStream
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)
}
let stateUpdatesSubscriptionResult = try roomList.loadingState(listener: RoomListStateObserver { [weak self] state in let stateUpdatesSubscriptionResult = try roomList.loadingState(listener: RoomListStateObserver { [weak self] state in
guard let self else { return } guard let self else { return }
MXLog.info("\(name): Received state update: \(state)") MXLog.info("\(name): Received state update: \(state)")
@@ -139,8 +119,6 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
return return
} }
guard appSettings.dynamicEntriesEnabled else { return }
_ = listUpdatesSubscriptionResult?.dynamicFilter.set(kind: .normalizedMatchRoomName(pattern: pattern.lowercased())) _ = listUpdatesSubscriptionResult?.dynamicFilter.set(kind: .normalizedMatchRoomName(pattern: pattern.lowercased()))
} }