diff --git a/Riot/Model/RoomList/PublicRoomsDirectoryDataSource.h b/Riot/Model/RoomList/PublicRoomsDirectoryDataSource.h index 62aa79ada..38df54476 100644 --- a/Riot/Model/RoomList/PublicRoomsDirectoryDataSource.h +++ b/Riot/Model/RoomList/PublicRoomsDirectoryDataSource.h @@ -33,6 +33,23 @@ */ @interface PublicRoomsDirectoryDataSource : MXKDataSource +/** + The homeserver to list public rooms from. + Default is nil. In this case, the user's homeserver is used. + */ +@property (nonatomic, readonly) NSString *homeserver; + +/** + List public rooms from a third party protocol. + Default is nil. + */ +@property (nonatomic) MXThirdPartyProtocolInstance *thirdpartyProtocolInstance; + +/** + The display name of the current directory server. + */ +@property (nonatomic, readonly) NSString *directoryServerDisplayname; + /** The number of public rooms matching `searchPattern`. It is accurate only if 'moreThanRoomsCount' is NO. diff --git a/Riot/Model/RoomList/PublicRoomsDirectoryDataSource.m b/Riot/Model/RoomList/PublicRoomsDirectoryDataSource.m index 15a475649..e15e88aa5 100644 --- a/Riot/Model/RoomList/PublicRoomsDirectoryDataSource.m +++ b/Riot/Model/RoomList/PublicRoomsDirectoryDataSource.m @@ -59,6 +59,51 @@ double const kPublicRoomsDirectoryDataExpiration = 10; return self; } +- (NSString *)directoryServerDisplayname +{ + NSString *directoryServerDisplayname; + + if (_homeserver) + { + directoryServerDisplayname = _homeserver; + } + else if (_thirdpartyProtocolInstance) + { + directoryServerDisplayname = _thirdpartyProtocolInstance.desc; + } + else + { + directoryServerDisplayname = self.mxSession.matrixRestClient.credentials.homeServer; + } + + return directoryServerDisplayname; +} + + +- (void)setHomeserver:(NSString *)homeserver +{ + if (homeserver != _homeserver) + { + _homeserver = homeserver; + _thirdpartyProtocolInstance = nil; + + // Reset data + [self startPagination]; + } +} + +- (void)setThirdpartyProtocolInstance:(MXThirdPartyProtocolInstance *)thirdpartyProtocolInstance +{ + if (thirdpartyProtocolInstance != _thirdpartyProtocolInstance) + { + _homeserver = nil; + _thirdpartyProtocolInstance = thirdpartyProtocolInstance; + + // Reset data + [self startPagination]; + } +} + - (void)setSearchPattern:(NSString *)searchPattern { if (searchPattern) @@ -144,7 +189,7 @@ double const kPublicRoomsDirectoryDataExpiration = 10; // Get the public rooms from the server MXHTTPOperation *newPublicRoomsRequest; - newPublicRoomsRequest = [self.mxSession.matrixRestClient publicRoomsOnServer:nil limit:_paginationLimit since:nextBatch filter:_searchPattern thirdPartyInstanceId:nil includeAllNetworks:NO success:^(MXPublicRoomsResponse *publicRoomsResponse) { + newPublicRoomsRequest = [self.mxSession.matrixRestClient publicRoomsOnServer:_homeserver limit:_paginationLimit since:nextBatch filter:_searchPattern thirdPartyInstanceId:_thirdpartyProtocolInstance.instanceId includeAllNetworks:NO success:^(MXPublicRoomsResponse *publicRoomsResponse) { if (weakSelf) {