mirror of
https://github.com/element-hq/element-x-ios.git
synced 2025-03-11 13:59:13 +00:00
Add a feature flag for fuzzy room list searching
This commit is contained in:
parent
5f9310e943
commit
b614f43d00
@ -45,6 +45,7 @@ final class AppSettings {
|
|||||||
// Feature flags
|
// Feature flags
|
||||||
case publicSearchEnabled
|
case publicSearchEnabled
|
||||||
case draftRestoringEnabled
|
case draftRestoringEnabled
|
||||||
|
case fuzzyRoomListSearchEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
private static var suiteName: String = InfoPlistReader.main.appGroupIdentifier
|
private static var suiteName: String = InfoPlistReader.main.appGroupIdentifier
|
||||||
@ -273,6 +274,9 @@ final class AppSettings {
|
|||||||
@UserPreference(key: UserDefaultsKeys.draftRestoringEnabled, defaultValue: false, storageType: .userDefaults(store))
|
@UserPreference(key: UserDefaultsKeys.draftRestoringEnabled, defaultValue: false, storageType: .userDefaults(store))
|
||||||
var draftRestoringEnabled
|
var draftRestoringEnabled
|
||||||
|
|
||||||
|
@UserPreference(key: UserDefaultsKeys.fuzzyRoomListSearchEnabled, defaultValue: false, storageType: .userDefaults(store))
|
||||||
|
var fuzzyRoomListSearchEnabled
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// MARK: - Shared
|
// MARK: - Shared
|
||||||
|
@ -48,6 +48,7 @@ protocol DeveloperOptionsProtocol: AnyObject {
|
|||||||
var hideUnreadMessagesBadge: Bool { get set }
|
var hideUnreadMessagesBadge: Bool { get set }
|
||||||
var draftRestoringEnabled: Bool { get set }
|
var draftRestoringEnabled: Bool { get set }
|
||||||
var elementCallBaseURL: URL { get set }
|
var elementCallBaseURL: URL { get set }
|
||||||
|
var fuzzyRoomListSearchEnabled: Bool { get set }
|
||||||
}
|
}
|
||||||
|
|
||||||
extension AppSettings: DeveloperOptionsProtocol { }
|
extension AppSettings: DeveloperOptionsProtocol { }
|
||||||
|
@ -31,6 +31,10 @@ struct DeveloperOptionsScreen: View {
|
|||||||
Toggle(isOn: $context.hideUnreadMessagesBadge) {
|
Toggle(isOn: $context.hideUnreadMessagesBadge) {
|
||||||
Text("Hide grey dots")
|
Text("Hide grey dots")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Toggle(isOn: $context.fuzzyRoomListSearchEnabled) {
|
||||||
|
Text("Fuzzy searching")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Section("Room") {
|
Section("Room") {
|
||||||
|
@ -24,6 +24,7 @@ import MatrixRustSDK
|
|||||||
class ClientProxy: ClientProxyProtocol {
|
class ClientProxy: ClientProxyProtocol {
|
||||||
private let client: ClientProtocol
|
private let client: ClientProtocol
|
||||||
private let networkMonitor: NetworkMonitorProtocol
|
private let networkMonitor: NetworkMonitorProtocol
|
||||||
|
private let appSettings: AppSettings
|
||||||
|
|
||||||
private let mediaLoader: MediaLoaderProtocol
|
private let mediaLoader: MediaLoaderProtocol
|
||||||
private let clientQueue: DispatchQueue
|
private let clientQueue: DispatchQueue
|
||||||
@ -123,9 +124,11 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
private let sendQueueStatusSubject = CurrentValueSubject<Bool, Never>(false)
|
private let sendQueueStatusSubject = CurrentValueSubject<Bool, Never>(false)
|
||||||
|
|
||||||
init(client: ClientProtocol,
|
init(client: ClientProtocol,
|
||||||
networkMonitor: NetworkMonitorProtocol) async {
|
networkMonitor: NetworkMonitorProtocol,
|
||||||
|
appSettings: AppSettings) async {
|
||||||
self.client = client
|
self.client = client
|
||||||
self.networkMonitor = networkMonitor
|
self.networkMonitor = networkMonitor
|
||||||
|
self.appSettings = appSettings
|
||||||
|
|
||||||
clientQueue = .init(label: "ClientProxyQueue", attributes: .concurrent)
|
clientQueue = .init(label: "ClientProxyQueue", attributes: .concurrent)
|
||||||
|
|
||||||
@ -726,13 +729,15 @@ class ClientProxy: ClientProxyProtocol {
|
|||||||
eventStringBuilder: eventStringBuilder,
|
eventStringBuilder: eventStringBuilder,
|
||||||
name: "AllRooms",
|
name: "AllRooms",
|
||||||
shouldUpdateVisibleRange: true,
|
shouldUpdateVisibleRange: true,
|
||||||
notificationSettings: notificationSettings)
|
notificationSettings: notificationSettings,
|
||||||
|
appSettings: appSettings)
|
||||||
try await roomSummaryProvider?.setRoomList(roomListService.allRooms())
|
try await roomSummaryProvider?.setRoomList(roomListService.allRooms())
|
||||||
|
|
||||||
alternateRoomSummaryProvider = RoomSummaryProvider(roomListService: roomListService,
|
alternateRoomSummaryProvider = RoomSummaryProvider(roomListService: roomListService,
|
||||||
eventStringBuilder: eventStringBuilder,
|
eventStringBuilder: eventStringBuilder,
|
||||||
name: "MessageForwarding",
|
name: "MessageForwarding",
|
||||||
notificationSettings: notificationSettings)
|
notificationSettings: notificationSettings,
|
||||||
|
appSettings: appSettings)
|
||||||
try await alternateRoomSummaryProvider?.setRoomList(roomListService.allRooms())
|
try await alternateRoomSummaryProvider?.setRoomList(roomListService.allRooms())
|
||||||
|
|
||||||
self.syncService = syncService
|
self.syncService = syncService
|
||||||
|
@ -24,6 +24,7 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
|
|||||||
private let name: String
|
private let name: String
|
||||||
private let shouldUpdateVisibleRange: Bool
|
private let shouldUpdateVisibleRange: Bool
|
||||||
private let notificationSettings: NotificationSettingsProxyProtocol
|
private let notificationSettings: NotificationSettingsProxyProtocol
|
||||||
|
private let appSettings: AppSettings
|
||||||
|
|
||||||
private let roomListPageSize = 200
|
private let roomListPageSize = 200
|
||||||
|
|
||||||
@ -65,13 +66,15 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
|
|||||||
eventStringBuilder: RoomEventStringBuilder,
|
eventStringBuilder: RoomEventStringBuilder,
|
||||||
name: String,
|
name: String,
|
||||||
shouldUpdateVisibleRange: Bool = false,
|
shouldUpdateVisibleRange: Bool = false,
|
||||||
notificationSettings: NotificationSettingsProxyProtocol) {
|
notificationSettings: NotificationSettingsProxyProtocol,
|
||||||
|
appSettings: AppSettings) {
|
||||||
self.roomListService = roomListService
|
self.roomListService = roomListService
|
||||||
serialDispatchQueue = DispatchQueue(label: "io.element.elementx.roomsummaryprovider", qos: .default)
|
serialDispatchQueue = DispatchQueue(label: "io.element.elementx.roomsummaryprovider", qos: .default)
|
||||||
self.eventStringBuilder = eventStringBuilder
|
self.eventStringBuilder = eventStringBuilder
|
||||||
self.name = name
|
self.name = name
|
||||||
self.shouldUpdateVisibleRange = shouldUpdateVisibleRange
|
self.shouldUpdateVisibleRange = shouldUpdateVisibleRange
|
||||||
self.notificationSettings = notificationSettings
|
self.notificationSettings = notificationSettings
|
||||||
|
self.appSettings = appSettings
|
||||||
|
|
||||||
diffsPublisher
|
diffsPublisher
|
||||||
.receive(on: serialDispatchQueue)
|
.receive(on: serialDispatchQueue)
|
||||||
@ -148,7 +151,11 @@ class RoomSummaryProvider: RoomSummaryProviderProtocol {
|
|||||||
case .excludeAll:
|
case .excludeAll:
|
||||||
_ = listUpdatesSubscriptionResult?.controller.setFilter(kind: .none)
|
_ = listUpdatesSubscriptionResult?.controller.setFilter(kind: .none)
|
||||||
case let .search(query):
|
case let .search(query):
|
||||||
let filters: [RoomListEntriesDynamicFilterKind] = [.normalizedMatchRoomName(pattern: query), .nonLeft]
|
let filters: [RoomListEntriesDynamicFilterKind] = if appSettings.fuzzyRoomListSearchEnabled {
|
||||||
|
[.fuzzyMatchRoomName(pattern: query), .nonLeft]
|
||||||
|
} else {
|
||||||
|
[.normalizedMatchRoomName(pattern: query), .nonLeft]
|
||||||
|
}
|
||||||
_ = listUpdatesSubscriptionResult?.controller.setFilter(kind: .all(filters: filters))
|
_ = listUpdatesSubscriptionResult?.controller.setFilter(kind: .all(filters: filters))
|
||||||
case let .all(filters):
|
case let .all(filters):
|
||||||
var filters = filters.map(\.rustFilter)
|
var filters = filters.map(\.rustFilter)
|
||||||
|
@ -148,7 +148,8 @@ class UserSessionStore: UserSessionStoreProtocol {
|
|||||||
|
|
||||||
private func setupProxyForClient(_ client: Client) async -> ClientProxyProtocol {
|
private func setupProxyForClient(_ client: Client) async -> ClientProxyProtocol {
|
||||||
await ClientProxy(client: client,
|
await ClientProxy(client: client,
|
||||||
networkMonitor: ServiceLocator.shared.networkMonitor)
|
networkMonitor: ServiceLocator.shared.networkMonitor,
|
||||||
|
appSettings: ServiceLocator.shared.settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func deleteSessionDirectory(for credentials: KeychainCredentials) {
|
private func deleteSessionDirectory(for credentials: KeychainCredentials) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user