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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+