Load chats after startup
This commit is contained in:
parent
bf5281dfd1
commit
e31131b62c
|
@ -13,7 +13,7 @@ import java.nio.file.Paths;
|
||||||
/**
|
/**
|
||||||
* Example class for TDLight Java
|
* Example class for TDLight Java
|
||||||
* <p>
|
* <p>
|
||||||
* The documentation of the TDLight functions can be found here: https://tdlight-team.github.io/tdlight-docs
|
* <a href="https://tdlight-team.github.io/tdlight-docs">The documentation of the TDLight functions can be found here</a>
|
||||||
*/
|
*/
|
||||||
public final class Example {
|
public final class Example {
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
package it.tdlight.client;
|
package it.tdlight.client;
|
||||||
|
|
||||||
import it.tdlight.common.TelegramClient;
|
import it.tdlight.common.TelegramClient;
|
||||||
|
import it.tdlight.jni.TdApi;
|
||||||
import it.tdlight.jni.TdApi.AuthorizationStateReady;
|
import it.tdlight.jni.TdApi.AuthorizationStateReady;
|
||||||
import it.tdlight.jni.TdApi.GetMe;
|
import it.tdlight.jni.TdApi.GetMe;
|
||||||
import it.tdlight.jni.TdApi.UpdateAuthorizationState;
|
import it.tdlight.jni.TdApi.UpdateAuthorizationState;
|
||||||
import it.tdlight.jni.TdApi.User;
|
import it.tdlight.jni.TdApi.User;
|
||||||
import it.tdlight.jni.TdApi.Error;
|
import it.tdlight.jni.TdApi.Error;
|
||||||
|
import it.tdlight.jni.TdApi.UserTypeRegular;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
@ -15,11 +17,16 @@ final class AuthorizationStateReadyGetMe implements GenericUpdateHandler<UpdateA
|
||||||
private static final Logger logger = LoggerFactory.getLogger(AuthorizationStateReadyGetMe.class);
|
private static final Logger logger = LoggerFactory.getLogger(AuthorizationStateReadyGetMe.class);
|
||||||
|
|
||||||
private final TelegramClient client;
|
private final TelegramClient client;
|
||||||
private final AtomicReference<User> me;
|
private final AtomicReference<User> me = new AtomicReference<>();
|
||||||
|
private final AuthorizationStateReadyLoadChats mainChatsLoader;
|
||||||
|
private final AuthorizationStateReadyLoadChats archivedChatsLoader;
|
||||||
|
|
||||||
public AuthorizationStateReadyGetMe(TelegramClient client, AtomicReference<User> me) {
|
public AuthorizationStateReadyGetMe(TelegramClient client,
|
||||||
|
AuthorizationStateReadyLoadChats mainChatsLoader,
|
||||||
|
AuthorizationStateReadyLoadChats archivedChatsLoader) {
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.me = me;
|
this.mainChatsLoader = mainChatsLoader;
|
||||||
|
this.archivedChatsLoader = archivedChatsLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -30,7 +37,15 @@ final class AuthorizationStateReadyGetMe implements GenericUpdateHandler<UpdateA
|
||||||
throw new TelegramError((Error) me);
|
throw new TelegramError((Error) me);
|
||||||
}
|
}
|
||||||
this.me.set((User) me);
|
this.me.set((User) me);
|
||||||
|
if (((User) me).type.getConstructor() == UserTypeRegular.CONSTRUCTOR) {
|
||||||
|
mainChatsLoader.onUpdate(update);
|
||||||
|
archivedChatsLoader.onUpdate(update);
|
||||||
|
}
|
||||||
}, error -> logger.warn("Failed to execute TdApi.GetMe()"));
|
}, error -> logger.warn("Failed to execute TdApi.GetMe()"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public User getMe() {
|
||||||
|
return me.get();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
package it.tdlight.client;
|
||||||
|
|
||||||
|
import it.tdlight.common.TelegramClient;
|
||||||
|
import it.tdlight.jni.TdApi;
|
||||||
|
import it.tdlight.jni.TdApi.AuthorizationStateReady;
|
||||||
|
import it.tdlight.jni.TdApi.ChatList;
|
||||||
|
import it.tdlight.jni.TdApi.ChatListMain;
|
||||||
|
import it.tdlight.jni.TdApi.Error;
|
||||||
|
import it.tdlight.jni.TdApi.GetMe;
|
||||||
|
import it.tdlight.jni.TdApi.LoadChats;
|
||||||
|
import it.tdlight.jni.TdApi.UpdateAuthorizationState;
|
||||||
|
import it.tdlight.jni.TdApi.User;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
final class AuthorizationStateReadyLoadChats implements GenericUpdateHandler<UpdateAuthorizationState> {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(AuthorizationStateReadyLoadChats.class);
|
||||||
|
|
||||||
|
private final TelegramClient client;
|
||||||
|
private final ChatList chatList;
|
||||||
|
|
||||||
|
private boolean loaded;
|
||||||
|
|
||||||
|
public AuthorizationStateReadyLoadChats(TelegramClient client, ChatList chatList) {
|
||||||
|
this.client = client;
|
||||||
|
this.chatList = chatList;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpdate(UpdateAuthorizationState update) {
|
||||||
|
if (update.authorizationState.getConstructor() == AuthorizationStateReady.CONSTRUCTOR) {
|
||||||
|
client.send(new LoadChats(chatList, 2000), ok -> {
|
||||||
|
if (ok.getConstructor() == Error.CONSTRUCTOR) {
|
||||||
|
var error = (Error) ok;
|
||||||
|
if (error.code != 404) {
|
||||||
|
throw new TelegramError((Error) ok);
|
||||||
|
}
|
||||||
|
logger.debug("All {} chats have already been loaded", chatList);
|
||||||
|
} else {
|
||||||
|
logger.debug("All chats have been loaded");
|
||||||
|
}
|
||||||
|
}, error -> logger.warn("Failed to execute TdApi.LoadChats()"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLoaded() {
|
||||||
|
return loaded;
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,6 +12,7 @@ import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
@ -21,11 +22,11 @@ final class CommandsHandler implements GenericUpdateHandler<UpdateNewMessage> {
|
||||||
|
|
||||||
private final TelegramClient client;
|
private final TelegramClient client;
|
||||||
private final Map<String, Set<CommandHandler>> commandHandlers;
|
private final Map<String, Set<CommandHandler>> commandHandlers;
|
||||||
private final AtomicReference<User> me;
|
private final Supplier<User> me;
|
||||||
|
|
||||||
public CommandsHandler(TelegramClient client,
|
public CommandsHandler(TelegramClient client,
|
||||||
Map<String, Set<CommandHandler>> commandHandlers,
|
Map<String, Set<CommandHandler>> commandHandlers,
|
||||||
AtomicReference<User> me) {
|
Supplier<User> me) {
|
||||||
this.client = client;
|
this.client = client;
|
||||||
this.commandHandlers = commandHandlers;
|
this.commandHandlers = commandHandlers;
|
||||||
this.me = me;
|
this.me = me;
|
||||||
|
|
|
@ -10,6 +10,8 @@ import it.tdlight.common.internal.CommonClientManager;
|
||||||
import it.tdlight.common.utils.CantLoadLibrary;
|
import it.tdlight.common.utils.CantLoadLibrary;
|
||||||
import it.tdlight.common.utils.LibraryVersion;
|
import it.tdlight.common.utils.LibraryVersion;
|
||||||
import it.tdlight.jni.TdApi;
|
import it.tdlight.jni.TdApi;
|
||||||
|
import it.tdlight.jni.TdApi.ChatListArchive;
|
||||||
|
import it.tdlight.jni.TdApi.ChatListMain;
|
||||||
import it.tdlight.jni.TdApi.Function;
|
import it.tdlight.jni.TdApi.Function;
|
||||||
import it.tdlight.jni.TdApi.User;
|
import it.tdlight.jni.TdApi.User;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -56,6 +58,10 @@ public final class SimpleTelegramClient implements Authenticable {
|
||||||
private final Set<ExceptionHandler> defaultExceptionHandlers = new ConcurrentHashMap<ExceptionHandler, Object>().keySet(
|
private final Set<ExceptionHandler> defaultExceptionHandlers = new ConcurrentHashMap<ExceptionHandler, Object>().keySet(
|
||||||
new Object());
|
new Object());
|
||||||
|
|
||||||
|
private final AuthorizationStateReadyGetMe meGetter;
|
||||||
|
private final AuthorizationStateReadyLoadChats mainChatsLoader;
|
||||||
|
private final AuthorizationStateReadyLoadChats archivedChatsLoader;
|
||||||
|
|
||||||
private final CountDownLatch closed = new CountDownLatch(1);
|
private final CountDownLatch closed = new CountDownLatch(1);
|
||||||
|
|
||||||
public SimpleTelegramClient(TDLibSettings settings) {
|
public SimpleTelegramClient(TDLibSettings settings) {
|
||||||
|
@ -92,9 +98,11 @@ public final class SimpleTelegramClient implements Authenticable {
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
this.addUpdateHandler(TdApi.UpdateAuthorizationState.class, new AuthorizationStateWaitForExit(this.closed));
|
this.addUpdateHandler(TdApi.UpdateAuthorizationState.class, new AuthorizationStateWaitForExit(this.closed));
|
||||||
AtomicReference<User> me = new AtomicReference<>();
|
this.mainChatsLoader = new AuthorizationStateReadyLoadChats(client, new ChatListMain());
|
||||||
this.addUpdateHandler(TdApi.UpdateAuthorizationState.class, new AuthorizationStateReadyGetMe(client, me));
|
this.archivedChatsLoader = new AuthorizationStateReadyLoadChats(client, new ChatListArchive());
|
||||||
this.addUpdateHandler(TdApi.UpdateNewMessage.class, new CommandsHandler(client, this.commandHandlers, me));
|
this.addUpdateHandler(TdApi.UpdateAuthorizationState.class,
|
||||||
|
this.meGetter = new AuthorizationStateReadyGetMe(client, mainChatsLoader, archivedChatsLoader));
|
||||||
|
this.addUpdateHandler(TdApi.UpdateNewMessage.class, new CommandsHandler(client, this.commandHandlers, this::getMe));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleUpdate(TdApi.Object update) {
|
private void handleUpdate(TdApi.Object update) {
|
||||||
|
@ -284,4 +292,16 @@ public final class SimpleTelegramClient implements Authenticable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public User getMe() {
|
||||||
|
return meGetter.getMe();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isMainChatsListLoaded() {
|
||||||
|
return mainChatsLoader.isLoaded();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isArchivedChatsListLoaded() {
|
||||||
|
return archivedChatsLoader.isLoaded();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue