Rename fuzzy search feature flag to dynamic entries, use the new normalizedMatchRoomName filter and make sure we use the old roomList.entries api when the feature flag is disabled

This commit is contained in:
Stefan Ceriu
2023-08-21 16:31:14 +03:00
committed by Stefan Ceriu
parent ff074e3fae
commit e1d41ad8a3
6 changed files with 41 additions and 24 deletions
@@ -38,7 +38,7 @@ final class AppSettings {
case notificationSettingsEnabled case notificationSettingsEnabled
case swiftUITimelineEnabled case swiftUITimelineEnabled
case pollsInTimeline case pollsInTimeline
case fuzzySearchEnabled case dynamicEntriesEnabled
} }
private static var suiteName: String = InfoPlistReader.main.appGroupIdentifier private static var suiteName: String = InfoPlistReader.main.appGroupIdentifier
@@ -225,6 +225,6 @@ 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.fuzzySearchEnabled, defaultValue: true, storageType: .userDefaults(store)) @UserPreference(key: UserDefaultsKeys.dynamicEntriesEnabled, defaultValue: true, storageType: .userDefaults(store))
var fuzzySearchEnabled var dynamicEntriesEnabled
} }
@@ -79,14 +79,14 @@ struct HomeScreenViewState: BindableState {
var selectedRoomID: String? var selectedRoomID: String?
var fuzzySearchEnabled: Bool var dynamicEntriesEnabled: Bool
var visibleRooms: [HomeScreenRoom] { var visibleRooms: [HomeScreenRoom] {
if roomListMode == .skeletons { if roomListMode == .skeletons {
return placeholderRooms return placeholderRooms
} }
if fuzzySearchEnabled || bindings.searchQuery.isEmpty { if dynamicEntriesEnabled || bindings.searchQuery.isEmpty {
return rooms return rooms
} }
@@ -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, fuzzySearchEnabled: appSettings.fuzzySearchEnabled), super.init(initialViewState: HomeScreenViewState(userID: userSession.userID, dynamicEntriesEnabled: appSettings.dynamicEntriesEnabled),
imageProvider: userSession.mediaProvider) imageProvider: userSession.mediaProvider)
userSession.callbacks userSession.callbacks
@@ -74,12 +74,12 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
.weakAssign(to: \.state.selectedRoomID, on: self) .weakAssign(to: \.state.selectedRoomID, on: self)
.store(in: &cancellables) .store(in: &cancellables)
appSettings.$fuzzySearchEnabled appSettings.$dynamicEntriesEnabled
.weakAssign(to: \.state.fuzzySearchEnabled, on: self) .weakAssign(to: \.state.dynamicEntriesEnabled, on: self)
.store(in: &cancellables) .store(in: &cancellables)
context.$viewState context.$viewState
.filter { _ in appSettings.fuzzySearchEnabled } .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,7 @@ 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 fuzzySearchEnabled: Bool { get set } var dynamicEntriesEnabled: Bool { get set }
} }
extension AppSettings: DeveloperOptionsProtocol { } extension AppSettings: DeveloperOptionsProtocol { }
@@ -39,8 +39,8 @@ struct DeveloperOptionsScreen: View {
} }
Section("Room list") { Section("Room list") {
Toggle(isOn: $context.fuzzySearchEnabled) { Toggle(isOn: $context.dynamicEntriesEnabled) {
Text("Fuzzy search") Text("Dynamic entries")
Text("Requires app reboot") Text("Requires app reboot")
} }
} }
@@ -80,16 +80,33 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
self.roomList = roomList self.roomList = roomList
do { do {
listUpdatesSubscriptionResult = roomList.entriesWithDynamicFilter(listener: RoomListEntriesListenerProxy { [weak self] updates in if appSettings.dynamicEntriesEnabled {
guard let self else { return } listUpdatesSubscriptionResult = roomList.entriesWithDynamicFilter(listener: RoomListEntriesListenerProxy { [weak self] updates in
MXLog.info("\(name): Received list update") guard let self else { return }
diffsPublisher.send(updates) MXLog.info("\(name): Received list update")
}) diffsPublisher.send(updates)
})
listUpdatesTaskHandle = listUpdatesSubscriptionResult?.entriesStream
listUpdatesTaskHandle = listUpdatesSubscriptionResult?.entriesStream
// Forces the listener above to be called with the current state
updateFilterPattern(nil) // 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 }
@@ -122,9 +139,9 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
return return
} }
guard appSettings.fuzzySearchEnabled else { return } guard appSettings.dynamicEntriesEnabled else { return }
_ = listUpdatesSubscriptionResult?.dynamicFilter.set(kind: .fuzzyMatchRoomName(pattern: pattern.lowercased())) _ = listUpdatesSubscriptionResult?.dynamicFilter.set(kind: .normalizedMatchRoomName(pattern: pattern.lowercased()))
} }
// MARK: - Private // MARK: - Private