From 84bee0da2009c1a8f7c0d09ffce6b24e60248e00 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Thu, 26 May 2022 16:21:56 +0200 Subject: [PATCH] Load chats on boot --- .../reactiveapi/transformer/LoadChats.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/main/java/it/tdlight/reactiveapi/transformer/LoadChats.java diff --git a/src/main/java/it/tdlight/reactiveapi/transformer/LoadChats.java b/src/main/java/it/tdlight/reactiveapi/transformer/LoadChats.java new file mode 100644 index 0000000..ff84ce3 --- /dev/null +++ b/src/main/java/it/tdlight/reactiveapi/transformer/LoadChats.java @@ -0,0 +1,37 @@ +package it.tdlight.reactiveapi.transformer; + +import it.tdlight.jni.TdApi; +import it.tdlight.jni.TdApi.ChatListArchive; +import it.tdlight.jni.TdApi.ChatListMain; +import it.tdlight.reactiveapi.Event.OnUpdateData; +import it.tdlight.reactiveapi.ResultingEvent; +import it.tdlight.reactiveapi.ResultingEvent.ClientBoundResultingEvent; +import it.tdlight.reactiveapi.ResultingEvent.TDLibBoundResultingEvent; +import it.tdlight.reactiveapi.ResultingEventTransformer; +import java.util.List; +import reactor.core.publisher.Flux; + +public class LoadChats implements ResultingEventTransformer { + + @Override + public Flux transform(boolean isBot, Flux events) { + if (isBot) { + return events; + } + return events.concatMapIterable(event -> { + + // Append the LoadChat call if the ready auth state is intercepted + if (event instanceof ClientBoundResultingEvent clientBoundResultingEvent + && clientBoundResultingEvent.event() instanceof OnUpdateData onUpdate + && onUpdate.update() instanceof TdApi.UpdateAuthorizationState authorizationState + && authorizationState.authorizationState instanceof TdApi.AuthorizationStateReady) { + return List.of(event, + new TDLibBoundResultingEvent<>(new TdApi.LoadChats(new ChatListMain(), 500)), + new TDLibBoundResultingEvent<>(new TdApi.LoadChats(new ChatListArchive(), 500)) + ); + } + + return List.of(event); + }); + } +}