mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
Switch entirely to dynamic room list entries (normalizedMatchRoomName brings the same behavior as the old implementation) and cleanup
This commit is contained in:
committed by
Stefan Ceriu
parent
8dca82e65e
commit
269fd3d1f6
@@ -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
|
||||||
|
|||||||
-1
@@ -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 { }
|
||||||
|
|||||||
-7
@@ -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()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user