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 0bb1e5911d
commit ec1f25ea04
6 changed files with 41 additions and 24 deletions

View File

@@ -38,7 +38,7 @@ final class AppSettings {
case notificationSettingsEnabled
case swiftUITimelineEnabled
case pollsInTimeline
case fuzzySearchEnabled
case dynamicEntriesEnabled
}
private static var suiteName: String = InfoPlistReader.main.appGroupIdentifier
@@ -225,6 +225,6 @@ final class AppSettings {
@UserPreference(key: UserDefaultsKeys.pollsInTimeline, defaultValue: false, storageType: .userDefaults(store))
var pollsInTimelineEnabled
@UserPreference(key: UserDefaultsKeys.fuzzySearchEnabled, defaultValue: true, storageType: .userDefaults(store))
var fuzzySearchEnabled
@UserPreference(key: UserDefaultsKeys.dynamicEntriesEnabled, defaultValue: true, storageType: .userDefaults(store))
var dynamicEntriesEnabled
}

View File

@@ -79,14 +79,14 @@ struct HomeScreenViewState: BindableState {
var selectedRoomID: String?
var fuzzySearchEnabled: Bool
var dynamicEntriesEnabled: Bool
var visibleRooms: [HomeScreenRoom] {
if roomListMode == .skeletons {
return placeholderRooms
}
if fuzzySearchEnabled || bindings.searchQuery.isEmpty {
if dynamicEntriesEnabled || bindings.searchQuery.isEmpty {
return rooms
}

View File

@@ -49,7 +49,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
roomSummaryProvider = userSession.clientProxy.roomSummaryProvider
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)
userSession.callbacks
@@ -74,12 +74,12 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
.weakAssign(to: \.state.selectedRoomID, on: self)
.store(in: &cancellables)
appSettings.$fuzzySearchEnabled
.weakAssign(to: \.state.fuzzySearchEnabled, on: self)
appSettings.$dynamicEntriesEnabled
.weakAssign(to: \.state.dynamicEntriesEnabled, on: self)
.store(in: &cancellables)
context.$viewState
.filter { _ in appSettings.fuzzySearchEnabled }
.filter { _ in appSettings.dynamicEntriesEnabled }
.map(\.bindings.searchQuery)
.debounceAndRemoveDuplicates()
.sink { [weak self] searchQuery in

View File

@@ -49,7 +49,7 @@ protocol DeveloperOptionsProtocol: AnyObject {
var notificationSettingsEnabled: Bool { get set }
var swiftUITimelineEnabled: Bool { get set }
var pollsInTimelineEnabled: Bool { get set }
var fuzzySearchEnabled: Bool { get set }
var dynamicEntriesEnabled: Bool { get set }
}
extension AppSettings: DeveloperOptionsProtocol { }

View File

@@ -39,8 +39,8 @@ struct DeveloperOptionsScreen: View {
}
Section("Room list") {
Toggle(isOn: $context.fuzzySearchEnabled) {
Text("Fuzzy search")
Toggle(isOn: $context.dynamicEntriesEnabled) {
Text("Dynamic entries")
Text("Requires app reboot")
}
}

View File

@@ -80,16 +80,33 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
self.roomList = roomList
do {
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)
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)
}
let stateUpdatesSubscriptionResult = try roomList.loadingState(listener: RoomListStateObserver { [weak self] state in
guard let self else { return }
@@ -122,9 +139,9 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
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