Skip to content

Commit 1cca236

Browse files
author
Hanno Gödecke
committed
Adding loadMessagesInRoom back
1 parent e86593b commit 1cca236

File tree

4 files changed

+55
-0
lines changed

4 files changed

+55
-0
lines changed

android/src/main/java/de/hannojg/MatrixSdkModule.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import org.matrix.androidsdk.rest.model.CreatedEvent;
3838
import org.matrix.androidsdk.rest.model.Event;
3939
import org.matrix.androidsdk.rest.model.PushersResponse;
40+
import org.matrix.androidsdk.rest.model.TokensChunkEvents;
4041
import org.matrix.androidsdk.rest.model.User;
4142
import org.matrix.androidsdk.rest.model.login.Credentials;
4243

@@ -581,6 +582,37 @@ public void unlisten() {
581582
}
582583
}
583584

585+
@ReactMethod
586+
public void loadMessagesInRoom(String roomId, int perPage, boolean initialLoad, Promise promise) {
587+
if (mxSession == null) {
588+
promise.reject(E_MATRIX_ERROR, "client is not connected yet");
589+
return;
590+
}
591+
592+
Room room = mxSession.getDataHandler().getRoom(roomId);
593+
if (room == null) {
594+
promise.reject(E_MATRIX_ERROR, "Room not found");
595+
return;
596+
}
597+
598+
String fromToken = null;
599+
if (!initialLoad && roomPaginationTokens.get(roomId) != null) {
600+
fromToken = roomPaginationTokens.get(roomId);
601+
}
602+
603+
room.requestServerRoomHistory(fromToken, perPage, new RejectingOnErrorApiCallback<TokensChunkEvents>(promise) {
604+
@Override
605+
public void onSuccess(TokensChunkEvents info) {
606+
roomPaginationTokens.put(roomId, info.end);
607+
WritableArray msgs = Arguments.createArray();
608+
for (Event event : info.chunk) {
609+
msgs.pushMap(convertEventToMap(event));
610+
}
611+
promise.resolve(msgs);
612+
}
613+
});
614+
}
615+
584616
@ReactMethod
585617
public void backPaginate(String roomId, int perPage, boolean initHistory, Promise promise) {
586618
if (mxSession == null) {

ios/MatrixSdk.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ + (BOOL)requiresMainQueueSetup
5858

5959
RCT_EXTERN_METHOD(unlisten)
6060

61+
RCT_EXTERN_METHOD(loadMessagesInRoom:(NSString *)roomId perPage:(nonnull NSNumber *)perPage initialLoad:(BOOL *)initialLoad resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
62+
6163
RCT_EXTERN_METHOD(backPaginate:(NSString *)roomId perPage:(nonnull NSNumber *)perPage initHistory:(BOOL *)initHistory resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
6264

6365
RCT_EXTERN_METHOD(canBackPaginate:(NSString *)roomId resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)

ios/RNMatrixSDK.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,19 @@ class RNMatrixSDK: RCTEventEmitter {
682682
})
683683
}
684684

685+
@objc(loadMessagesInRoom:perPage:initialLoad:resolver:rejecter:)
686+
func loadMessagesInRoom(roomId: String, perPage: NSNumber, initialLoad: Bool, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
687+
var fromToken = ""
688+
if(!initialLoad) {
689+
fromToken = roomPaginationTokens[roomId] ?? ""
690+
if(fromToken.isEmpty) {
691+
print("Warning: trying to load not initial messages, but the SDK has no token set for this room currently. You need to run with initialLoad: true first!")
692+
}
693+
}
694+
695+
getMessages(roomId: roomId, from: fromToken, direction: "backwards", limit: perPage, resolve: resolve, reject: reject)
696+
}
697+
685698
@objc(getMessages:from:direction:limit:resolver:rejecter:)
686699
func getMessages(roomId: String, from: String, direction: String, limit: NSNumber, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
687700
if mxSession == nil {

types/index.d.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,14 @@ declare module 'react-native-matrix-sdk' {
154154
*/
155155
backPaginate(roomId: string, perPage: number, initHistory: boolean): Promise<MXMessageEvent[]>;
156156

157+
/**
158+
* Requests room history from server.
159+
* @param roomId
160+
* @param perPage
161+
* @param initialLoad set to true on first request (initial request, newest messages), any additional calls with false to get further room history
162+
*/
163+
loadMessagesInRoom(roomId: string, perPage: number, initialLoad: boolean): Promise<MXMessageEvent[]>;
164+
157165
/**
158166
* Returns true when back pagination is (still) possible.
159167
* @param roomId

0 commit comments

Comments
 (0)