Create suggested rooms fetcher

This commit is contained in:
ismailgulek 2021-10-02 02:10:06 +03:00
parent f9bd1a7542
commit 5cc9633564
No known key found for this signature in database
GPG key ID: E96336D42D9470A9
2 changed files with 22 additions and 12 deletions

View file

@ -43,7 +43,6 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou
@interface RecentsDataSource() <SecureBackupBannerCellDelegate, CrossSigningSetupBannerCellDelegate, MXRoomListDataFetcherDelegate> @interface RecentsDataSource() <SecureBackupBannerCellDelegate, CrossSigningSetupBannerCellDelegate, MXRoomListDataFetcherDelegate>
{ {
RecentsDataSourceState *state;
dispatch_queue_t processingQueue; dispatch_queue_t processingQueue;
NSInteger shrinkedSectionsBitMask; NSInteger shrinkedSectionsBitMask;
@ -174,9 +173,13 @@ NSString *const kRecentsDataSourceTapOnDirectoryServerChange = @"kRecentsDataSou
} }
return [self mapRoomSummaries:fetchersContainer.serverNoticeRoomListDataFetcher.data.rooms]; return [self mapRoomSummaries:fetchersContainer.serverNoticeRoomListDataFetcher.data.rooms];
} }
- (NSArray *)suggestedRoomCellDataArray - (NSArray<id<MXKRecentCellDataStoring>> *)suggestedRoomCellDataArray
{ {
return state.suggestedRoomCellDataArray; if (!fetchersContainer.shouldShowSuggested)
{
return nil;
}
return [self mapRoomSummaries:fetchersContainer.suggestedRoomListDataFetcher.data.rooms];
} }
- (DiscussionsCount *)favoriteMissedDiscussionsCount - (DiscussionsCount *)favoriteMissedDiscussionsCount

View file

@ -60,10 +60,10 @@ public class RecentsRoomListFetchersContainer: NSObject {
// MARK: - Private // MARK: - Private
private var fetcherTypesForMode: [RecentsDataSourceMode: FetcherTypes] = [ private var fetcherTypesForMode: [RecentsDataSourceMode: FetcherTypes] = [
.home: [.invited, .favorited, .directHome, .conversationHome, .lowPriority, .serverNotice], .home: [.invited, .favorited, .directHome, .conversationHome, .lowPriority, .serverNotice, .suggested],
.favourites: [.favorited], .favourites: [.favorited],
.people: [.directPeople], .people: [.directPeople],
.rooms: [.conversationRooms] .rooms: [.conversationRooms, .suggested]
] ]
private var allFetchers: [MXRoomListDataFetcher] { private var allFetchers: [MXRoomListDataFetcher] {
@ -229,6 +229,10 @@ public class RecentsRoomListFetchersContainer: NSObject {
return fetcherTypesForMode[mode]?.contains(.serverNotice) ?? false return fetcherTypesForMode[mode]?.contains(.serverNotice) ?? false
} }
public var shouldShowSuggested: Bool {
return fetcherTypesForMode[mode]?.contains(.suggested) ?? false
}
public func updateMode(_ mode: RecentsDataSourceMode) { public func updateMode(_ mode: RecentsDataSourceMode) {
self.mode = mode self.mode = mode
if let fetcher = favoritedRoomListDataFetcher { if let fetcher = favoritedRoomListDataFetcher {
@ -300,10 +304,13 @@ public class RecentsRoomListFetchersContainer: NSObject {
} }
} }
private func createCommonRoomListDataFetcher(withDataTypes dataTypes: MXRoomSummaryDataTypes, private func createCommonRoomListDataFetcher(withDataTypes dataTypes: MXRoomSummaryDataTypes = [],
onlySuggested: Bool = false,
paginate: Bool = true) -> MXRoomListDataFetcher { paginate: Bool = true) -> MXRoomListDataFetcher {
let filterOptions = MXRoomListDataFilterOptions(dataTypes: dataTypes, let filterOptions = MXRoomListDataFilterOptions(dataTypes: dataTypes,
query: query) onlySuggested: onlySuggested,
query: query,
space: space)
let fetchOptions = MXRoomListDataFetchOptions(filterOptions: filterOptions, let fetchOptions = MXRoomListDataFetchOptions(filterOptions: filterOptions,
sortOptions: sortOptions, sortOptions: sortOptions,
@ -316,7 +323,7 @@ public class RecentsRoomListFetchersContainer: NSObject {
return fetcher return fetcher
} }
private func createDirectRoomListDataFetcherForHome() -> MXRoomListDataFetcher? { private func createDirectRoomListDataFetcherForHome() -> MXRoomListDataFetcher {
let fetcher = createCommonRoomListDataFetcher(withDataTypes: [.direct], paginate: false) let fetcher = createCommonRoomListDataFetcher(withDataTypes: [.direct], paginate: false)
updateDirectFetcher(fetcher, for: .home) updateDirectFetcher(fetcher, for: .home)
fetcher.addDelegate(self) fetcher.addDelegate(self)
@ -324,7 +331,7 @@ public class RecentsRoomListFetchersContainer: NSObject {
return fetcher return fetcher
} }
private func createDirectRoomListDataFetcherForPeople() -> MXRoomListDataFetcher? { private func createDirectRoomListDataFetcherForPeople() -> MXRoomListDataFetcher {
let fetcher = createCommonRoomListDataFetcher(withDataTypes: [.direct], paginate: false) let fetcher = createCommonRoomListDataFetcher(withDataTypes: [.direct], paginate: false)
updateDirectFetcher(fetcher, for: .people) updateDirectFetcher(fetcher, for: .people)
fetcher.addDelegate(self) fetcher.addDelegate(self)
@ -332,7 +339,7 @@ public class RecentsRoomListFetchersContainer: NSObject {
return fetcher return fetcher
} }
private func createConversationRoomListDataFetcherForHome() -> MXRoomListDataFetcher? { private func createConversationRoomListDataFetcherForHome() -> MXRoomListDataFetcher {
let fetcher = createCommonRoomListDataFetcher(withDataTypes: [], paginate: false) let fetcher = createCommonRoomListDataFetcher(withDataTypes: [], paginate: false)
updateConversationFetcher(fetcher, for: .home) updateConversationFetcher(fetcher, for: .home)
fetcher.addDelegate(self) fetcher.addDelegate(self)
@ -340,7 +347,7 @@ public class RecentsRoomListFetchersContainer: NSObject {
return fetcher return fetcher
} }
private func createConversationRoomListDataFetcherForRooms() -> MXRoomListDataFetcher? { private func createConversationRoomListDataFetcherForRooms() -> MXRoomListDataFetcher {
let fetcher = createCommonRoomListDataFetcher(withDataTypes: [], paginate: false) let fetcher = createCommonRoomListDataFetcher(withDataTypes: [], paginate: false)
updateConversationFetcher(fetcher, for: .rooms) updateConversationFetcher(fetcher, for: .rooms)
fetcher.addDelegate(self) fetcher.addDelegate(self)
@ -359,7 +366,7 @@ public class RecentsRoomListFetchersContainer: NSObject {
conversationRoomListDataFetcherForRooms = createConversationRoomListDataFetcherForRooms() conversationRoomListDataFetcherForRooms = createConversationRoomListDataFetcherForRooms()
lowPriorityRoomListDataFetcher = createCommonRoomListDataFetcher(withDataTypes: [.lowPriority]) lowPriorityRoomListDataFetcher = createCommonRoomListDataFetcher(withDataTypes: [.lowPriority])
serverNoticeRoomListDataFetcher = createCommonRoomListDataFetcher(withDataTypes: [.serverNotice]) serverNoticeRoomListDataFetcher = createCommonRoomListDataFetcher(withDataTypes: [.serverNotice])
suggestedRoomListDataFetcher = createCommonRoomListDataFetcher(withDataTypes: [.suggested]) suggestedRoomListDataFetcher = createCommonRoomListDataFetcher(onlySuggested: true)
} }
private func updateDirectFetcher(_ fetcher: MXRoomListDataFetcher, for mode: RecentsDataSourceMode) { private func updateDirectFetcher(_ fetcher: MXRoomListDataFetcher, for mode: RecentsDataSourceMode) {