diff --git a/pom.xml b/pom.xml index 9c43fdd..ea67400 100644 --- a/pom.xml +++ b/pom.xml @@ -12,8 +12,7 @@ 11 11 - 4.0.2 - 5.7.0 + 4.0.3 @@ -85,7 +84,7 @@ org.junit.jupiter junit-jupiter-api - ${junit-jupiter.version} + 5.8.0-M1 test @@ -97,7 +96,7 @@ org.junit.jupiter junit-jupiter-engine - ${junit-jupiter.version} + 5.8.0-M1 test @@ -128,28 +127,28 @@ org.apache.logging.log4j log4j-core - 2.12.1 + 2.14.1 org.apache.logging.log4j log4j-slf4j-impl - 2.12.1 + 2.14.1 org.warp common-utils - 1.1.2 + 1.1.3 io.netty netty-tcnative-boringssl-static - 2.0.30.Final + 2.0.39.Final it.tdlight tdlight-java - [4.171.83,) + [4.171.112,) it.cavallium @@ -159,18 +158,18 @@ javax.annotation javax.annotation-api - 1.2 + 1.3.2 it.unimi.dsi fastutil - 8.3.1 + 8.5.4 - com.google.code.gson - gson - 2.8.6 + com.squareup.moshi + moshi + 1.12.0 @@ -259,12 +258,12 @@ org.junit.platform junit-platform-surefire-provider - 1.2.0 + 1.3.2 org.junit.jupiter junit-jupiter-engine - 5.7.0 + 5.8.0-M1 diff --git a/src/main/java/it/tdlight/tdlibsession/TdGson.java b/src/main/java/it/tdlight/tdlibsession/TdGson.java deleted file mode 100644 index f5b6dd5..0000000 --- a/src/main/java/it/tdlight/tdlibsession/TdGson.java +++ /dev/null @@ -1,65 +0,0 @@ -package it.tdlight.tdlibsession; - -import com.google.gson.GsonBuilder; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSerializationContext; -import com.google.gson.JsonSerializer; -import it.tdlight.jni.TdApi; -import java.lang.reflect.Modifier; -import java.lang.reflect.Type; -import java.util.ArrayList; - -public class TdGson { - - private static final TdApiGenericSerializer tdApiGenericSerializerInstance = new TdApiGenericSerializer<>(); - private static final ArrayList> abstractClassesSerializers = new ArrayList<>(); - - static { - for (Class declaredClass : TdApi.class.getDeclaredClasses()) { - var modifiers = declaredClass.getModifiers(); - if (Modifier.isAbstract(modifiers) && Modifier.isPublic(modifiers) && Modifier - .isStatic(modifiers)) { - abstractClassesSerializers.add(declaredClass); - } - } - } - - public static GsonBuilder registerAdapters(GsonBuilder gsonBuilder) { - for (Class abstractClassesSerializer : abstractClassesSerializers) { - gsonBuilder.registerTypeAdapter(abstractClassesSerializer, tdApiGenericSerializerInstance); - } - return gsonBuilder; - } - - public static class TdApiGenericSerializer implements JsonSerializer, JsonDeserializer { - - @Override - public JsonElement serialize(T src, Type typeOfSrc, JsonSerializationContext context) { - JsonObject result = new JsonObject(); - result.add("type", new JsonPrimitive(src.getClass().getSimpleName())); - result.add("properties", context.serialize(src, src.getClass())); - - return result; - } - - @Override - public T deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) - throws JsonParseException { - JsonObject jsonObject = json.getAsJsonObject(); - String type = jsonObject.get("type").getAsString().replaceAll("[^a-zA-Z0-9]", ""); - JsonElement element = jsonObject.get("properties"); - - try { - return context - .deserialize(element, Class.forName(TdApi.class.getCanonicalName() + "$" + type)); - } catch (ClassNotFoundException cnfe) { - throw new JsonParseException("Unknown element type: " + type, cnfe); - } - } - } -} \ No newline at end of file diff --git a/src/main/java/it/tdlight/tdlibsession/td/easy/AsyncTdEasy.java b/src/main/java/it/tdlight/tdlibsession/td/easy/AsyncTdEasy.java index 9bf1968..35076c6 100644 --- a/src/main/java/it/tdlight/tdlibsession/td/easy/AsyncTdEasy.java +++ b/src/main/java/it/tdlight/tdlibsession/td/easy/AsyncTdEasy.java @@ -73,7 +73,6 @@ public class AsyncTdEasy { this.logName = logName; this.logger = LoggerFactory.getLogger("AsyncTdEasy " + logName); - // todo: use Duration.ZERO instead of 10ms interval this.incomingUpdates = td.receive() .flatMapSequential(this::preprocessUpdates) .flatMapSequential(update -> Mono.from(this.getState()).single().map(state -> new AsyncTdUpdateObj(state, update))) @@ -303,13 +302,6 @@ public class AsyncTdEasy { return td.execute(request, true); } - /** - * Set if skip updates or not - */ - public Mono setSkipUpdates(boolean skipUpdates) { //todo: do this - return null; - } - /** * Closes the client gracefully by sending {@link TdApi.Close}. */ @@ -349,22 +341,6 @@ public class AsyncTdEasy { .then(); } - /** - * - * @param timeout Timeout in seconds when reading data - */ - public void setReadTimeout(int timeout) { - //todo: do this - } - - /** - * - * @param timeout Timeout in seconds when listening methods or connecting - */ - public void setMethodTimeout(int timeout) { - //todo: do this - } - private Mono catchErrors(Object obj) { return Mono.fromCallable(() -> { if (obj.getConstructor() == Error.CONSTRUCTOR) { diff --git a/src/main/java/it/tdlight/utils/MonoUtils.java b/src/main/java/it/tdlight/utils/MonoUtils.java index af3ec0b..1311e16 100644 --- a/src/main/java/it/tdlight/utils/MonoUtils.java +++ b/src/main/java/it/tdlight/utils/MonoUtils.java @@ -244,14 +244,17 @@ public class MonoUtils { })); } + @NotNull public static Mono toMono(Single single) { return Mono.from(single.toFlowable()); } + @NotNull public static Mono toMono(Maybe single) { return Mono.from(single.toFlowable()); } + @NotNull public static Mono toMono(Completable completable) { return Mono.from(completable.toFlowable()); } diff --git a/src/main/java/it/tdlight/utils/TdMoshiPolymorphic.java b/src/main/java/it/tdlight/utils/TdMoshiPolymorphic.java new file mode 100644 index 0000000..ca83fcf --- /dev/null +++ b/src/main/java/it/tdlight/utils/TdMoshiPolymorphic.java @@ -0,0 +1,49 @@ +package it.tdlight.utils; + +import com.squareup.moshi.JsonAdapter; +import it.tdlight.jni.TdApi; +import it.tdlight.jni.TdApi.Object; +import java.lang.reflect.Modifier; +import java.util.HashSet; +import java.util.Set; +import org.warp.commonutils.moshi.MoshiPolymorphic; + +public class TdMoshiPolymorphic extends MoshiPolymorphic { + + + private final Set> abstractClasses = new HashSet<>(); + private final Set> concreteClasses = new HashSet<>(); + + public TdMoshiPolymorphic() { + super(); + var declaredClasses = TdApi.class.getDeclaredClasses(); + for (Class declaredClass : declaredClasses) { + var modifiers = declaredClass.getModifiers(); + if (Modifier.isPublic(modifiers) && Modifier + .isStatic(modifiers)) { + if (Modifier.isAbstract(modifiers)) { + //noinspection unchecked + this.abstractClasses.add((Class) declaredClass); + } else { + //noinspection unchecked + this.concreteClasses.add((Class) declaredClass); + } + } + } + } + + @Override + public Set> getAbstractClasses() { + return abstractClasses; + } + + @Override + public Set> getConcreteClasses() { + return concreteClasses; + } + + @Override + protected boolean shouldIgnoreField(String fieldName) { + return fieldName.equals("CONSTRUCTOR"); + } +}