Analyze fatal errors during preprocess
This commit is contained in:
parent
94ae49ea83
commit
261cc30abf
@ -1,5 +1,5 @@
|
|||||||
package it.tdlight.tdlibsession;
|
package it.tdlight.tdlibsession;
|
||||||
|
|
||||||
public enum FatalErrorType {
|
public enum FatalErrorType {
|
||||||
ACCESS_TOKEN_INVALID, PHONE_NUMBER_INVALID, CONNECTION_KILLED, INVALID_UPDATE
|
ACCESS_TOKEN_INVALID, PHONE_NUMBER_INVALID, CONNECTION_KILLED, INVALID_UPDATE, PHONE_NUMBER_BANNED
|
||||||
}
|
}
|
||||||
|
@ -329,6 +329,21 @@ public class AsyncTdEasy {
|
|||||||
case "PASSWORD_HASH_INVALID":
|
case "PASSWORD_HASH_INVALID":
|
||||||
globalErrors.onNext(error);
|
globalErrors.onNext(error);
|
||||||
return Mono.just(new UpdateAuthorizationState(new AuthorizationStateWaitPassword()));
|
return Mono.just(new UpdateAuthorizationState(new AuthorizationStateWaitPassword()));
|
||||||
|
default:
|
||||||
|
globalErrors.onNext(error);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
analyzeFatalErrors(error);
|
||||||
|
return Mono.empty();
|
||||||
|
} else {
|
||||||
|
return Mono.just((Update) obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void analyzeFatalErrors(Object obj) {
|
||||||
|
if (obj != null && obj.getConstructor() == Error.CONSTRUCTOR) {
|
||||||
|
var error = (Error) obj;
|
||||||
|
switch (error.message) {
|
||||||
case "PHONE_NUMBER_INVALID":
|
case "PHONE_NUMBER_INVALID":
|
||||||
fatalErrors.onNext(FatalErrorType.PHONE_NUMBER_INVALID);
|
fatalErrors.onNext(FatalErrorType.PHONE_NUMBER_INVALID);
|
||||||
break;
|
break;
|
||||||
@ -341,13 +356,10 @@ public class AsyncTdEasy {
|
|||||||
case "INVALID_UPDATE":
|
case "INVALID_UPDATE":
|
||||||
fatalErrors.onNext(FatalErrorType.INVALID_UPDATE);
|
fatalErrors.onNext(FatalErrorType.INVALID_UPDATE);
|
||||||
break;
|
break;
|
||||||
default:
|
case "PHONE_NUMBER_BANNED":
|
||||||
globalErrors.onNext(error);
|
fatalErrors.onNext(FatalErrorType.PHONE_NUMBER_BANNED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return Mono.empty();
|
|
||||||
} else {
|
|
||||||
return Mono.just((Update) obj);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -364,7 +376,7 @@ public class AsyncTdEasy {
|
|||||||
.flatMap(obj -> {
|
.flatMap(obj -> {
|
||||||
switch (obj.getConstructor()) {
|
switch (obj.getConstructor()) {
|
||||||
case AuthorizationStateWaitTdlibParameters.CONSTRUCTOR:
|
case AuthorizationStateWaitTdlibParameters.CONSTRUCTOR:
|
||||||
return MonoUtils.thenOrError(Mono.from(this.settings).map(settings -> {
|
return thenOrFatalError(Mono.from(this.settings).map(settings -> {
|
||||||
var parameters = new TdlibParameters();
|
var parameters = new TdlibParameters();
|
||||||
parameters.useTestDc = settings.useTestDc;
|
parameters.useTestDc = settings.useTestDc;
|
||||||
parameters.databaseDirectory = settings.databaseDirectory;
|
parameters.databaseDirectory = settings.databaseDirectory;
|
||||||
@ -384,14 +396,13 @@ public class AsyncTdEasy {
|
|||||||
return new SetTdlibParameters(parameters);
|
return new SetTdlibParameters(parameters);
|
||||||
}).flatMap((SetTdlibParameters obj1) -> sendDirectly(obj1, false)));
|
}).flatMap((SetTdlibParameters obj1) -> sendDirectly(obj1, false)));
|
||||||
case AuthorizationStateWaitEncryptionKey.CONSTRUCTOR:
|
case AuthorizationStateWaitEncryptionKey.CONSTRUCTOR:
|
||||||
return MonoUtils
|
return thenOrFatalError(sendDirectly(new CheckDatabaseEncryptionKey(), false))
|
||||||
.thenOrError(sendDirectly(new CheckDatabaseEncryptionKey(), false))
|
|
||||||
.onErrorResume((error) -> {
|
.onErrorResume((error) -> {
|
||||||
logger.error("Error while checking TDLib encryption key", error);
|
logger.error("Error while checking TDLib encryption key", error);
|
||||||
return sendDirectly(new TdApi.Close(), false).then();
|
return sendDirectly(new TdApi.Close(), false).then();
|
||||||
});
|
});
|
||||||
case AuthorizationStateWaitPhoneNumber.CONSTRUCTOR:
|
case AuthorizationStateWaitPhoneNumber.CONSTRUCTOR:
|
||||||
return MonoUtils.thenOrError(Mono.from(this.settings).flatMap(settings -> {
|
return thenOrFatalError(Mono.from(this.settings).flatMap(settings -> {
|
||||||
if (settings.isPhoneNumberSet()) {
|
if (settings.isPhoneNumberSet()) {
|
||||||
return sendDirectly(new SetAuthenticationPhoneNumber(String.valueOf(settings.getPhoneNumber()),
|
return sendDirectly(new SetAuthenticationPhoneNumber(String.valueOf(settings.getPhoneNumber()),
|
||||||
new PhoneNumberAuthenticationSettings(false, false, false)
|
new PhoneNumberAuthenticationSettings(false, false, false)
|
||||||
@ -520,4 +531,12 @@ public class AsyncTdEasy {
|
|||||||
})
|
})
|
||||||
.then(Mono.justOrEmpty(updateObj.getConstructor() == Error.CONSTRUCTOR ? null : (Update) updateObj));
|
.then(Mono.justOrEmpty(updateObj.getConstructor() == Error.CONSTRUCTOR ? null : (Update) updateObj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T extends TdApi.Object> Mono<Void> thenOrFatalError(Mono<TdResult<T>> optionalMono) {
|
||||||
|
return MonoUtils.thenOrError(optionalMono.doOnNext(result -> {
|
||||||
|
if (result.failed()) {
|
||||||
|
analyzeFatalErrors(result.cause());
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user