# Room List - TapCore

If you are using core implementation type, you can manage the application's chat room list with the following methods:

{% hint style="warning" %}
**Note:** Please add **`#import <TapTalk/TapCoreRoomListManager.h>`** before using these methods.
{% endhint %}

| **TapTalk Room List Method**                                                | **Description**                                                                                    |
| --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
| [Get Updated Room List](#get-updated-room-list)                             | Call this method to fetch the latest room list data from the server and update to the local cache. |
| [Get Room List From Cache](#get-room-list-from-cache)                       | Call this method to retrieve list of room data obtained from the local cache.                      |
| [Fetch New Message](#fetch-new-message)                                     | Call this method to fetch new/updated messages that have not yet been received by the device       |
| [Search Local Room List](#search-local-room-list)                           | Call this method to search room lists from the device's local storage with a keyword               |
| [​Mark Chat Room as Unread](#mark-chat-room-as-unread)                      | ​Adds the chat room ID to the marked as unread chat room list​                                     |
| [​Remove Unread Mark from Chat Room​](#remove-unread-mark-from-chat-room)   | Removes chat room ID from the marked as unread chat room list​                                     |
| [Get Marked as Unread Chat Room List](#get-marked-as-unread-chat-room-list) | ​Retrieve the list of chat room IDs that has been marked as unread                                 |
| [Mute/Unmute Chat Room](#mute-unmute-chat-room)                             | Mute selected chat rooms until a specified time                                                    |
| [Get Muted Chat Rooms](#get-muted-chat-rooms)                               | Retrieve the list of muted chat room IDs and their respective mute expiry time                     |
| [Pin/Unpin Chat Room](#pin-unpin-chat-room)                                 | Add or remove the chat room ID to pinned chat room list                                            |
| [Get Pinned Chat Rooms](#get-pinned-chat-rooms)                             | Retrieve list of pinned chat room IDs from the server                                              |

### Get Updated Room List

Call this method to fetch the latest room list data from the server and update to the local cache.

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>
  
[[TAPCoreRoomListManager sharedManager] getUpdatedRoomListWithSuccess:^(NSArray<TAPRoomListModel *> * _Nonnull roomListArray) {
    //Success get updated room list data
} failure:^(NSError * _Nonnull error) {
    //Failed get updated room list data
}];
```

{% endtab %}
{% endtabs %}

### Get Room List From Cache

Call this method to retrieve list of room data obtained from the local cache.this method to fetch the latest room list data from the server and update to the local cache.

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>
  
[[TAPCoreRoomListManager sharedManager] getRoomListFromCacheWithSuccess:^(NSArray<TAPRoomListModel *> * _Nonnull roomListResultArray) {
    //Success get room list data
} failure:^(NSError * _Nonnull error) {
    //Failed get room list data
}];
```

{% endtab %}
{% endtabs %}

### Fetch New Message

Call this method to fetch new/updated messages that have not yet been received by the device. Can be used to retrieve pending messages when the device goes back online after an offline state.

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>
  
[[TAPCoreRoomListManager sharedManager] fetchNewMessagesWithSuccess:^(NSArray<TAPMessageModel *> * _Nonnull messageArray) {
    // Returns list of messages received by the user while the device is offline
} failure:^(NSError * _Nonnull error) {
    // Failed to get messages
}];
```

{% endtab %}
{% endtabs %}

### Search Local Room List

Call this method to search room lists from the device's local storage with a keyword. Provided keyword will be used to filter **room name** in the search result.

{% tabs %}
{% tab title="Objective-C" %}

```objectivec
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>
  
[[TAPCoreRoomListManager sharedManager] searchLocalRoomListWithKeyword:KEYWORD success:^(NSArray<TAPRoomListModel *> * _Nonnull roomListResultArray) {
    // Returns filtered room lists obtained from cache
} failure:^(NSError * _Nonnull error) {
    // Failed to get room list data
}];
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Parameters**\
\&#xNAN;**`KEYWORD`**: (String) search keyword to filter room name
{% endhint %}

### Mark Chat Room as Unread

Call this method to add the selected chat room ID to the marked as unread chat room list.

{% tabs %}
{% tab title="Objective-C" %}

```java
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>

// Mark single chat room as unread
[[TAPCoreRoomListManager sharedManager] markChatRoomAsUnreadWithRoomID:ROOM_ID 
success:^{
    // Successfully marked chat room as unread
} 
failure:^(NSError * _Nonnull error) {
        
}];


// Mark multiple chat rooms as unread
[[TAPCoreRoomListManager sharedManager] markChatRoomsAsUnreadWithRoomID:ROOM_IDS 
success:^{
    // Successfully marked chat rooms as unread
} 
failure:^(NSError * _Nonnull error) {
        
}];
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Parameters**\
\&#xNAN;**`ROOM_ID`**: (NSString) ID of the target room\
\&#xNAN;**`ROOM_IDS`**: (NSArray\<NsSString>) array containing IDs of target rooms
{% endhint %}

### Remove Unread Mark from Chat Room

Call this method to remove the selected chat room ID from the marked as unread chat room list.

{% tabs %}
{% tab title="Objective-C" %}

```java
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>

// Remove unread mark from single chat room
[[TAPCoreRoomListManager sharedManager] removeUnreadMarkFromChatRoom:ROOM_ID 
success:^{
    // Successfully removed unread mark from chat room
} 
failure:^(NSError * _Nonnull error) {
        
}];


// Remove unread mark from multiple chat rooms
[[TAPCoreRoomListManager sharedManager] removeUnreadMarkFromChatRooms:ROOM_IDS 
success:^{
    // Successfully removed unread mark from chat rooms
} 
failure:^(NSError * _Nonnull error) {
        
}];
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Parameters**\
\&#xNAN;**`ROOM_ID`**: (NSString) ID of the target room\
\&#xNAN;**`ROOM_IDS`**: (NSArray\<NsSString>) array containing IDs of target rooms
{% endhint %}

### Get Marked as Unread Chat Room List

Call this method to retrieve the list of chat room IDs that has been marked as unread.

{% tabs %}
{% tab title="Objective-C" %}

```java
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>

[[TAPCoreRoomListManager sharedManager] getMarkedAsUnreadChatRoomListWithSuccess:^(NSArray * _Nonnull unreadRoomIDs) {
    // Returns list of roomID that has been marked as unread
} 
failure:^(NSError * _Nonnull error) {
    
}];
```

{% endtab %}
{% endtabs %}

### Mute/Unmute Chat Room

Call these methods to mute the selected chat rooms until a specified time. Active user will not receive notifications from muted chat rooms.

{% tabs %}
{% tab title="Objective-C" %}

```java
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>

// Mute a single chat room
[[TAPCoreRoomListManager sharedManager] muteChatRoomWithRoomID:ROOM_ID 
                                                     expiredAt:EXPIRED_AT
success:^{
    // Successfully muted chat room
} 
failure:^(NSError * _Nonnull error) {
        
}];

// Mute multiple chat rooms
[[TAPCoreRoomListManager sharedManager] muteChatRoomsWithRoomIDs:ROOM_IDS
                                                       expiredAt:EXPIRED_AT
success:^{
    // Successfully muted chat rooms
} 
failure:^(NSError * _Nonnull error) {
        
}];
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Parameters**\
\&#xNAN;**`ROOM_ID`**: (NSString) ID of the target room\
\&#xNAN;**`ROOM_IDS`**: (NSArray\<NsSString>) array containing IDs of target rooms\
\&#xNAN;**`EXPIRED_AT`**: (NSNumber) chat room will stay muted until this time, fill with 0 to mute the room forever or until the room is unmuted
{% endhint %}

To return chat rooms to its normal state and continue retrieving notifications, use `unmuteChatRoomWithRoomID:` method.

{% tabs %}
{% tab title="Objective-C" %}

```java
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>

// Unmute a single chat room
[[TAPCoreRoomListManager sharedManager] unmuteChatRoomWithRoomID:ROOM_ID 
success:^(NSArray *roomIDs) {
    // Successfully unmuted chat room
} 
failure:^(NSError * _Nonnull error) {
        
}];

// Unmute multiple chat rooms
[[TAPCoreRoomListManager sharedManager] unmuteChatRoomsWithRoomIDs:ROOM_IDS
success:^(NSArray *roomIDs) {
    // Successfully unmuted chat rooms
} 
failure:^(NSError * _Nonnull error) {
        
}];
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Parameters**\
\&#xNAN;**`ROOM_ID`**: (NSString) ID of the target room\
\&#xNAN;**`ROOM_IDS`**: (NSArray\<NsSString>) array containing IDs of target rooms
{% endhint %}

### Get Muted Chat Rooms

Retrieve the list of muted chat room IDs and their respective mute expiry time.

{% tabs %}
{% tab title="Objective-C" %}

```java
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>

[[TAPCoreRoomListManager sharedManager] getMutedChatRoomListWithSuccess:^(NSMutableArray<TAPMutedRoomModel *> *mutedRoomListArray) {
    // Returns list of TAPMutedRoomModel which contains 
    // roomID and expiry time of the muted chat rooms
} 
failure:^(NSError * _Nonnull error) {
    
}];
```

{% endtab %}
{% endtabs %}

### Pin/Unpin Chat Room

You may call `pinChatRoomWithRoomID:` to add or remove the chat room ID to pinned chat room list. Chat rooms pinned by the user are generally shown on top of the chat room list. You can later retrieve the list of pinned chat room IDs with `getPinnedChatRoomIDs`.

{% tabs %}
{% tab title="Objective-C" %}

```java
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>

// Pin a single chat room
[[TAPCoreRoomListManager sharedManager] pinChatRoomWithRoomID:ROOM_ID 
success:^(NSArray *roomIDs) {
    // Successfully pinned chat room
} 
failure:^(NSError * _Nonnull error) {
        
}];

// Pin multiple chat rooms
[[TAPCoreRoomListManager sharedManager] pinChatRoomsWithRoomIDs:ROOM_IDS
success:^(NSArray *roomIDs) {
    // Successfully pinned chat rooms
} 
failure:^(NSError * _Nonnull error) {
        
}];
```

{% endtab %}
{% endtabs %}

Use `unpinChatRoomWithRoomID:` to remove existing pinned chat room ID from the pinned chat room list.

{% tabs %}
{% tab title="Objective-C" %}

```java
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>

// Unpin a single chat room
[[TAPCoreRoomListManager sharedManager] unpinChatRoomWithRoomID:ROOM_ID 
success:^(NSArray *roomIDs) {
    // Successfully unpinned chat room
} 
failure:^(NSError * _Nonnull error) {
        
}];

// Pin multiple chat rooms
[[TAPCoreRoomListManager sharedManager] unpinChatRoomsWithRoomIDs:ROOM_IDS
success:^(NSArray *roomIDs) {
    // Successfully unpinned chat rooms
} 
failure:^(NSError * _Nonnull error) {
        
}];
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
**Parameters**\
\&#xNAN;**`ROOM_ID`**: (NSString) ID of the target room\
\&#xNAN;**`ROOM_IDS`**: (NSArray\<NsSString>) array containing IDs of target rooms
{% endhint %}

### Get Pinned Chat Rooms

You can retrieve the list of the active user's pinned chat room IDs from the server with `getPinnedChatRoomIDs`.

{% tabs %}
{% tab title="Objective-C" %}

```java
//import TapTalk Room List Manager
#import <TapTalk/TapCoreRoomListManager.h>

[[TAPCoreRoomListManager sharedManager] getPinnedChatRoomIDsWithSuccess:^(NSArray *pinnedRoomIDs) {
    // Returns list of roomID of the active user's pinned chat rooms
} 
failure:^(NSError * _Nonnull error) {
    
}];
```

{% endtab %}
{% endtabs %}
