/* Copyright 2024 New Vector Ltd. Copyright 2015 OpenMarket Ltd SPDX-License-Identifier: AGPL-3.0-only Please see LICENSE in the repository root for full details. */ #import "MXKSessionRecentsDataSource.h" /** 'MXKRecentsDataSource' is a base class to handle recents from one or multiple matrix sessions. A 'MXKRecentsDataSource' instance provides the recents data source for `MXKRecentListViewController`. By default, the recents list of different sessions are handled into separate sections. */ @interface MXKRecentsDataSource : MXKDataSource { @protected /** Array of `MXKSessionRecentsDataSource` instances. Only ready and non empty data source are listed here. (Note: a data source may be considered as empty during searching) */ NSMutableArray *displayedRecentsDataSourceArray; /** Array of shrinked sources. Sub-list of displayedRecentsDataSourceArray. */ NSMutableArray *shrinkedRecentsDataSourceArray; } /** List of associated matrix sessions. */ @property (nonatomic, readonly) NSArray* mxSessions; /** The number of available recents data sources (This count may be different than mxSession.count because empty data sources are ignored). */ @property (nonatomic, readonly) NSUInteger displayedRecentsDataSourcesCount; /** Tell whether there are some unread messages. */ @property (nonatomic, readonly) BOOL hasUnread; /** The current search patterns list. */ @property (nonatomic, readonly) NSArray* searchPatternsList; @property (nonatomic, strong) MXSpace *currentSpace; #pragma mark - Configuration /** Add recents data from a matrix session. @param mxSession the Matrix session to retrieve contextual data. @return the new 'MXKSessionRecentsDataSource' instance created for this Matrix session. */ - (MXKSessionRecentsDataSource *)addMatrixSession:(MXSession*)mxSession; /** Remove recents data related to a matrix session. @param mxSession the session to remove. */ - (void)removeMatrixSession:(MXSession*)mxSession; /** Filter the current recents list according to the provided patterns. @param patternsList the list of patterns (`NSString` instances) to match with. Set nil to cancel search. */ - (void)searchWithPatterns:(NSArray*)patternsList; /** Get the section header view. @param section the section index @param frame the drawing area for the header of the specified section. @param tableView the table view @return the section header. */ - (UIView *)viewForHeaderInSection:(NSInteger)section withFrame:(CGRect)frame inTableView:(UITableView*)tableView; /** Get the data for the cell at the given index path. @param indexPath the index of the cell @return the cell data */ - (id)cellDataAtIndexPath:(NSIndexPath*)indexPath; /** Get the height of the cell at the given index path. @param indexPath the index of the cell @return the cell height */ - (CGFloat)cellHeightAtIndexPath:(NSIndexPath*)indexPath; /** Get the index path of the cell related to the provided roomId and session. @param roomId the room identifier. @param mxSession the matrix session in which the room should be available. @return indexPath the index of the cell (nil if not found or if the related section is shrinked). */ - (NSIndexPath*)cellIndexPathWithRoomId:(NSString*)roomId andMatrixSession:(MXSession*)mxSession; /** Returns the room at the index path @param indexPath the index of the cell @return the MXRoom if it exists */ - (MXRoom*)getRoomAtIndexPath:(NSIndexPath *)indexPath; /** Leave the room at the index path @param indexPath the index of the cell */ - (void)leaveRoomAtIndexPath:(NSIndexPath *)indexPath; /** Action registered on buttons used to shrink/disclose recents sources. */ - (IBAction)onButtonPressed:(id)sender; @end