From ebc30f2718bed34ca05d9b77becf5ca749dcbbf9 Mon Sep 17 00:00:00 2001 From: Andrea Cavalli Date: Sun, 10 Jan 2021 03:14:49 +0100 Subject: [PATCH] Fix loglevel, fix settings corruption, fix banned bots. --- debug/.app-lock | 0 pom.xml | 2 +- .../java/it/cavallium/PrimaryController.java | 21 ++++++---- .../it/cavallium/SettingsServiceImpl.java | 2 +- .../it/cavallium/TransferServiceImpl.java | 24 ++++++++++-- src/main/resources/log4j2.xml | 38 +++++++++++++++++++ 6 files changed, 73 insertions(+), 14 deletions(-) delete mode 100644 debug/.app-lock create mode 100644 src/main/resources/log4j2.xml diff --git a/debug/.app-lock b/debug/.app-lock deleted file mode 100644 index e69de29..0000000 diff --git a/pom.xml b/pom.xml index 7825372..8f2938b 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ it.tdlight tdlib-session-container - [1.0.0,) + [4.2.7,) it.tdlight diff --git a/src/main/java/it/cavallium/PrimaryController.java b/src/main/java/it/cavallium/PrimaryController.java index b1eff6c..ac57022 100644 --- a/src/main/java/it/cavallium/PrimaryController.java +++ b/src/main/java/it/cavallium/PrimaryController.java @@ -236,16 +236,21 @@ public class PrimaryController { .doOnTerminate(this::enableClicks) .subscribe(_v -> {}, error -> { Platform.runLater(() -> { + var skipAndDeleteUserbotBtn = new ButtonType("Skip and delete userbot"); + var skipBtn = new ButtonType("Skip"); var alert = new Alert(AlertType.ERROR, - "Error while adding the userbot " + PhoneNumberUtil - .getInstance() - .format(phoneNumber, PhoneNumberFormat.INTERNATIONAL), - ButtonType.CLOSE + error.getLocalizedMessage(), + skipBtn, + skipAndDeleteUserbotBtn ); - alert.setContentText(error.getLocalizedMessage()); - MonoFxUtils.showAndWait(alert).subscribe(); - - enableClicks(); + alert.setHeaderText("Error while adding the userbot " + PhoneNumberUtil + .getInstance() + .format(phoneNumber, PhoneNumberFormat.INTERNATIONAL)); + MonoFxUtils.showAndWait(alert).subscribe(result -> { + if (skipAndDeleteUserbotBtn.getText().equals(result.getText())) { + App.getSettingsService().removePhoneNumber(getLongPhoneNumber(phoneNumber)); + } + }, System.err::println, this::enableClicks); }); }); } catch (NumberFormatException | NumberParseException ex) { diff --git a/src/main/java/it/cavallium/SettingsServiceImpl.java b/src/main/java/it/cavallium/SettingsServiceImpl.java index 8e1f09c..4024745 100644 --- a/src/main/java/it/cavallium/SettingsServiceImpl.java +++ b/src/main/java/it/cavallium/SettingsServiceImpl.java @@ -72,7 +72,7 @@ public class SettingsServiceImpl implements SettingsService { settings.addProperty("proxyPort", proxyPort.get()); settings.addProperty("proxySecret", proxySecret.get()); try { - Files.writeString(Paths.get("settings.json"), gson.toJson(settings), StandardCharsets.UTF_8, StandardOpenOption.CREATE); + Files.writeString(Paths.get("settings.json"), gson.toJson(settings), StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); } catch (IOException e) { App.getLogService().append(Level.ERROR, e.getLocalizedMessage()); } diff --git a/src/main/java/it/cavallium/TransferServiceImpl.java b/src/main/java/it/cavallium/TransferServiceImpl.java index e55cf02..c260bff 100644 --- a/src/main/java/it/cavallium/TransferServiceImpl.java +++ b/src/main/java/it/cavallium/TransferServiceImpl.java @@ -8,6 +8,7 @@ import com.google.i18n.phonenumbers.NumberParseException; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat; import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber; +import com.hazelcast.cp.internal.datastructures.atomicref.AtomicRef; import it.tdlight.jni.TdApi; import it.tdlight.jni.TdApi.AuthorizationStateClosed; import it.tdlight.jni.TdApi.AuthorizationStateClosing; @@ -23,6 +24,7 @@ import it.tdlight.jni.TdApi.SupergroupFullInfo; import it.tdlight.jni.TdApi.Update; import it.tdlight.jni.TdApi.User; import it.tdlight.jni.TdApi.UserTypeRegular; +import it.tdlight.tdlibsession.FatalErrorType; import it.tdlight.tdlibsession.td.TdError; import it.tdlight.tdlibsession.td.easy.AsyncTdEasy; import it.tdlight.tdlibsession.td.easy.ParameterInfoPasswordHint; @@ -41,6 +43,7 @@ import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Supplier; @@ -92,12 +95,16 @@ public class TransferServiceImpl implements TransferService { } String alias = PhoneNumberUtil.getInstance().format(phoneNumber, PhoneNumberFormat.INTERNATIONAL); + final AtomicReference fatalError = new AtomicReference<>(null); + return Mono .fromCallable(() -> { - return AsyncTdMiddleDirect.getAndDeployInstance(clusterManager, alias, "" + phoneNumberLong); + synchronized (clusterManager) { + return AsyncTdMiddleDirect.getAndDeployInstance(clusterManager, alias, "" + phoneNumberLong) + .block(Duration.ofSeconds(60)); + } }) .subscribeOn(Schedulers.boundedElastic()) - .flatMap(v -> v) .map(middle -> new AsyncTdEasy(middle, alias)).flatMap(client -> { return client .execute(new TdApi.SetLogVerbosityLevel(0)) @@ -117,6 +124,7 @@ public class TransferServiceImpl implements TransferService { .setSystemLanguageCode("en") .setDeviceModel(System.getProperty("os.name")) .setSystemVersion(System.getProperty("os.version")) + .setFatalErrorHandler((FatalErrorType error) -> Mono.fromRunnable(() -> fatalError.set(error))) .setParameterRequestHandler((parameter, parameterInfo) -> { switch (parameter) { case ASK_FIRST_NAME: @@ -185,7 +193,7 @@ public class TransferServiceImpl implements TransferService { if (state.getConstructor() == AuthorizationStateReady.CONSTRUCTOR) { sink.complete(); } else { - sink.error(new Exception(state.getClass().getSimpleName())); + sink.error(new Exception("Userbot closed with state: " + state.getClass().getSimpleName())); } }) .then(); @@ -216,7 +224,15 @@ public class TransferServiceImpl implements TransferService { newClients.onNext(new ItemUpdate<>(false, newClient)); })); }) - .map(_v -> AddUserBotResult.newSuccess()); + .map(_v -> AddUserBotResult.newSuccess()) + .onErrorMap(error -> { + var fatalErrorValue = fatalError.get(); + if (fatalErrorValue != null) { + return new TdError(500, fatalErrorValue.toString()); + } else { + return error; + } + }); } private Mono onClientUpdate(Update update) { diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml new file mode 100644 index 0000000..369b387 --- /dev/null +++ b/src/main/resources/log4j2.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +