From 688076ff008df0660618f79add16a400704ba3bc Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Mon, 27 Sep 2021 20:22:57 +0200 Subject: [PATCH] Bugfixes --- example/pom.xml | 4 ++-- .../src/main/java/it.tdlight.example/Example.java | 2 +- example/src/main/resources/log4j2.xml | 4 ++-- .../client/AuthorizationStateReadyGetMe.java | 8 +++++++- ...rizationStateWaitAuthenticationDataHandler.java | 14 ++++++++++++-- .../client/AuthorizationStateWaitCodeHandler.java | 7 ++++++- ...AuthorizationStateWaitEncryptionKeyHandler.java | 7 ++++++- .../AuthorizationStateWaitPasswordHandler.java | 7 ++++++- .../AuthorizationStateWaitRegistrationHandler.java | 7 ++++++- ...thorizationStateWaitTdlibParametersHandler.java | 7 ++++++- .../java/it/tdlight/client/CommandsHandler.java | 8 +++++++- .../it/tdlight/client/SimpleTelegramClient.java | 13 +++++++++++-- .../it/tdlight/common/internal/InternalClient.java | 13 ++++++++++--- tdlib/pom.xml | 2 +- tdlight/pom.xml | 2 +- 15 files changed, 84 insertions(+), 21 deletions(-) diff --git a/example/pom.xml b/example/pom.xml index f71d6d8..9b609b5 100644 --- a/example/pom.xml +++ b/example/pom.xml @@ -2,7 +2,7 @@ 4.0.0 it.tdlight example-java - 1.0.0-SNAPSHOT + 1.0.0.0-SNAPSHOT TDLight Java Example jar @@ -25,7 +25,7 @@ it.tdlight tdlight-java - 2.7.8.1 + 2.7.8.2 diff --git a/example/src/main/java/it.tdlight.example/Example.java b/example/src/main/java/it.tdlight.example/Example.java index b563960..706ca2e 100644 --- a/example/src/main/java/it.tdlight.example/Example.java +++ b/example/src/main/java/it.tdlight.example/Example.java @@ -67,7 +67,7 @@ public final class Example { SimpleTelegramClient client = new SimpleTelegramClient(settings); // Configure the authentication info - AuthenticationData authenticationData = AuthenticationData.bot("1458657665:AAFotSQj1pHcRrH1C0DmDX6VpwSanJgb2-g"); + AuthenticationData authenticationData = AuthenticationData.bot("124:1999"); // Add an example update handler that prints when the bot is started client.addUpdateHandler(UpdateAuthorizationState.class, update -> printStatus(update.authorizationState)); diff --git a/example/src/main/resources/log4j2.xml b/example/src/main/resources/log4j2.xml index b1e9580..ea9edbe 100644 --- a/example/src/main/resources/log4j2.xml +++ b/example/src/main/resources/log4j2.xml @@ -4,7 +4,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://logging.apache.org/log4j/2.0/config https://raw.githubusercontent.com/apache/logging-log4j2/log4j-2.14.1/log4j-core/src/main/resources/Log4j-config.xsd" - status="INFO"> + status="ALL"> - + diff --git a/src/main/java/it/tdlight/client/AuthorizationStateReadyGetMe.java b/src/main/java/it/tdlight/client/AuthorizationStateReadyGetMe.java index f933654..f7e304a 100644 --- a/src/main/java/it/tdlight/client/AuthorizationStateReadyGetMe.java +++ b/src/main/java/it/tdlight/client/AuthorizationStateReadyGetMe.java @@ -3,6 +3,7 @@ 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.Error; import it.tdlight.jni.TdApi.GetMe; import it.tdlight.jni.TdApi.UpdateAuthorizationState; import it.tdlight.jni.TdApi.User; @@ -25,7 +26,12 @@ final class AuthorizationStateReadyGetMe implements GenericUpdateHandler this.me.set((User) me), error -> logger.warn("Failed to execute TdApi.GetMe()")); + client.send(new GetMe(), me -> { + if (me.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) me); + } + this.me.set((User) me); + }, error -> logger.warn("Failed to execute TdApi.GetMe()")); } } } diff --git a/src/main/java/it/tdlight/client/AuthorizationStateWaitAuthenticationDataHandler.java b/src/main/java/it/tdlight/client/AuthorizationStateWaitAuthenticationDataHandler.java index 4399274..76bd778 100644 --- a/src/main/java/it/tdlight/client/AuthorizationStateWaitAuthenticationDataHandler.java +++ b/src/main/java/it/tdlight/client/AuthorizationStateWaitAuthenticationDataHandler.java @@ -5,7 +5,9 @@ package it.tdlight.client; import it.tdlight.common.utils.ScannerUtils; import it.tdlight.jni.TdApi; import it.tdlight.jni.TdApi.AuthorizationStateWaitEncryptionKey; + import it.tdlight.jni.TdApi.AuthorizationStateWaitPhoneNumber; import it.tdlight.jni.TdApi.CheckDatabaseEncryptionKey; + import it.tdlight.jni.TdApi.Error; import it.tdlight.jni.TdApi.PhoneNumberAuthenticationSettings; import it.tdlight.jni.TdApi.SetAuthenticationPhoneNumber; import it.tdlight.jni.TdApi.UpdateAuthorizationState; @@ -35,7 +37,11 @@ final class AuthorizationStateWaitAuthenticationDataHandler implements GenericUp if (authenticationData.isBot()) { String botToken = authenticationData.getBotToken(); TdApi.CheckAuthenticationBotToken response = new TdApi.CheckAuthenticationBotToken(botToken); - client.send(response, ok -> {}, ex -> { + client.send(response, ok -> { + if (ok.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) ok); + } + }, ex -> { logger.error("Failed to set TDLight phone number or bot token!", ex); exceptionHandler.onException(ex); }); @@ -44,7 +50,11 @@ final class AuthorizationStateWaitAuthenticationDataHandler implements GenericUp String phoneNumber = String.valueOf(authenticationData.getUserPhoneNumber()); SetAuthenticationPhoneNumber response = new SetAuthenticationPhoneNumber(phoneNumber, phoneSettings); - client.send(response, ok -> {}, ex -> { + client.send(response, ok -> { + if (ok.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) ok); + } + }, ex -> { logger.error("Failed to set TDLight phone number!", ex); exceptionHandler.onException(ex); }); diff --git a/src/main/java/it/tdlight/client/AuthorizationStateWaitCodeHandler.java b/src/main/java/it/tdlight/client/AuthorizationStateWaitCodeHandler.java index 755af52..00f9864 100644 --- a/src/main/java/it/tdlight/client/AuthorizationStateWaitCodeHandler.java +++ b/src/main/java/it/tdlight/client/AuthorizationStateWaitCodeHandler.java @@ -6,6 +6,7 @@ import it.tdlight.jni.TdApi; import it.tdlight.jni.TdApi.AuthorizationStateWaitCode; import it.tdlight.jni.TdApi.AuthorizationStateWaitOtherDeviceConfirmation; import it.tdlight.jni.TdApi.CheckAuthenticationCode; +import it.tdlight.jni.TdApi.Error; import it.tdlight.jni.TdApi.Function; import it.tdlight.jni.TdApi.UpdateAuthorizationState; import org.slf4j.Logger; @@ -39,7 +40,11 @@ final class AuthorizationStateWaitCodeHandler implements GenericUpdateHandler {}, ex -> { + client.send(response, ok -> { + if (ok.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) ok); + } + }, ex -> { logger.error("Failed to check authentication code", ex); exceptionHandler.onException(ex); }); diff --git a/src/main/java/it/tdlight/client/AuthorizationStateWaitEncryptionKeyHandler.java b/src/main/java/it/tdlight/client/AuthorizationStateWaitEncryptionKeyHandler.java index 86b0efb..8e08611 100644 --- a/src/main/java/it/tdlight/client/AuthorizationStateWaitEncryptionKeyHandler.java +++ b/src/main/java/it/tdlight/client/AuthorizationStateWaitEncryptionKeyHandler.java @@ -5,6 +5,7 @@ import it.tdlight.common.TelegramClient; import it.tdlight.jni.TdApi.AuthorizationStateWaitEncryptionKey; import it.tdlight.jni.TdApi.AuthorizationStateWaitTdlibParameters; import it.tdlight.jni.TdApi.CheckDatabaseEncryptionKey; +import it.tdlight.jni.TdApi.Error; import it.tdlight.jni.TdApi.SetTdlibParameters; import it.tdlight.jni.TdApi.TdlibParameters; import it.tdlight.jni.TdApi.UpdateAuthorizationState; @@ -26,7 +27,11 @@ final class AuthorizationStateWaitEncryptionKeyHandler implements GenericUpdateH @Override public void onUpdate(UpdateAuthorizationState update) { if (update.authorizationState.getConstructor() == AuthorizationStateWaitEncryptionKey.CONSTRUCTOR) { - client.send(new CheckDatabaseEncryptionKey(), ok -> {}, ex -> { + client.send(new CheckDatabaseEncryptionKey(), ok -> { + if (ok.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) ok); + } + }, ex -> { logger.error("Failed to manage TDLight database encryption key!", ex); exceptionHandler.onException(ex); }); diff --git a/src/main/java/it/tdlight/client/AuthorizationStateWaitPasswordHandler.java b/src/main/java/it/tdlight/client/AuthorizationStateWaitPasswordHandler.java index 8001af7..e26a9dc 100644 --- a/src/main/java/it/tdlight/client/AuthorizationStateWaitPasswordHandler.java +++ b/src/main/java/it/tdlight/client/AuthorizationStateWaitPasswordHandler.java @@ -6,6 +6,7 @@ import it.tdlight.jni.TdApi.AuthorizationStateWaitCode; import it.tdlight.jni.TdApi.AuthorizationStateWaitPassword; import it.tdlight.jni.TdApi.CheckAuthenticationCode; import it.tdlight.jni.TdApi.CheckAuthenticationPassword; +import it.tdlight.jni.TdApi.Error; import it.tdlight.jni.TdApi.Function; import it.tdlight.jni.TdApi.UpdateAuthorizationState; import org.slf4j.Logger; @@ -38,7 +39,11 @@ final class AuthorizationStateWaitPasswordHandler implements GenericUpdateHandle ); String password = clientInteraction.onParameterRequest(InputParameter.ASK_PASSWORD, parameterInfo); Function response = new CheckAuthenticationPassword(password); - client.send(response, ok -> {}, ex -> { + client.send(response, ok -> { + if (ok.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) ok); + } + }, ex -> { logger.error("Failed to check authentication password", ex); exceptionHandler.onException(ex); }); diff --git a/src/main/java/it/tdlight/client/AuthorizationStateWaitRegistrationHandler.java b/src/main/java/it/tdlight/client/AuthorizationStateWaitRegistrationHandler.java index c4e7636..64e7931 100644 --- a/src/main/java/it/tdlight/client/AuthorizationStateWaitRegistrationHandler.java +++ b/src/main/java/it/tdlight/client/AuthorizationStateWaitRegistrationHandler.java @@ -4,6 +4,7 @@ import it.tdlight.common.ExceptionHandler; import it.tdlight.common.TelegramClient; import it.tdlight.jni.TdApi; import it.tdlight.jni.TdApi.AuthorizationStateWaitRegistration; +import it.tdlight.jni.TdApi.Error; import it.tdlight.jni.TdApi.RegisterUser; import it.tdlight.jni.TdApi.UpdateAuthorizationState; import org.slf4j.Logger; @@ -50,7 +51,11 @@ final class AuthorizationStateWaitRegistrationHandler implements GenericUpdateHa return; } RegisterUser response = new RegisterUser(firstName, lastName); - client.send(response, ok -> {}, ex -> { + client.send(response, ok -> { + if (ok.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) ok); + } + }, ex -> { logger.error("Failed to register user", ex); exceptionHandler.onException(ex); }); diff --git a/src/main/java/it/tdlight/client/AuthorizationStateWaitTdlibParametersHandler.java b/src/main/java/it/tdlight/client/AuthorizationStateWaitTdlibParametersHandler.java index 4174aa1..21fcfa5 100644 --- a/src/main/java/it/tdlight/client/AuthorizationStateWaitTdlibParametersHandler.java +++ b/src/main/java/it/tdlight/client/AuthorizationStateWaitTdlibParametersHandler.java @@ -3,6 +3,7 @@ package it.tdlight.client; import it.tdlight.common.ExceptionHandler; import it.tdlight.common.TelegramClient; import it.tdlight.jni.TdApi.AuthorizationStateWaitTdlibParameters; +import it.tdlight.jni.TdApi.Error; import it.tdlight.jni.TdApi.SetTdlibParameters; import it.tdlight.jni.TdApi.TdlibParameters; import it.tdlight.jni.TdApi.UpdateAuthorizationState; @@ -44,7 +45,11 @@ final class AuthorizationStateWaitTdlibParametersHandler implements GenericUpdat params.applicationVersion = settings.getApplicationVersion(); params.enableStorageOptimizer = settings.isStorageOptimizerEnabled(); params.ignoreFileNames = settings.isIgnoreFileNames(); - client.send(new SetTdlibParameters(params), ok -> {}, ex -> { + client.send(new SetTdlibParameters(params), ok -> { + if (ok.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) ok); + } + }, ex -> { logger.error("Failed to set TDLight parameters!", ex); exceptionHandler.onException(ex); }); diff --git a/src/main/java/it/tdlight/client/CommandsHandler.java b/src/main/java/it/tdlight/client/CommandsHandler.java index f54960b..2ae7d54 100644 --- a/src/main/java/it/tdlight/client/CommandsHandler.java +++ b/src/main/java/it/tdlight/client/CommandsHandler.java @@ -3,6 +3,7 @@ package it.tdlight.client; import it.tdlight.common.TelegramClient; import it.tdlight.jni.TdApi; import it.tdlight.jni.TdApi.Chat; +import it.tdlight.jni.TdApi.Error; import it.tdlight.jni.TdApi.Message; import it.tdlight.jni.TdApi.MessageText; import it.tdlight.jni.TdApi.UpdateNewMessage; @@ -71,7 +72,12 @@ final class CommandsHandler implements GenericUpdateHandler { for (CommandHandler handler : handlers) { client.send(new TdApi.GetChat(message.chatId), - response -> handler.onCommand((Chat) response, message.sender, arguments), + response -> { + if (response.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) response); + } + handler.onCommand((Chat) response, message.sender, arguments); + }, error -> logger.warn("Error when handling the command {}", commandName, error) ); } diff --git a/src/main/java/it/tdlight/client/SimpleTelegramClient.java b/src/main/java/it/tdlight/client/SimpleTelegramClient.java index 8eb98f7..3df695a 100644 --- a/src/main/java/it/tdlight/client/SimpleTelegramClient.java +++ b/src/main/java/it/tdlight/client/SimpleTelegramClient.java @@ -11,6 +11,7 @@ import it.tdlight.common.utils.CantLoadLibrary; import it.tdlight.common.utils.LibraryVersion; import it.tdlight.jni.TdApi; import it.tdlight.jni.TdApi.Chat; +import it.tdlight.jni.TdApi.Error; import it.tdlight.jni.TdApi.Function; import it.tdlight.jni.TdApi.Message; import it.tdlight.jni.TdApi.MessageText; @@ -217,14 +218,22 @@ public final class SimpleTelegramClient implements Authenticable { * Send the close signal but don't wait */ public void sendClose() { - client.send(new TdApi.Close(), ok -> {}); + client.send(new TdApi.Close(), ok -> { + if (ok.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) ok); + } + }); } /** * Send the close signal and wait for exit */ public void closeAndWait() throws InterruptedException { - client.send(new TdApi.Close(), ok -> {}); + client.send(new TdApi.Close(), ok -> { + if (ok.getConstructor() == Error.CONSTRUCTOR) { + throw new TelegramError((Error) ok); + } + }); this.waitForExit(); } diff --git a/src/main/java/it/tdlight/common/internal/InternalClient.java b/src/main/java/it/tdlight/common/internal/InternalClient.java index 61abbb5..09a6f82 100644 --- a/src/main/java/it/tdlight/common/internal/InternalClient.java +++ b/src/main/java/it/tdlight/common/internal/InternalClient.java @@ -16,9 +16,12 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.slf4j.Marker; +import org.slf4j.MarkerFactory; public final class InternalClient implements ClientEventsHandler, TelegramClient { + private static final Marker TG_MARKER = MarkerFactory.getMarker("TG"); private static final Logger logger = LoggerFactory.getLogger(TelegramClient.class); private final ConcurrentHashMap handlers = new ConcurrentHashMap(); @@ -77,11 +80,12 @@ public final class InternalClient implements ClientEventsHandler, TelegramClient } private void handleClose() { + logger.trace(TG_MARKER, "Received close"); handlers.forEach((eventId, handler) -> { handleResponse(eventId, new Error(500, "Instance closed"), handler); }); handlers.clear(); - logger.info("Client closed {}", clientId); + logger.info(TG_MARKER, "Client closed {}", clientId); } /** @@ -95,7 +99,7 @@ public final class InternalClient implements ClientEventsHandler, TelegramClient handleException(handler.getExceptionHandler(), cause); } } else { - logger.error("Unknown event id \"{}\", the event has been dropped! {}", eventId, event); + logger.error(TG_MARKER, "Unknown event id \"{}\", the event has been dropped! {}", eventId, event); } } @@ -103,6 +107,7 @@ public final class InternalClient implements ClientEventsHandler, TelegramClient * Handles a response or an update */ private void handleEvent(long eventId, Object event) { + logger.trace(TG_MARKER, "Received response {}: {}", eventId, event); if (updatesHandler != null || updateHandler == null) throw new IllegalStateException(); Handler handler = eventId == 0 ? updateHandler : handlers.remove(eventId); handleResponse(eventId, event, handler); @@ -143,7 +148,7 @@ public final class InternalClient implements ClientEventsHandler, TelegramClient if (clientId != null) throw new UnsupportedOperationException("Can't initialize the same client twice!"); clientId = NativeClientAccess.create(); clientManager.registerClient(clientId, this); - logger.info("Registered new client {}", clientId); + logger.info(TG_MARKER, "Registered new client {}", clientId); // Send a dummy request because @levlam is too lazy to fix race conditions in a better way this.send(new TdApi.GetAuthorizationState(), (result) -> {}, ex -> {}); @@ -151,6 +156,7 @@ public final class InternalClient implements ClientEventsHandler, TelegramClient @Override public void send(Function query, ResultHandler resultHandler, ExceptionHandler exceptionHandler) { + logger.trace(TG_MARKER, "Trying to send {}", query); if (isClosedAndMaybeThrow(query)) { resultHandler.onResult(new TdApi.Ok()); } @@ -168,6 +174,7 @@ public final class InternalClient implements ClientEventsHandler, TelegramClient @Override public Object execute(Function query) { + logger.trace(TG_MARKER, "Trying to execute {}", query); if (isClosedAndMaybeThrow(query)) { return new TdApi.Ok(); } diff --git a/tdlib/pom.xml b/tdlib/pom.xml index b430dcd..c22d54a 100644 --- a/tdlib/pom.xml +++ b/tdlib/pom.xml @@ -7,7 +7,7 @@ jar UTF-8 - 1.0.0-SNAPSHOT + 1.0.0.0-SNAPSHOT 3.3.147 3.3.149 diff --git a/tdlight/pom.xml b/tdlight/pom.xml index 66581d3..52ad260 100644 --- a/tdlight/pom.xml +++ b/tdlight/pom.xml @@ -7,7 +7,7 @@ jar UTF-8 - 1.0.0-SNAPSHOT + 1.0.0.0-SNAPSHOT 3.3.147 3.3.149