diff --git a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt index 73d59ca90a42bb9b33a1fd3d0f2451c9189e01d0..a85ad2860e0a0a53609a1d2f545b70b2661a2d1a 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/service/QuasselService.kt @@ -11,6 +11,7 @@ import de.kuschku.libquassel.protocol.Protocol_Feature import de.kuschku.libquassel.protocol.Protocol_Features import de.kuschku.libquassel.quassel.QuasselFeatures import de.kuschku.libquassel.session.* +import de.kuschku.malheur.CrashHandler import de.kuschku.quasseldroid.BuildConfig import de.kuschku.quasseldroid.Keys import de.kuschku.quasseldroid.R @@ -270,7 +271,8 @@ class QuasselService : DaggerLifecycleService(), ISession.NULL, QuasselBacklogStorage(database), handlerService, - ::disconnectFromCore + ::disconnectFromCore, + CrashHandler::handle ) clientData = ClientData( diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/compatibility/AndroidHandlerService.kt b/app/src/main/java/de/kuschku/quasseldroid/util/compatibility/AndroidHandlerService.kt index 7044fd6975ec32418074eb43cff8e53bd272eed8..b61c3b793ca4fb4a1d0af66a2ce69cd0e9983f02 100644 --- a/app/src/main/java/de/kuschku/quasseldroid/util/compatibility/AndroidHandlerService.kt +++ b/app/src/main/java/de/kuschku/quasseldroid/util/compatibility/AndroidHandlerService.kt @@ -11,7 +11,7 @@ class AndroidHandlerService : HandlerService { } override fun deserialize(f: () -> Unit) { - serializeHandler.post(f) + deserializeHandler.post(f) } override fun write(f: () -> Unit) { diff --git a/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java b/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java index 0a3a15456f6f3e0bfe45a2c0717a6bdd22c85cd4..a53a6b016d632607ea0ac7ed94239efe428a2e45 100644 --- a/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java +++ b/invokergenerator/src/main/java/de/kuschku/libquassel/annotations/InvokerProcessor.java @@ -9,6 +9,7 @@ import com.squareup.javapoet.ParameterSpec; import com.squareup.javapoet.ParameterizedTypeName; import com.squareup.javapoet.TypeName; import com.squareup.javapoet.TypeSpec; +import com.squareup.javapoet.WildcardTypeName; import java.io.IOException; import java.util.ArrayList; @@ -129,9 +130,11 @@ public class InvokerProcessor extends AbstractProcessor { .builder( ParameterizedTypeName.get( ClassName.get(List.class), - ParameterizedTypeName.get( - ClassName.get("de.kuschku.libquassel.protocol", "QVariant"), - TypeName.get(Object.class) + WildcardTypeName.subtypeOf( + ParameterizedTypeName.get( + ClassName.get("de.kuschku.libquassel.protocol", "QVariant"), + WildcardTypeName.subtypeOf(Object.class) + ) ) ), "params" @@ -159,7 +162,7 @@ public class InvokerProcessor extends AbstractProcessor { TypeMirror parameterType = slot.type.getParameterTypes().get(i); boolean isLast = i + 1 == slot.type.getParameterTypes().size(); - invokeSpec = invokeSpec.addCode("($T) $N.get($L).getData()", parameterType, parameterSpecParams, i); + invokeSpec = invokeSpec.addCode("($T) ($T) $N.get($L).getData()", parameterType, Object.class, parameterSpecParams, i); if (!isLast) invokeSpec = invokeSpec.addCode(","); invokeSpec = invokeSpec.addCode("\n"); diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/MetaType.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/MetaType.kt deleted file mode 100644 index fee50680bdf28f8f3615163c9eb3115799d80441..0000000000000000000000000000000000000000 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/MetaType.kt +++ /dev/null @@ -1,103 +0,0 @@ -package de.kuschku.libquassel.protocol - -import de.kuschku.libquassel.protocol.primitive.serializer.* -import org.threeten.bp.LocalTime -import org.threeten.bp.OffsetDateTime - -data class MetaType<T>(val klass: Class<T>, val type: Type, val serializer: Serializer<T>? = null, - val name: String = type.serializableName) { - companion object { - private val byName = HashMap<String, MetaType<*>>() - private val byType = HashMap<Type, MetaType<*>>() - - private inline fun <reified T : Any?> addType(type: Type, - serializer: Serializer<T>? = null) { - val metaType = MetaType(T::class.java, type, serializer, type.serializableName) - byName[metaType.name] = metaType - byType[metaType.type] = metaType - } - - private inline fun <reified T : Any?> addType(type: Type, name: String, - serializer: Serializer<T>? = null) { - val metaType = MetaType(T::class.java, type, serializer, name) - byName[metaType.name] = metaType - } - - private inline fun <reified T : Any?> addType(type: Type, name: QType, - serializer: Serializer<T>? = null) { - addType(type, name.typeName, serializer) - } - - init { - addType(Type.Void, VoidSerializer) - addType(Type.Bool, BoolSerializer) - addType(Type.Char, ByteSerializer) - addType(Type.UChar, ByteSerializer) - addType(Type.Short, ShortSerializer) - addType(Type.UShort, ShortSerializer) - addType(Type.Int, IntSerializer) - addType(Type.UInt, IntSerializer) - addType(Type.Long, LongSerializer) - addType(Type.ULong, LongSerializer) - - addType(Type.QTime, TimeSerializer) - addType(Type.QDateTime, DateTimeSerializer) - addType(Type.QChar, CharSerializer) - addType(Type.QString, StringSerializer.UTF16) - addType(Type.QByteArray, ByteArraySerializer) - addType(Type.QStringList, StringListSerializer) - addType(Type.QVariantList, VariantListSerializer) - addType(Type.QVariantMap, VariantMapSerializer) - addType(Type.QVariant, VariantSerializer) - - addType(Type.UserType, QType.BufferId, IntSerializer) - addType(Type.UserType, QType.BufferInfo, BufferInfoSerializer) - addType(Type.UserType, QType.DccConfig_IpDetectionMode, DccConfig_IpDetectionModeSerializer) - addType( - Type.UserType, QType.DccConfig_PortSelectionMode, - DccConfig_PortSelectionModeSerializer - ) - addType(Type.UserType, QType.IrcUser, VariantMapSerializer) - addType(Type.UserType, QType.IrcChannel, VariantMapSerializer) - addType(Type.UserType, QType.Identity, VariantMapSerializer) - addType(Type.UserType, QType.IdentityId, IntSerializer) - addType(Type.UserType, QType.MsgId, IntSerializer) - addType(Type.UserType, QType.Message, MessageSerializer) - addType(Type.UserType, QType.NetworkId, IntSerializer) - addType(Type.UserType, QType.NetworkInfo, VariantMapSerializer) - addType(Type.UserType, QType.Network_Server, VariantMapSerializer) - addType(Type.UserType, QType.QHostAddress, HostAddressSerializer) - - addType(Type.QByteArray, "UTF8String", StringSerializer.UTF8) - addType(Type.QByteArray, "CString", StringSerializer.C) - - addType(Type.Long, "PeerPtr", LongSerializer) - } - - fun <T : Any?> get(key: String?): MetaType<T> = - byName[key] as MetaType<T>? ?: throw(IllegalArgumentException("Type does not exist: $key")) - - - fun <T : Any?> get(key: Type?): MetaType<T> = - byType[key] as MetaType<T>? ?: throw(IllegalArgumentException("Type does not exist: $key")) - - fun <T : Any?> get(data: T): MetaType<T>? = when (data) { - equals(null) -> get(Type.Void) - is Boolean -> get<Boolean>(Type.Bool) - is Byte -> get<Byte>(Type.Char) - is Short -> get<Short>(Type.Short) - is Int -> get<Int>(Type.Int) - is Long -> get<Long>(Type.Long) - is LocalTime -> get<LocalTime>(Type.QTime) - is OffsetDateTime -> get<OffsetDateTime>(Type.QDateTime) - is String -> get<String?>(Type.QString) - is QVariant<*> -> get<QVariant<*>>(Type.QVariant) - is List<*> -> if (data.isEmpty() || data[0] !is String) { - get<List<*>>(Type.QVariantList) - } else { - get<QStringList>(Type.QStringList) - } - else -> throw IllegalArgumentException("Unsupported type: $data") - } as MetaType<T> - } -} diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/QType.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/QType.kt index 21529ef3f7e84246c8a11ccb1ddc1fc1caf91d76..8da3dff44dc6155d8ec44c58c652b700c2681494 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/QType.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/QType.kt @@ -1,19 +1,30 @@ package de.kuschku.libquassel.protocol -enum class QType(val typeName: String) { - BufferId("BufferId"), - BufferInfo("BufferInfo"), - DccConfig_IpDetectionMode("DccConfig::IpDetectionMode"), - DccConfig_PortSelectionMode("DccConfig::PortSelectionMode"), - IrcUser("IrcUser"), - IrcChannel("IrcChannel"), - Identity("Identity"), - IdentityId("IdentityId"), - Message("Message"), - MsgId("MsgId"), - Network("Network"), - NetworkId("NetworkId"), - NetworkInfo("NetworkInfo"), - Network_Server("Network::Server"), - QHostAddress("QHostAddress") +import de.kuschku.libquassel.protocol.primitive.serializer.* + +enum class QType(val typeName: String, val serializer: Serializer<*>, + val type: Type = Type.UserType) { + BufferId("BufferId", IntSerializer), + BufferInfo("BufferInfo", BufferInfoSerializer), + DccConfig_IpDetectionMode("DccConfig::IpDetectionMode", DccConfig_IpDetectionModeSerializer), + DccConfig_PortSelectionMode("DccConfig::PortSelectionMode", + DccConfig_PortSelectionModeSerializer), + IrcUser("IrcUser", VariantMapSerializer), + IrcChannel("IrcChannel", VariantMapSerializer), + Identity("Identity", VariantMapSerializer), + IdentityId("IdentityId", IntSerializer), + Message("Message", MessageSerializer), + MsgId("MsgId", IntSerializer), + NetworkId("NetworkId", IntSerializer), + NetworkInfo("NetworkInfo", VariantMapSerializer), + Network_Server("Network::Server", VariantMapSerializer), + QHostAddress("QHostAddress", HostAddressSerializer), + PeerPtr("PeerPtr", LongSerializer, type = Type.Long); + + override fun toString() = "QType($typeName, $type)" + + companion object { + private val map = values().associateBy(QType::typeName) + fun of(name: String) = map[name] + } } diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/QTypes.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/QTypes.kt index 5b931a4657eedc37019599402e0f45e6d450b852..dd3ec4116f1d21d627df3b501e32fcb0fdff17cd 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/QTypes.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/QTypes.kt @@ -12,7 +12,7 @@ import java.nio.ByteBuffer typealias QStringList = List<String?> typealias All_ = Any? -typealias QVariant_ = QVariant<All_> +typealias QVariant_ = QVariant<*> typealias QVariantMap = Map<String, QVariant_> typealias QVariantList = List<QVariant_> @@ -47,7 +47,8 @@ typealias UShort = Short typealias UInt = Int typealias ULong = Long -typealias ARG = QVariant_ +inline fun <T> ARG(data: T?, type: Type) = QVariant.of(data, type) +inline fun <T> ARG(data: T?, type: QType) = QVariant.of(data, type) fun QVariantList.toVariantMap(): QVariantMap { val map = HashMap<String, QVariant_>() diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/QVariant.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/QVariant.kt index 22cd81d6da973409f7f24559b2f07a02323f5e0f..e70c2ab8d17e655c8d98dd9d1f7927a26091c63b 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/QVariant.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/QVariant.kt @@ -1,19 +1,41 @@ package de.kuschku.libquassel.protocol -class QVariant<T>(val data: T?, val type: MetaType<T>) { - constructor(data: T?, type: Type) : this(data, MetaType.Companion.get(type)) - constructor(data: T?, type: QType) : this(data, type.typeName) - constructor(data: T?, type: String) : this(data, MetaType.Companion.get(type)) +import de.kuschku.libquassel.protocol.primitive.serializer.Serializer +import java.nio.ByteBuffer +import java.nio.CharBuffer + +sealed class QVariant<T> constructor(val data: T?, val type: Type, val serializer: Serializer<T>) { + class Typed<T> internal constructor(data: T?, type: Type, serializer: Serializer<T>) : + QVariant<T>(data, type, serializer) { + override fun toString() = "QVariant.Typed(${type.serializableName}, ${toString(data)})" + } + + class Custom<T> internal constructor(data: T?, val qtype: QType, serializer: Serializer<T>) : + QVariant<T>(data, qtype.type, serializer) { + override fun toString() = "QVariant.Custom($qtype, ${toString(data)})" + } fun or(defValue: T): T { return data ?: defValue } - override fun toString(): String { - return "QVariant(${type.name}, $data)" + companion object { + fun <T> of(data: T?, type: Type): QVariant<T> { + return QVariant.Typed(data, type, type.serializer as Serializer<T>) + } + + fun <T> of(data: T?, type: QType) = + QVariant.Custom(data, type, type.serializer as Serializer<T>) } } +inline fun toString(data: Any?) = when (data) { + is ByteBuffer -> data.array()?.contentToString() + is CharBuffer -> data.array()?.contentToString() + is Array<*> -> data.contentToString() + else -> data.toString() +} + inline fun <reified U> QVariant_?.value(): U? = this?.value<U?>(null) inline fun <reified U> QVariant_?.value(defValue: U): U = this?.data as? U ?: defValue @@ -24,4 +46,4 @@ inline fun <reified U> QVariant_?.valueOrThrow(e: Throwable = NullPointerExcepti this?.data as? U ?: throw e inline fun <reified U> QVariant_?.valueOrThrow(e: () -> Throwable): U = - this?.data as? U ?: throw e() + this?.data as? U ?: throw e() \ No newline at end of file diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/Type.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/Type.kt index f644d14a9197fbbc3f273f9fd20c5436e8ed7494..44a70bef0cad4550792567facc82154320451dc6 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/Type.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/Type.kt @@ -1,29 +1,30 @@ package de.kuschku.libquassel.protocol +import de.kuschku.libquassel.protocol.primitive.serializer.* import java.util.* -enum class Type(val id: kotlin.Int) { - Void(0), - Bool(1), - Int(2), - UInt(3), +enum class Type(val id: kotlin.Int, val serializer: Serializer<*>? = null) { + Void(0, VoidSerializer), + Bool(1, BoolSerializer), + Int(2, IntSerializer), + UInt(3, IntSerializer), LongLong(4), ULongLong(5), Double(6), - QChar(7), - QVariantMap(8), - QVariantList(9), + QChar(7, CharSerializer), + QVariantMap(8, VariantMapSerializer), + QVariantList(9, VariantListSerializer), - QString(10), - QStringList(11), - QByteArray(12), + QString(10, StringSerializer.UTF16), + QStringList(11, StringListSerializer), + QByteArray(12, ByteArraySerializer), QBitArray(13), QDate(14), - QTime(15), - QDateTime(16), + QTime(15, TimeSerializer), + QDateTime(16, DateTimeSerializer), QUrl(17), QLocale(18), @@ -73,18 +74,18 @@ enum class Type(val id: kotlin.Int) { QQuaternion(86), VoidStar(128), - Long(129), - Short(130), - Char(131), - ULong(132), + Long(129, LongSerializer), + Short(130, ShortSerializer), + Char(131, ByteSerializer), + ULong(132, LongSerializer), - UShort(133), - UChar(134), + UShort(133, ShortSerializer), + UChar(134, ByteSerializer), Float(135), QObjectStar(136), QWidgetStar(137), - QVariant(138), + QVariant(138, VariantSerializer), User(256), UserType(127), diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitAckSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitAckSerializer.kt index 5f45467c8b0006ef0b8640282edbcfb28badb039..69aade656d54d8548ac81f5f9fbf2d6f2666ad58 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitAckSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitAckSerializer.kt @@ -1,19 +1,16 @@ package de.kuschku.libquassel.protocol.message -import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ -import de.kuschku.libquassel.protocol.Type -import de.kuschku.libquassel.protocol.value +import de.kuschku.libquassel.protocol.* import de.kuschku.libquassel.util.Flags object ClientInitAckSerializer : HandshakeMessageSerializer<HandshakeMessage.ClientInitAck> { override fun serialize(data: HandshakeMessage.ClientInitAck) = mapOf( - "MsgType" to QVariant_("ClientInitAck", Type.QString), - "CoreFeatures" to QVariant_(data.coreFeatures?.toInt(), Type.UInt), - "StorageBackends" to QVariant_(data.backendInfo, Type.QVariantList), - "Authenticator" to QVariant_(data.authenticatorInfo, Type.QVariantList), - "Configured" to QVariant_(data.coreConfigured, Type.Bool), - "FeatureList" to QVariant_(data.featureList, Type.QStringList) + "MsgType" to QVariant.of<All_>("ClientInitAck", Type.QString), + "CoreFeatures" to QVariant.of<All_>(data.coreFeatures?.toInt(), Type.UInt), + "StorageBackends" to QVariant.of<All_>(data.backendInfo, Type.QVariantList), + "Authenticator" to QVariant.of<All_>(data.authenticatorInfo, Type.QVariantList), + "Configured" to QVariant.of<All_>(data.coreConfigured, Type.Bool), + "FeatureList" to QVariant.of<All_>(data.featureList, Type.QStringList) ) override fun deserialize(data: QVariantMap) = HandshakeMessage.ClientInitAck( diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitRejectSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitRejectSerializer.kt index 41da7bf3fcb2091c390615e10c6f33cf92a4610e..12655873b090215fe60505821b61065e775ab908 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitRejectSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitRejectSerializer.kt @@ -1,14 +1,14 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value object ClientInitRejectSerializer : HandshakeMessageSerializer<HandshakeMessage.ClientInitReject> { override fun serialize(data: HandshakeMessage.ClientInitReject) = mapOf( - "MsgType" to QVariant_("ClientInitReject", Type.QString), - "Error" to QVariant_(data.errorString, Type.QString) + "MsgType" to QVariant.of("ClientInitReject", Type.QString), + "Error" to QVariant.of(data.errorString, Type.QString) ) override fun deserialize(data: QVariantMap) = HandshakeMessage.ClientInitReject( diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitSerializer.kt index 9d7c44c0e6c3b255c86515f57c2e4dd7bba66fc8..9050cc75055c14ab9492b5c30b274569f6a97e2c 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientInitSerializer.kt @@ -1,18 +1,18 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value import de.kuschku.libquassel.util.Flags object ClientInitSerializer : HandshakeMessageSerializer<HandshakeMessage.ClientInit> { override fun serialize(data: HandshakeMessage.ClientInit) = mapOf( - "MsgType" to QVariant_("ClientInit", Type.QString), - "ClientVersion" to QVariant_(data.clientVersion, Type.QString), - "ClientDate" to QVariant_(data.buildDate, Type.QString), - "Features" to QVariant_(data.clientFeatures?.toInt(), Type.UInt), - "FeatureList" to QVariant_(data.featureList, Type.QStringList) + "MsgType" to QVariant.of("ClientInit", Type.QString), + "ClientVersion" to QVariant.of(data.clientVersion, Type.QString), + "ClientDate" to QVariant.of(data.buildDate, Type.QString), + "Features" to QVariant.of(data.clientFeatures?.toInt(), Type.UInt), + "FeatureList" to QVariant.of(data.featureList, Type.QStringList) ) override fun deserialize(data: QVariantMap) = HandshakeMessage.ClientInit( diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginAckSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginAckSerializer.kt index ee42806e4a0f46101113c13517b84b10a585ad68..7096331cc4d4a971d2b206801eed5a78ec85bc5c 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginAckSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginAckSerializer.kt @@ -1,12 +1,12 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type object ClientLoginAckSerializer : HandshakeMessageSerializer<HandshakeMessage.ClientLoginAck> { override fun serialize(data: HandshakeMessage.ClientLoginAck) = mapOf( - "MsgType" to QVariant_("ClientLoginAck", Type.QString) + "MsgType" to QVariant.of("ClientLoginAck", Type.QString) ) override fun deserialize(data: QVariantMap) = HandshakeMessage.ClientLoginAck() diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginRejectSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginRejectSerializer.kt index 11dd2b7fb4025be01c88812ca506e29a5e5b9013..c2e53de455778ccda3e73431bd9f91c4968b8e2c 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginRejectSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginRejectSerializer.kt @@ -1,15 +1,15 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value object ClientLoginRejectSerializer : HandshakeMessageSerializer<HandshakeMessage.ClientLoginReject> { override fun serialize(data: HandshakeMessage.ClientLoginReject) = mapOf( - "MsgType" to QVariant_("ClientLoginReject", Type.QString), - "Error" to QVariant_(data.errorString, Type.QString) + "MsgType" to QVariant.of("ClientLoginReject", Type.QString), + "Error" to QVariant.of(data.errorString, Type.QString) ) override fun deserialize(data: QVariantMap) = HandshakeMessage.ClientLoginReject( diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginSerializer.kt index 35fdc7c70c9c09f4486106f3bfc710d07d58b061..0a9347706de8b2fa6f4a9a4bdaee947749695ceb 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/ClientLoginSerializer.kt @@ -1,15 +1,15 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value object ClientLoginSerializer : HandshakeMessageSerializer<HandshakeMessage.ClientLogin> { override fun serialize(data: HandshakeMessage.ClientLogin) = mapOf( - "MsgType" to QVariant_("ClientLogin", Type.QString), - "User" to QVariant_(data.user, Type.QString), - "Password" to QVariant_(data.password, Type.QString) + "MsgType" to QVariant.of("ClientLogin", Type.QString), + "User" to QVariant.of(data.user, Type.QString), + "Password" to QVariant.of(data.password, Type.QString) ) override fun deserialize(data: QVariantMap) = HandshakeMessage.ClientLogin( diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupAckSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupAckSerializer.kt index 8f92d8a5842e5d75a73449fb84a3a458e2722ec6..dbc9548685cb93415033ca68048a7938642ad282 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupAckSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupAckSerializer.kt @@ -1,12 +1,12 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type object CoreSetupAckSerializer : HandshakeMessageSerializer<HandshakeMessage.CoreSetupAck> { override fun serialize(data: HandshakeMessage.CoreSetupAck) = mapOf( - "MsgType" to QVariant_("CoreSetupAck", Type.QString) + "MsgType" to QVariant.of("CoreSetupAck", Type.QString) ) override fun deserialize(data: QVariantMap) = HandshakeMessage.CoreSetupAck() diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupDataSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupDataSerializer.kt index 47462bb78b543ec80c0847e3eadaaa6996133c99..6988b1c18f5d5b4f6fee2bccd0112b0e69d055ba 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupDataSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupDataSerializer.kt @@ -1,22 +1,21 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value object CoreSetupDataSerializer : HandshakeMessageSerializer<HandshakeMessage.CoreSetupData> { override fun serialize(data: HandshakeMessage.CoreSetupData) = mapOf( - "MsgType" to QVariant_("CoreSetupData", Type.QString), - "SetupData" to QVariant_( - mapOf( - "AdminUser" to QVariant_(data.adminUser, Type.QString), - "AdminPasswd" to QVariant_(data.adminPassword, Type.QString), - "Backend" to QVariant_(data.backend, Type.QString), - "ConnectionProperties" to QVariant_(data.setupData, Type.QVariantMap), - "Authenticator" to QVariant_(data.authenticator, Type.QString), - "AuthProperties" to QVariant_(data.authSetupData, Type.QVariantMap) - ), Type.QVariantMap + "MsgType" to QVariant.of("CoreSetupData", Type.QString), + "SetupData" to QVariant.of(mapOf( + "AdminUser" to QVariant.of(data.adminUser, Type.QString), + "AdminPasswd" to QVariant.of(data.adminPassword, Type.QString), + "Backend" to QVariant.of(data.backend, Type.QString), + "ConnectionProperties" to QVariant.of(data.setupData, Type.QVariantMap), + "Authenticator" to QVariant.of(data.authenticator, Type.QString), + "AuthProperties" to QVariant.of(data.authSetupData, Type.QVariantMap) + ), Type.QVariantMap ) ) diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupRejectSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupRejectSerializer.kt index e6c732a941bb1c47b656d058b6050e54a8c02f48..981da5b531b0ef6fb67ea33b41134386b6c12aa1 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupRejectSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/CoreSetupRejectSerializer.kt @@ -1,14 +1,14 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value object CoreSetupRejectSerializer : HandshakeMessageSerializer<HandshakeMessage.CoreSetupReject> { override fun serialize(data: HandshakeMessage.CoreSetupReject) = mapOf( - "MsgType" to QVariant_("CoreSetupReject", Type.QString), - "Error" to QVariant_(data.errorString, Type.QString) + "MsgType" to QVariant.of("CoreSetupReject", Type.QString), + "Error" to QVariant.of(data.errorString, Type.QString) ) override fun deserialize(data: QVariantMap) = HandshakeMessage.CoreSetupReject( diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/HandshakeMessage.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/HandshakeMessage.kt index a4f584fa57bd153e8f98bf1058ff146f805c0d6a..be120e3adf26c4c9dc0e42a6bdefec1a7ac7ccba 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/HandshakeMessage.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/HandshakeMessage.kt @@ -5,7 +5,6 @@ import de.kuschku.libquassel.protocol.QVariantList import de.kuschku.libquassel.protocol.QVariantMap import de.kuschku.libquassel.protocol.value - sealed class HandshakeMessage { class ClientInit( val clientVersion: String?, val buildDate: String?, @@ -112,6 +111,5 @@ sealed class HandshakeMessage { ) } } - } } diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/HeartBeatReplySerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/HeartBeatReplySerializer.kt index 2340c29f949957d47e2046bf66aea463564aaaaf..debd530833bc6534c3a26e9a1260eb8151b215f0 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/HeartBeatReplySerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/HeartBeatReplySerializer.kt @@ -1,15 +1,15 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantList -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value import org.threeten.bp.Instant object HeartBeatReplySerializer : SignalProxyMessageSerializer<SignalProxyMessage.HeartBeatReply> { override fun serialize(data: SignalProxyMessage.HeartBeatReply) = listOf( - QVariant_(RequestType.HeartBeatReply.value, Type.Int), - QVariant_(data.timestamp, Type.QDateTime) + QVariant.of(RequestType.HeartBeatReply.value, Type.Int), + QVariant.of(data.timestamp, Type.QDateTime) ) override fun deserialize(data: QVariantList) = SignalProxyMessage.HeartBeatReply( diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/HeartBeatSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/HeartBeatSerializer.kt index f17071c7f15b101a1d51da47e9d14344108889fe..471275147e6717f416e28598e79708b80802e0c9 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/HeartBeatSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/HeartBeatSerializer.kt @@ -1,15 +1,15 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantList -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value import org.threeten.bp.Instant object HeartBeatSerializer : SignalProxyMessageSerializer<SignalProxyMessage.HeartBeat> { override fun serialize(data: SignalProxyMessage.HeartBeat) = listOf( - QVariant_(RequestType.HeartBeat.value, Type.Int), - QVariant_(data.timestamp, Type.QDateTime) + QVariant.of(RequestType.HeartBeat.value, Type.Int), + QVariant.of(data.timestamp, Type.QDateTime) ) override fun deserialize(data: QVariantList) = SignalProxyMessage.HeartBeat( diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/InitDataSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/InitDataSerializer.kt index 2f85f5ac72bdaa5e91432f99c5bed5665c005177..574db68dc02aaf307ddea89783c7ffc3ee517d43 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/InitDataSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/InitDataSerializer.kt @@ -8,10 +8,10 @@ import java.nio.ByteBuffer object InitDataSerializer : SignalProxyMessageSerializer<SignalProxyMessage.InitData> { override fun serialize(data: SignalProxyMessage.InitData) = listOf( - QVariant_(RequestType.InitData.value, Type.Int), - QVariant_(data.className.serializeString(StringSerializer.UTF8), Type.QByteArray), - QVariant_(data.objectName.serializeString(StringSerializer.UTF8), Type.QByteArray), - QVariant_(data.initData, Type.QVariantMap) + QVariant.of<Any>(RequestType.InitData.value, Type.Int), + QVariant.of<Any>(data.className.serializeString(StringSerializer.UTF8), Type.QByteArray), + QVariant.of<Any>(data.objectName.serializeString(StringSerializer.UTF8), Type.QByteArray), + QVariant.of<Any>(data.initData, Type.QVariantMap) ) override fun deserialize(data: QVariantList) = SignalProxyMessage.InitData( diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/InitRequestSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/InitRequestSerializer.kt index 4a891f52a3c7e09da630433129d7bf673e376f2b..604b813739d81dfaa0f0b776159afeee629472c5 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/InitRequestSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/InitRequestSerializer.kt @@ -1,7 +1,7 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantList -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.primitive.serializer.StringSerializer import de.kuschku.libquassel.protocol.value @@ -11,9 +11,9 @@ import java.nio.ByteBuffer object InitRequestSerializer : SignalProxyMessageSerializer<SignalProxyMessage.InitRequest> { override fun serialize(data: SignalProxyMessage.InitRequest) = listOf( - QVariant_(RequestType.InitRequest.value, Type.Int), - QVariant_(data.className.serializeString(StringSerializer.UTF8), Type.QByteArray), - QVariant_(data.objectName.serializeString(StringSerializer.UTF8), Type.QByteArray) + QVariant.of(RequestType.InitRequest.value, Type.Int), + QVariant.of(data.className.serializeString(StringSerializer.UTF8), Type.QByteArray), + QVariant.of(data.objectName.serializeString(StringSerializer.UTF8), Type.QByteArray) ) override fun deserialize(data: QVariantList) = SignalProxyMessage.InitRequest( diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/RpcCallSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/RpcCallSerializer.kt index b0acbfe5b93c4ef099896cdf7a9502e77444d651..aaf9d34dd0db7238797547f9e8c516a812533b95 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/RpcCallSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/RpcCallSerializer.kt @@ -1,7 +1,7 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantList -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.primitive.serializer.StringSerializer import de.kuschku.libquassel.protocol.value @@ -11,8 +11,8 @@ import java.nio.ByteBuffer object RpcCallSerializer : SignalProxyMessageSerializer<SignalProxyMessage.RpcCall> { override fun serialize(data: SignalProxyMessage.RpcCall) = listOf( - QVariant_(RequestType.RpcCall.value, Type.Int), - QVariant_(data.slotName.serializeString(StringSerializer.UTF8), Type.QByteArray), + QVariant.of(RequestType.RpcCall.value, Type.Int), + QVariant.of(data.slotName.serializeString(StringSerializer.UTF8), Type.QByteArray), *data.params.toTypedArray() ) diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/SessionInitSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/SessionInitSerializer.kt index fb18d67484020b02d1e29f7874e964d404cdd24d..7526191e7cb920e8e6ee2d1590e09f25dd250861 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/SessionInitSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/SessionInitSerializer.kt @@ -1,19 +1,18 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value object SessionInitSerializer : HandshakeMessageSerializer<HandshakeMessage.SessionInit> { override fun serialize(data: HandshakeMessage.SessionInit) = mapOf( - "MsgType" to QVariant_("SessionInit", Type.QString), - "SessionState" to QVariant_( - mapOf( - "BufferInfos" to QVariant_(data.bufferInfos, Type.QVariantList), - "NetworkIds" to QVariant_(data.networkIds, Type.QVariantList), - "Identities" to QVariant_(data.identities, Type.QVariantList) - ), Type.QVariantMap + "MsgType" to QVariant.of("SessionInit", Type.QString), + "SessionState" to QVariant.of(mapOf( + "BufferInfos" to QVariant.of(data.bufferInfos, Type.QVariantList), + "NetworkIds" to QVariant.of(data.networkIds, Type.QVariantList), + "Identities" to QVariant.of(data.identities, Type.QVariantList) + ), Type.QVariantMap ) ) diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/SignalProxyMessage.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/SignalProxyMessage.kt index f9beac7863d065f623afd554ec197b586f18a13c..5f7c4a7f4fce7fc1d106c992222b78b121da4ef4 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/SignalProxyMessage.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/SignalProxyMessage.kt @@ -67,7 +67,5 @@ sealed class SignalProxyMessage { else -> throw IllegalArgumentException("Invalid MsgType: $type") } } - } } - diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/message/SyncMessageSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/message/SyncMessageSerializer.kt index 27f177c3aa02d0bc47e77b612d65048b8bcf7f36..284fe4908f817edcf0c7e6d9a5be3c10a2f0bf0a 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/message/SyncMessageSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/message/SyncMessageSerializer.kt @@ -1,7 +1,7 @@ package de.kuschku.libquassel.protocol.message +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantList -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.primitive.serializer.StringSerializer import de.kuschku.libquassel.protocol.value @@ -11,10 +11,10 @@ import java.nio.ByteBuffer object SyncMessageSerializer : SignalProxyMessageSerializer<SignalProxyMessage.SyncMessage> { override fun serialize(data: SignalProxyMessage.SyncMessage): QVariantList = listOf( - QVariant_(RequestType.Sync.value, Type.Int), - QVariant_(data.className.serializeString(StringSerializer.UTF8), Type.QByteArray), - QVariant_(data.objectName.serializeString(StringSerializer.UTF8), Type.QByteArray), - QVariant_(data.slotName.serializeString(StringSerializer.UTF8), Type.QByteArray), + QVariant.of(RequestType.Sync.value, Type.Int), + QVariant.of(data.className.serializeString(StringSerializer.UTF8), Type.QByteArray), + QVariant.of(data.objectName.serializeString(StringSerializer.UTF8), Type.QByteArray), + QVariant.of(data.slotName.serializeString(StringSerializer.UTF8), Type.QByteArray), *data.params.toTypedArray() ) diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/CharSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/CharSerializer.kt index aa45a98d109ea1b603f32bc6f35991752dc82fcd..23f92b87f8f75adaaf7436b145e0abb5c9e8dd48 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/CharSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/CharSerializer.kt @@ -12,7 +12,6 @@ object CharSerializer : Serializer<Char> { private val charBufferOut = CharBuffer.allocate(1) private val encoder = Charsets.UTF_16BE.newEncoder() private val decoder = Charsets.UTF_16BE.newDecoder() - override fun serialize(buffer: ChainedByteBuffer, data: Char, features: QuasselFeatures) { charBufferIn.clear() charBufferIn.put(data) diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/HandshakeVariantMapSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/HandshakeVariantMapSerializer.kt index f4da382ef6c12188d0f223cb601d3a3d46ca134e..39ae048b8c95448d94cd820334712cb6056e5aa7 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/HandshakeVariantMapSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/HandshakeVariantMapSerializer.kt @@ -1,7 +1,7 @@ package de.kuschku.libquassel.protocol.primitive.serializer +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value import de.kuschku.libquassel.quassel.QuasselFeatures @@ -12,7 +12,7 @@ object HandshakeVariantMapSerializer : Serializer<QVariantMap> { override fun serialize(buffer: ChainedByteBuffer, data: QVariantMap, features: QuasselFeatures) { IntSerializer.serialize(buffer, data.size * 2, features) data.entries.forEach { (key, value) -> - VariantSerializer.serialize(buffer, QVariant_(key, Type.QString), features) + VariantSerializer.serialize(buffer, QVariant.of(key, Type.QString), features) VariantSerializer.serialize(buffer, value, features) } } diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/Serializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/Serializer.kt index b83a10733ecbeac73df45ed26e8a3ddcbb3084e5..a041312055ff5f8fc109f507af8fa5e3fdc36582 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/Serializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/Serializer.kt @@ -14,7 +14,6 @@ * You should have received a copy of the GNU General Public License along * with this program. If not, see <http://www.gnu.org/licenses/>. */ - package de.kuschku.libquassel.protocol.primitive.serializer import de.kuschku.libquassel.quassel.QuasselFeatures diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt index a9b2ef1d99a779e1384dd33c1d4771ea427966a4..c882f38f8bdf6ef515f4cf906596d9c91992b348 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/StringSerializer.kt @@ -15,8 +15,7 @@ abstract class StringSerializer( private val decoder: CharsetDecoder, private val trailingNullBytes: Int ) : Serializer<String?> { - constructor(charset: Charset, - trailingNullByte: Boolean = false) : this( + constructor(charset: Charset, trailingNullByte: Boolean = false) : this( charset.newEncoder(), charset.newDecoder(), if (trailingNullByte) { diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantListSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantListSerializer.kt index c121938b3887f9c565aba27bbd137b2d6647f493..8e6159a44ae9070ae414ef6c47e7b094d8fe88ab 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantListSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantListSerializer.kt @@ -22,5 +22,4 @@ object VariantListSerializer : Serializer<QVariantList> { } return result } - } diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantMapSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantMapSerializer.kt index f8d1676f02b18774594d9387876bdba78fde6af2..3a5a68ca93f1a239fefab777be56067869c68abc 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantMapSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantMapSerializer.kt @@ -24,5 +24,4 @@ object VariantMapSerializer : Serializer<QVariantMap> { }.toTypedArray() ) } - } diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantSerializer.kt index b57221a27ae20571e4163a367b82a708ef46d45a..c55df4dac28839f8bf691a5bfb08045cc3cfe06c 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/VariantSerializer.kt @@ -7,34 +7,29 @@ import java.nio.ByteBuffer object VariantSerializer : Serializer<QVariant_> { override fun serialize(buffer: ChainedByteBuffer, data: QVariant_, features: QuasselFeatures) { - IntSerializer.serialize(buffer, data.type.type.id, features) + IntSerializer.serialize(buffer, data.type.id, features) BoolSerializer.serialize(buffer, false, features) - if (data.type.type == Type.UserType) { - StringSerializer.C.serialize(buffer, data.type.name, features) + if (data is QVariant.Custom && data.type == Type.UserType) { + StringSerializer.C.serialize(buffer, data.qtype.name, features) } - if (data.type.serializer == null) { - throw IllegalArgumentException("Unknown type: ${data.type.name}") - } - data.type.serializer.serialize(buffer, data.data, features) + (data.serializer as Serializer<Any?>).serialize(buffer, data.data, features) } override fun deserialize(buffer: ByteBuffer, features: QuasselFeatures): QVariant_ { val rawType = IntSerializer.deserialize(buffer, features) val type = Type.of(rawType) - val isNull = BoolSerializer.deserialize(buffer, features) - val metaType: MetaType<All_> = if (type == Type.UserType) { - val deserialize = StringSerializer.C.deserialize(buffer, features) - MetaType.get(deserialize) + return if (type == Type.UserType) { + val name = StringSerializer.C.deserialize(buffer, features) + val qType = name?.let(QType.Companion::of) + ?: throw IllegalArgumentException("No such type: $name") + val value = qType.serializer.deserialize(buffer, features) + QVariant.of<All_>(value, qType) } else { - MetaType.get(type) + val serializer = type?.serializer ?: throw IllegalArgumentException("No such type: $type") + val value = serializer.deserialize(buffer, features) + QVariant.of<All_>(value, type) } - if (metaType.serializer == null) { - throw IllegalArgumentException("Unknown type: ${metaType.name}") - } - - val result = metaType.serializer.deserialize(buffer, features) - return QVariant(result, metaType) } } diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/QuasselFeatures.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/QuasselFeatures.kt index 6b61e4b66fb5fec39ba513650214a3207ee1f554..6bce7edbe5761f273cd2ddbe6327cce49ea6a1a3 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/QuasselFeatures.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/QuasselFeatures.kt @@ -5,7 +5,7 @@ import de.kuschku.libquassel.protocol.Legacy_Features class QuasselFeatures( val enabledFeatures: Set<ExtendedFeature>, - val unknownFeatures: Set<String> + val unknownFeatures: Set<String> = emptySet() ) { constructor(legacyFeatures: Legacy_Features?, extendedFeatures: Collection<String>) : this( legacyFeatures?.enabledValues()?.map(Legacy_Feature::toExtended).orEmpty() union diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/exceptions/DeserializationException.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/exceptions/DeserializationException.kt new file mode 100644 index 0000000000000000000000000000000000000000..e4fd7384fbc3ef6492e0f717c90028963c0497d2 --- /dev/null +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/exceptions/DeserializationException.kt @@ -0,0 +1,9 @@ +package de.kuschku.libquassel.quassel.exceptions + +class DeserializationException : Exception { + constructor() : super() + constructor(p0: String?) : super(p0) + constructor(p0: String?, p1: Throwable?) : super(p0, p1) + constructor(p0: Throwable?) : super(p0) + constructor(p0: String?, p1: Throwable?, p2: Boolean, p3: Boolean) : super(p0, p1, p2, p3) +} \ No newline at end of file diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/exceptions/MessageHandlingException.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/exceptions/MessageHandlingException.kt new file mode 100644 index 0000000000000000000000000000000000000000..93f36ceee12c19ba4dca07973389e68626ab83c8 --- /dev/null +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/exceptions/MessageHandlingException.kt @@ -0,0 +1,16 @@ +package de.kuschku.libquassel.quassel.exceptions + +import de.kuschku.libquassel.protocol.message.HandshakeMessage +import de.kuschku.libquassel.protocol.message.SignalProxyMessage + +sealed class MessageHandlingException(cause: Throwable?) : Exception(cause) { + class SignalProxy( + val source: SignalProxyMessage, + cause: Throwable? + ) : MessageHandlingException(cause) + + class Handshake( + val source: HandshakeMessage, + cause: Throwable? + ) : MessageHandlingException(cause) +} \ No newline at end of file diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt index 6774b96f1454b6861a84305fb591daed51ead52f..146a837f7b05a217d3322a9a76f4e58d9db23209 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/AliasManager.kt @@ -1,7 +1,7 @@ package de.kuschku.libquassel.quassel.syncables +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.valueOr import de.kuschku.libquassel.quassel.BufferInfo @@ -16,7 +16,7 @@ class AliasManager constructor( proxy: SignalProxy ) : SyncableObject(proxy, "AliasManager"), IAliasManager, ISyncableObject { override fun toVariantMap(): QVariantMap = mapOf( - "Aliases" to QVariant_(initAliases(), Type.QVariantMap) + "Aliases" to QVariant.of(initAliases(), Type.QVariantMap) ) override fun fromVariantMap(properties: QVariantMap) { @@ -24,8 +24,8 @@ class AliasManager constructor( } override fun initAliases(): QVariantMap = mapOf( - "names" to QVariant_(_aliases.map(Alias::name), Type.QStringList), - "expansions" to QVariant_(_aliases.map(Alias::expansion), Type.QStringList) + "names" to QVariant.of(_aliases.map(Alias::name), Type.QStringList), + "expansions" to QVariant.of(_aliases.map(Alias::expansion), Type.QStringList) ) override fun initSetAliases(aliases: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt index a6497e25dc8fce11f70c391b759e6a1398780e4d..54f9ab51e3df93a55a7bb1b782b45568376d7493 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferSyncer.kt @@ -46,10 +46,10 @@ class BufferSyncer constructor( fun liveBufferInfos(): Observable<Map<BufferId, BufferInfo>> = live_bufferInfos override fun toVariantMap(): QVariantMap = mapOf( - "Activities" to QVariant_(initActivities(), Type.QVariantList), - "HighlightCounts" to QVariant_(initHighlightCounts(), Type.QVariantList), - "LastSeenMsg" to QVariant_(initLastSeenMsg(), Type.QVariantList), - "MarkerLines" to QVariant_(initMarkerLines(), Type.QVariantList) + "Activities" to QVariant.of(initActivities(), Type.QVariantList), + "HighlightCounts" to QVariant.of(initHighlightCounts(), Type.QVariantList), + "LastSeenMsg" to QVariant.of(initLastSeenMsg(), Type.QVariantList), + "MarkerLines" to QVariant.of(initMarkerLines(), Type.QVariantList) ) override fun fromVariantMap(properties: QVariantMap) { @@ -62,8 +62,8 @@ class BufferSyncer constructor( override fun initActivities(): QVariantList { val list: MutableList<QVariant_> = mutableListOf() for ((key, value) in _bufferActivities) { - list.add(QVariant_(key, QType.BufferId)) - list.add(QVariant_(value, Type.Int)) + list.add(QVariant.of(key, QType.BufferId)) + list.add(QVariant.of(value, Type.Int)) } return list } @@ -71,8 +71,8 @@ class BufferSyncer constructor( override fun initHighlightCounts(): QVariantList { val list: MutableList<QVariant_> = mutableListOf() for ((key, value) in _highlightCounts) { - list.add(QVariant_(key, QType.BufferId)) - list.add(QVariant_(value, Type.Int)) + list.add(QVariant.of(key, QType.BufferId)) + list.add(QVariant.of(value, Type.Int)) } return list } @@ -80,8 +80,8 @@ class BufferSyncer constructor( override fun initLastSeenMsg(): QVariantList { val list: MutableList<QVariant_> = mutableListOf() for ((key, value) in _bufferActivities) { - list.add(QVariant_(key, QType.BufferId)) - list.add(QVariant_(value, QType.MsgId)) + list.add(QVariant.of(key, QType.BufferId)) + list.add(QVariant.of(value, QType.MsgId)) } return list } @@ -89,8 +89,8 @@ class BufferSyncer constructor( override fun initMarkerLines(): QVariantList { val list: MutableList<QVariant_> = mutableListOf() for ((key, value) in _bufferActivities) { - list.add(QVariant_(key, QType.BufferId)) - list.add(QVariant_(value, QType.MsgId)) + list.add(QVariant.of(key, QType.BufferId)) + list.add(QVariant.of(value, QType.MsgId)) } return list } diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt index f3f69c2a650d75ae79c69b3537c79905e5649d87..cafcc17dfd4a2137e329a0db8edf61a8f97faddf 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewConfig.kt @@ -19,9 +19,9 @@ class BufferViewConfig constructor( } override fun toVariantMap(): QVariantMap = mapOf( - "BufferList" to QVariant_(initBufferList(), Type.QVariantList), - "RemovedBuffers" to QVariant_(initBufferList(), Type.QVariantList), - "TemporarilyRemovedBuffers" to QVariant_(initBufferList(), Type.QVariantList) + "BufferList" to QVariant.of(initBufferList(), Type.QVariantList), + "RemovedBuffers" to QVariant.of(initBufferList(), Type.QVariantList), + "TemporarilyRemovedBuffers" to QVariant.of(initBufferList(), Type.QVariantList) ) + initProperties() override fun fromVariantMap(properties: QVariantMap) { @@ -39,28 +39,28 @@ class BufferViewConfig constructor( } override fun initBufferList(): QVariantList = _buffers.map { - QVariant_(it, QType.BufferId) + QVariant.of(it, QType.BufferId) } override fun initRemovedBuffers(): QVariantList = _removedBuffers.map { - QVariant_(it, QType.BufferId) + QVariant.of(it, QType.BufferId) } override fun initTemporarilyRemovedBuffers(): QVariantList = _temporarilyRemovedBuffers.map { - QVariant_(it, QType.BufferId) + QVariant.of(it, QType.BufferId) } override fun initProperties(): QVariantMap = mapOf( - "bufferViewName" to QVariant_(bufferViewName(), Type.QString), - "networkId" to QVariant_(networkId(), QType.NetworkId), - "addNewBuffersAutomatically" to QVariant_(addNewBuffersAutomatically(), Type.Bool), - "sortAlphabetically" to QVariant_(sortAlphabetically(), Type.Bool), - "hideInactiveBuffers" to QVariant_(hideInactiveBuffers(), Type.Bool), - "hideInactiveNetworks" to QVariant_(hideInactiveNetworks(), Type.Bool), - "disableDecoration" to QVariant_(disableDecoration(), Type.Bool), - "allowedBufferTypes" to QVariant_(allowedBufferTypes(), Type.Int), - "minimumActivity" to QVariant_(minimumActivity(), Type.Int), - "showSearch" to QVariant_(showSearch(), Type.Bool) + "bufferViewName" to QVariant.of(bufferViewName(), Type.QString), + "networkId" to QVariant.of(networkId(), QType.NetworkId), + "addNewBuffersAutomatically" to QVariant.of(addNewBuffersAutomatically(), Type.Bool), + "sortAlphabetically" to QVariant.of(sortAlphabetically(), Type.Bool), + "hideInactiveBuffers" to QVariant.of(hideInactiveBuffers(), Type.Bool), + "hideInactiveNetworks" to QVariant.of(hideInactiveNetworks(), Type.Bool), + "disableDecoration" to QVariant.of(disableDecoration(), Type.Bool), + "allowedBufferTypes" to QVariant.of(allowedBufferTypes(), Type.Int), + "minimumActivity" to QVariant.of(minimumActivity(), Type.Int), + "showSearch" to QVariant.of(showSearch(), Type.Bool) ) override fun initSetBufferList(buffers: QVariantList) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewManager.kt index bf56136b46c27632a0afa8eb89237e88f110a28f..3d479dc2242a112c7b39d5fbb799b744e3021997 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/BufferViewManager.kt @@ -13,7 +13,7 @@ class BufferViewManager constructor( private val session: ISession ) : SyncableObject(proxy, "BufferViewManager"), IBufferViewManager { override fun toVariantMap(): QVariantMap = mapOf( - "BufferViewIds" to QVariant_(initBufferViewIds(), Type.QVariantList) + "BufferViewIds" to QVariant.of(initBufferViewIds(), Type.QVariantList) ) override fun fromVariantMap(properties: QVariantMap) { @@ -21,7 +21,7 @@ class BufferViewManager constructor( } override fun initBufferViewIds(): QVariantList = _bufferViewConfigs.keys.map { - QVariant_(it, Type.Int) + QVariant.of(it, Type.Int) } fun bufferViewConfig(bufferViewId: Int) = _bufferViewConfigs[bufferViewId] diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/CertManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/CertManager.kt index 749d5a59490f7f07e8d1a1aff977ca0bd01c9a7b..a35d0cbfa8f62d133b391ce30376dc233c03200f 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/CertManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/CertManager.kt @@ -20,8 +20,8 @@ class CertManager constructor( } override fun initProperties(): QVariantMap = mapOf( - "sslKey" to QVariant_(sslKeyPem(), Type.QByteArray), - "sslCert" to QVariant_(sslCertPem(), Type.QByteArray) + "sslKey" to QVariant.of(sslKeyPem(), Type.QByteArray), + "sslCert" to QVariant.of(sslCertPem(), Type.QByteArray) ) override fun initSetProperties(properties: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/CoreInfo.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/CoreInfo.kt index 528178b7ce022329157cad1b9702f81ce8e855f0..ad2561581d23343fadbfe47f12a13d7513bf5760 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/CoreInfo.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/CoreInfo.kt @@ -1,7 +1,7 @@ package de.kuschku.libquassel.quassel.syncables +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.value import de.kuschku.libquassel.quassel.syncables.interfaces.ICoreInfo @@ -17,7 +17,7 @@ class CoreInfo constructor( } override fun initProperties(): QVariantMap = mapOf( - "coreData" to QVariant_(coreData(), Type.QVariantMap) + "coreData" to QVariant.of(coreData(), Type.QVariantMap) ) override fun initSetProperties(properties: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/DccConfig.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/DccConfig.kt index 9663599c22ce896337650a9f315a75abb7fd2cd2..d682ef607ea8e3f5aac2cf76dc2ad55a621e10d6 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/DccConfig.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/DccConfig.kt @@ -21,25 +21,25 @@ class DccConfig constructor( override fun initProperties(): QVariantMap = mapOf( /// Whether DCC is enabled - "dccEnabled" to QVariant_(isDccEnabled(), Type.Bool), + "dccEnabled" to QVariant.of(isDccEnabled(), Type.Bool), /// The IP to use for outgoing traffic - "outgoingIp" to QVariant_(outgoingIp(), QType.QHostAddress), + "outgoingIp" to QVariant.of(outgoingIp(), QType.QHostAddress), /// The IP detection mode - "ipDetectionMode" to QVariant_(ipDetectionMode(), QType.DccConfig_IpDetectionMode), + "ipDetectionMode" to QVariant.of(ipDetectionMode(), QType.DccConfig_IpDetectionMode), /// The port range selection mode - "portSelectionMode" to QVariant_(portSelectionMode(), QType.DccConfig_PortSelectionMode), + "portSelectionMode" to QVariant.of(portSelectionMode(), QType.DccConfig_PortSelectionMode), /// Minimum port to use for incoming connections - "minPort" to QVariant_(minPort(), Type.UShort), + "minPort" to QVariant.of(minPort(), Type.UShort), /// Maximum port to use for incoming connections - "maxPort" to QVariant_(maxPort(), Type.UShort), + "maxPort" to QVariant.of(maxPort(), Type.UShort), /// The chunk size to be used - "chunkSize" to QVariant_(chunkSize(), Type.Int), + "chunkSize" to QVariant.of(chunkSize(), Type.Int), /// The timeout for DCC transfers - "sendTimeout" to QVariant_(sendTimeout(), Type.Int), + "sendTimeout" to QVariant.of(sendTimeout(), Type.Int), /// Whether passive (reverse) DCC should be used - "usePassiveDcc" to QVariant_(usePassiveDcc(), Type.Bool), + "usePassiveDcc" to QVariant.of(usePassiveDcc(), Type.Bool), /// Whether fast sending should be used - "useFastSend" to QVariant_(useFastSend(), Type.Bool) + "useFastSend" to QVariant.of(useFastSend(), Type.Bool) ) override fun initSetProperties(properties: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Identity.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Identity.kt index 3f0152e6e161c2686a11f84ed83c0faf1f0f5db4..953ee32dc5f12760372dbf910c8a7fde7b91c6f9 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Identity.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Identity.kt @@ -17,25 +17,25 @@ class Identity constructor( } override fun initProperties(): QVariantMap = mapOf( - "identityId" to QVariant_(id(), QType.IdentityId), - "identityName" to QVariant_(identityName(), Type.QString), - "realName" to QVariant_(realName(), Type.QString), - "nicks" to QVariant_(nicks(), Type.QStringList), - "awayNick" to QVariant_(awayNick(), Type.QString), - "awayNickEnabled" to QVariant_(awayNickEnabled(), Type.Bool), - "awayReason" to QVariant_(awayReason(), Type.QString), - "awayReasonEnabled" to QVariant_(awayReasonEnabled(), Type.Bool), - "autoAwayEnabled" to QVariant_(autoAwayEnabled(), Type.Bool), - "autoAwayTime" to QVariant_(autoAwayTime(), Type.Int), - "autoAwayReason" to QVariant_(autoAwayReason(), Type.QString), - "autoAwayReasonEnabled" to QVariant_(autoAwayReasonEnabled(), Type.Bool), - "detachAwayEnabled" to QVariant_(detachAwayEnabled(), Type.Bool), - "detachAwayReason" to QVariant_(detachAwayReason(), Type.QString), - "detachAwayReasonEnabled" to QVariant_(detachAwayReasonEnabled(), Type.Bool), - "ident" to QVariant_(ident(), Type.QString), - "kickReason" to QVariant_(kickReason(), Type.QString), - "partReason" to QVariant_(partReason(), Type.QString), - "quitReason" to QVariant_(quitReason(), Type.QString) + "identityId" to QVariant.of(id(), QType.IdentityId), + "identityName" to QVariant.of(identityName(), Type.QString), + "realName" to QVariant.of(realName(), Type.QString), + "nicks" to QVariant.of(nicks(), Type.QStringList), + "awayNick" to QVariant.of(awayNick(), Type.QString), + "awayNickEnabled" to QVariant.of(awayNickEnabled(), Type.Bool), + "awayReason" to QVariant.of(awayReason(), Type.QString), + "awayReasonEnabled" to QVariant.of(awayReasonEnabled(), Type.Bool), + "autoAwayEnabled" to QVariant.of(autoAwayEnabled(), Type.Bool), + "autoAwayTime" to QVariant.of(autoAwayTime(), Type.Int), + "autoAwayReason" to QVariant.of(autoAwayReason(), Type.QString), + "autoAwayReasonEnabled" to QVariant.of(autoAwayReasonEnabled(), Type.Bool), + "detachAwayEnabled" to QVariant.of(detachAwayEnabled(), Type.Bool), + "detachAwayReason" to QVariant.of(detachAwayReason(), Type.QString), + "detachAwayReasonEnabled" to QVariant.of(detachAwayReasonEnabled(), Type.Bool), + "ident" to QVariant.of(ident(), Type.QString), + "kickReason" to QVariant.of(kickReason(), Type.QString), + "partReason" to QVariant.of(partReason(), Type.QString), + "quitReason" to QVariant.of(quitReason(), Type.QString) ) override fun initSetProperties(properties: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IgnoreListManager.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IgnoreListManager.kt index 43b3b8e7cf6cde1e5aba2a489b736d87a740f7f3..8d262696e63fd56e8ed7f5db0fbc8d5ca2920816 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IgnoreListManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IgnoreListManager.kt @@ -1,7 +1,7 @@ package de.kuschku.libquassel.quassel.syncables +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.valueOr import de.kuschku.libquassel.quassel.syncables.interfaces.IIgnoreListManager @@ -11,7 +11,7 @@ class IgnoreListManager constructor( proxy: SignalProxy ) : SyncableObject(proxy, "IgnoreListManager"), IIgnoreListManager { override fun toVariantMap(): QVariantMap = mapOf( - "IgnoreList" to QVariant_(initIgnoreList(), Type.QVariantMap) + "IgnoreList" to QVariant.of(initIgnoreList(), Type.QVariantMap) ) override fun fromVariantMap(properties: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt index 4b9718b1b983ed01e53e94ba6811fa6f62448a9d..d0ad84789721b88c56931717dd4f270a045e3c44 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcChannel.kt @@ -23,8 +23,8 @@ class IrcChannel( } override fun toVariantMap(): QVariantMap = mapOf( - "ChanModes" to QVariant_(initChanModes(), Type.QVariantMap), - "UserModes" to QVariant_(initUserModes(), Type.QVariantMap) + "ChanModes" to QVariant.of(initChanModes(), Type.QVariantMap), + "UserModes" to QVariant.of(initUserModes(), Type.QVariantMap) ) + initProperties() override fun fromVariantMap(properties: QVariantMap) { @@ -34,33 +34,30 @@ class IrcChannel( } override fun initChanModes(): QVariantMap = mapOf( - "A" to QVariant_( - _A_channelModes.entries.map { (key, value) -> - key to QVariant_(value.toList(), Type.QStringList) - }, Type.QVariantMap + "A" to QVariant.of(_A_channelModes.entries.map { (key, value) -> + key to QVariant.of(value.toList(), Type.QStringList) + }, Type.QVariantMap ), - "B" to QVariant_( - _B_channelModes.entries.map { (key, value) -> - key to QVariant_(value, Type.QString) - }, Type.QVariantMap + "B" to QVariant.of(_B_channelModes.entries.map { (key, value) -> + key to QVariant.of(value, Type.QString) + }, Type.QVariantMap ), - "C" to QVariant_( - _C_channelModes.entries.map { (key, value) -> - key to QVariant_(value, Type.QString) - }, Type.QVariantMap + "C" to QVariant.of(_C_channelModes.entries.map { (key, value) -> + key to QVariant.of(value, Type.QString) + }, Type.QVariantMap ), - "D" to QVariant_(_D_channelModes.joinToString(), Type.QString) + "D" to QVariant.of(_D_channelModes.joinToString(), Type.QString) ) override fun initUserModes(): QVariantMap = _userModes.entries.map { (key, value) -> - key.nick() to QVariant_(value, Type.QString) + key.nick() to QVariant.of(value, Type.QString) }.toMap() override fun initProperties(): QVariantMap = mapOf( - "name" to QVariant_(name(), Type.QString), - "topic" to QVariant_(topic(), Type.QString), - "password" to QVariant_(password(), Type.QString), - "encrypted" to QVariant_(encrypted(), Type.Bool) + "name" to QVariant.of(name(), Type.QString), + "topic" to QVariant.of(topic(), Type.QString), + "password" to QVariant.of(password(), Type.QString), + "encrypted" to QVariant.of(encrypted(), Type.Bool) ) override fun initSetChanModes(chanModes: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcUser.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcUser.kt index de37e29f9066557b8dcc238acc75f586ab14ded2..ebda98119e7e4b0aff25a92023b6f9ee05cd83b8 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcUser.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/IrcUser.kt @@ -1,7 +1,7 @@ package de.kuschku.libquassel.quassel.syncables +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.valueOr import de.kuschku.libquassel.quassel.syncables.interfaces.IIrcUser @@ -28,24 +28,24 @@ class IrcUser( } override fun initProperties(): QVariantMap = mapOf( - "user" to QVariant_(user(), Type.QString), - "host" to QVariant_(host(), Type.QString), - "nick" to QVariant_(nick(), Type.QString), - "realName" to QVariant_(realName(), Type.QString), - "account" to QVariant_(account(), Type.QString), - "away" to QVariant_(isAway(), Type.Bool), - "awayMessage" to QVariant_(awayMessage(), Type.QString), - "idleTime" to QVariant_(idleTime(), Type.QDateTime), - "loginTime" to QVariant_(loginTime(), Type.QDateTime), - "server" to QVariant_(server(), Type.QString), - "ircOperator" to QVariant_(ircOperator(), Type.QString), - "lastAwayMessage" to QVariant_(lastAwayMessage(), Type.Int), - "whoisServiceReply" to QVariant_(whoisServiceReply(), Type.QString), - "suserHost" to QVariant_(suserHost(), Type.QString), - "encrypted" to QVariant_(encrypted(), Type.Bool), - - "channels" to QVariant_(channels(), Type.QStringList), - "userModes" to QVariant_(userModes(), Type.QString) + "user" to QVariant.of(user(), Type.QString), + "host" to QVariant.of(host(), Type.QString), + "nick" to QVariant.of(nick(), Type.QString), + "realName" to QVariant.of(realName(), Type.QString), + "account" to QVariant.of(account(), Type.QString), + "away" to QVariant.of(isAway(), Type.Bool), + "awayMessage" to QVariant.of(awayMessage(), Type.QString), + "idleTime" to QVariant.of(idleTime(), Type.QDateTime), + "loginTime" to QVariant.of(loginTime(), Type.QDateTime), + "server" to QVariant.of(server(), Type.QString), + "ircOperator" to QVariant.of(ircOperator(), Type.QString), + "lastAwayMessage" to QVariant.of(lastAwayMessage(), Type.Int), + "whoisServiceReply" to QVariant.of(whoisServiceReply(), Type.QString), + "suserHost" to QVariant.of(suserHost(), Type.QString), + "encrypted" to QVariant.of(encrypted(), Type.Bool), + + "channels" to QVariant.of(channels(), Type.QStringList), + "userModes" to QVariant.of(userModes(), Type.QString) ) override fun initSetProperties(properties: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt index 5bb660f6a79a175b6b52694692b5033a5badef9b..5f6ac0b5b0c09f060758094cee13138d64e5ed06 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/Network.kt @@ -33,11 +33,11 @@ class Network constructor( } override fun toVariantMap(): QVariantMap = mapOf( - "Caps" to QVariant_(initCaps(), Type.QVariantMap), - "CapsEnabled" to QVariant_(initCapsEnabled(), Type.QVariantList), - "IrcUsersAndChannels" to QVariant_(initIrcUsersAndChannels(), Type.QVariantMap), - "ServerList" to QVariant_(initServerList(), Type.QVariantList), - "Supports" to QVariant_(initSupports(), Type.QVariantMap) + "Caps" to QVariant.of(initCaps(), Type.QVariantMap), + "CapsEnabled" to QVariant.of(initCapsEnabled(), Type.QVariantList), + "IrcUsersAndChannels" to QVariant.of(initIrcUsersAndChannels(), Type.QVariantMap), + "ServerList" to QVariant.of(initServerList(), Type.QVariantList), + "Supports" to QVariant.of(initSupports(), Type.QVariantMap) ) + initProperties() fun isMyNick(nick: String) = myNick().equals(nick, true) @@ -174,7 +174,7 @@ class Network constructor( setCodecForDecoding(Charset.forName(info.codecForDecoding)) // FIXME compare components if (info.serverList.isNotEmpty()) - setServerList(info.serverList.map { QVariant_(it, QType.Network_Server) }) + setServerList(info.serverList.map { QVariant.of(it, QType.Network_Server) }) if (info.useRandomServer != useRandomServer()) setUseRandomServer(info.useRandomServer) if (info.perform != perform()) @@ -682,73 +682,68 @@ class Network constructor( } override fun initSupports(): QVariantMap = _supports.entries.map { (key, value) -> - key to QVariant_(value, Type.QString) + key to QVariant.of(value, Type.QString) }.toMap() override fun initCaps(): QVariantMap = _caps.entries.map { (key, value) -> - key to QVariant_(value, Type.QString) + key to QVariant.of(value, Type.QString) }.toMap() override fun initCapsEnabled(): QVariantList = _capsEnabled.map { - QVariant_(it, Type.QString) + QVariant.of(it, Type.QString) }.toList() override fun initServerList(): QVariantList = _serverList.map { - QVariant_(it, QType.Network_Server) + QVariant.of(it, QType.Network_Server) }.toList() override fun initIrcUsersAndChannels(): QVariantMap { return mapOf( - "Users" to QVariant_( - _ircUsers.values.map { it.toVariantMap() }.transpose().map { - QVariant_(it, Type.QVariantList) - }, Type.QVariantMap + "Users" to QVariant.of(_ircUsers.values.map { it.toVariantMap() }.transpose().map { + QVariant.of(it, Type.QVariantList) + }, Type.QVariantMap ), - "Channels" to QVariant_( - _ircChannels.values.map { it.toVariantMap() }.transpose().map { - QVariant_(it, Type.QVariantList) - }, Type.QVariantMap + "Channels" to QVariant.of(_ircChannels.values.map { it.toVariantMap() }.transpose().map { + QVariant.of(it, Type.QVariantList) + }, Type.QVariantMap ) ) } override fun initProperties(): QVariantMap = mapOf( - "networkName" to QVariant_(networkName(), Type.QString), - "currentServer" to QVariant_(currentServer(), Type.QString), - "myNick" to QVariant_(myNick(), Type.QString), - "latency" to QVariant_(latency(), Type.Int), - "codecForServer" to QVariant_( - codecForServer().serializeString(StringSerializer.UTF8), - Type.QByteArray + "networkName" to QVariant.of(networkName(), Type.QString), + "currentServer" to QVariant.of(currentServer(), Type.QString), + "myNick" to QVariant.of(myNick(), Type.QString), + "latency" to QVariant.of(latency(), Type.Int), + "codecForServer" to QVariant.of(codecForServer().serializeString(StringSerializer.UTF8), + Type.QByteArray ), - "codecForEncoding" to QVariant_( - codecForEncoding().serializeString(StringSerializer.UTF8), - Type.QByteArray + "codecForEncoding" to QVariant.of(codecForEncoding().serializeString(StringSerializer.UTF8), + Type.QByteArray ), - "codecForDecoding" to QVariant_( - codecForDecoding().serializeString(StringSerializer.UTF8), - Type.QByteArray + "codecForDecoding" to QVariant.of(codecForDecoding().serializeString(StringSerializer.UTF8), + Type.QByteArray ), - "identityId" to QVariant_(identity(), QType.IdentityId), - "isConnected" to QVariant_(isConnected(), Type.Bool), - "connectionState" to QVariant_(connectionState(), Type.Int), - "useRandomServer" to QVariant_(useRandomServer(), Type.Bool), - "perform" to QVariant_(perform(), Type.QStringList), - "useAutoIdentify" to QVariant_(useAutoIdentify(), Type.Bool), - "autoIdentifyService" to QVariant_(autoIdentifyService(), Type.QString), - "autoIdentifyPassword" to QVariant_(autoIdentifyPassword(), Type.QString), - "useSasl" to QVariant_(useSasl(), Type.Bool), - "saslAccount" to QVariant_(saslAccount(), Type.QString), - "saslPassword" to QVariant_(saslPassword(), Type.QString), - "useAutoReconnect" to QVariant_(useAutoReconnect(), Type.Bool), - "autoReconnectInterval" to QVariant_(autoReconnectInterval(), Type.UInt), - "autoReconnectRetries" to QVariant_(autoReconnectRetries(), Type.UShort), - "unlimitedReconnectRetries" to QVariant_(unlimitedReconnectRetries(), Type.Bool), - "rejoinChannels" to QVariant_(rejoinChannels(), Type.Bool), - "useCustomMessageRate" to QVariant_(useCustomMessageRate(), Type.Bool), - "msgRateBurstSize" to QVariant_(messageRateBurstSize(), Type.UInt), - "msgRateMessageDelay" to QVariant_(messageRateDelay(), Type.UInt), - "unlimitedMessageRate" to QVariant_(unlimitedMessageRate(), Type.Bool) + "identityId" to QVariant.of(identity(), QType.IdentityId), + "isConnected" to QVariant.of(isConnected(), Type.Bool), + "connectionState" to QVariant.of(connectionState(), Type.Int), + "useRandomServer" to QVariant.of(useRandomServer(), Type.Bool), + "perform" to QVariant.of(perform(), Type.QStringList), + "useAutoIdentify" to QVariant.of(useAutoIdentify(), Type.Bool), + "autoIdentifyService" to QVariant.of(autoIdentifyService(), Type.QString), + "autoIdentifyPassword" to QVariant.of(autoIdentifyPassword(), Type.QString), + "useSasl" to QVariant.of(useSasl(), Type.Bool), + "saslAccount" to QVariant.of(saslAccount(), Type.QString), + "saslPassword" to QVariant.of(saslPassword(), Type.QString), + "useAutoReconnect" to QVariant.of(useAutoReconnect(), Type.Bool), + "autoReconnectInterval" to QVariant.of(autoReconnectInterval(), Type.UInt), + "autoReconnectRetries" to QVariant.of(autoReconnectRetries(), Type.UShort), + "unlimitedReconnectRetries" to QVariant.of(unlimitedReconnectRetries(), Type.Bool), + "rejoinChannels" to QVariant.of(rejoinChannels(), Type.Bool), + "useCustomMessageRate" to QVariant.of(useCustomMessageRate(), Type.Bool), + "msgRateBurstSize" to QVariant.of(messageRateBurstSize(), Type.UInt), + "msgRateMessageDelay" to QVariant.of(messageRateDelay(), Type.UInt), + "unlimitedMessageRate" to QVariant.of(unlimitedMessageRate(), Type.Bool) ) override fun initSetSupports(supports: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/NetworkConfig.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/NetworkConfig.kt index eda892ee557dab142d55f75b9b4dde31a2d97a0b..bccb74c55aa8b4f49ed547c7458f9d653ebbcd65 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/NetworkConfig.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/NetworkConfig.kt @@ -1,7 +1,7 @@ package de.kuschku.libquassel.quassel.syncables +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap -import de.kuschku.libquassel.protocol.QVariant_ import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.valueOr import de.kuschku.libquassel.quassel.syncables.interfaces.INetworkConfig @@ -21,14 +21,14 @@ class NetworkConfig constructor( } override fun initProperties(): QVariantMap = mapOf( - "pingTimeoutEnabled" to QVariant_(pingTimeoutEnabled(), Type.Bool), - "pingInterval" to QVariant_(pingInterval(), Type.Int), - "maxPingCount" to QVariant_(maxPingCount(), Type.Int), - "autoWhoEnabled" to QVariant_(autoWhoEnabled(), Type.Bool), - "autoWhoInterval" to QVariant_(autoWhoInterval(), Type.Int), - "autoWhoNickLimit" to QVariant_(autoWhoNickLimit(), Type.Int), - "autoWhoDelay" to QVariant_(autoWhoDelay(), Type.Int), - "standardCtcp" to QVariant_(standardCtcp(), Type.Bool) + "pingTimeoutEnabled" to QVariant.of(pingTimeoutEnabled(), Type.Bool), + "pingInterval" to QVariant.of(pingInterval(), Type.Int), + "maxPingCount" to QVariant.of(maxPingCount(), Type.Int), + "autoWhoEnabled" to QVariant.of(autoWhoEnabled(), Type.Bool), + "autoWhoInterval" to QVariant.of(autoWhoInterval(), Type.Int), + "autoWhoNickLimit" to QVariant.of(autoWhoNickLimit(), Type.Int), + "autoWhoDelay" to QVariant.of(autoWhoDelay(), Type.Int), + "standardCtcp" to QVariant.of(standardCtcp(), Type.Bool) ) override fun initSetProperties(properties: QVariantMap) { diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt index e21882d7f1ee5a8e9ed618bfc8252e7f722f2c64..df3410e34457cc6db1ca899975e958de498136fb 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/INetwork.kt @@ -298,18 +298,18 @@ interface INetwork : ISyncableObject { val proxyPass: String = "" ) { fun toVariantMap(): QVariantMap = mapOf( - "Host" to QVariant_(host, Type.QString), - "Port" to QVariant_(port, Type.UInt), - "Password" to QVariant_(password, Type.QString), - "UseSSL" to QVariant_(useSsl, Type.Bool), - "sslVerify" to QVariant_(sslVerify, Type.Bool), - "sslVersion" to QVariant_(sslVersion, Type.Int), - "UseProxy" to QVariant_(useProxy, Type.Bool), - "ProxyType" to QVariant_(proxyType, Type.Bool), - "ProxyHost" to QVariant_(proxyHost, Type.QString), - "ProxyPort" to QVariant_(proxyPort, Type.UInt), - "ProxyUser" to QVariant_(proxyUser, Type.QString), - "ProxyPass" to QVariant_(proxyPass, Type.QString) + "Host" to QVariant.of(host, Type.QString), + "Port" to QVariant.of(port, Type.UInt), + "Password" to QVariant.of(password, Type.QString), + "UseSSL" to QVariant.of(useSsl, Type.Bool), + "sslVerify" to QVariant.of(sslVerify, Type.Bool), + "sslVersion" to QVariant.of(sslVersion, Type.Int), + "UseProxy" to QVariant.of(useProxy, Type.Bool), + "ProxyType" to QVariant.of(proxyType, Type.Bool), + "ProxyHost" to QVariant.of(proxyHost, Type.QString), + "ProxyPort" to QVariant.of(proxyPort, Type.UInt), + "ProxyUser" to QVariant.of(proxyUser, Type.QString), + "ProxyPass" to QVariant.of(proxyPass, Type.QString) ) companion object { diff --git a/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt b/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt index 90c2f34035c2a8e325e5894e7cd7a3b1c54db0ba..9a0de43cf0d3451e69c3c816367db3e18f7dfdfd 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/CoreConnection.kt @@ -180,7 +180,7 @@ class CoreConnection( } dataBuffer.flip() - handlerService.serialize { + handlerService.deserialize { when (state.value) { ConnectionState.CLOSED -> // Connection closed, do nothing @@ -195,6 +195,7 @@ class CoreConnection( } } catch (e: Throwable) { log(WARN, TAG, "Error encountered in connection", e) + log(WARN, TAG, "Last sent message: ${MessageRunnable.lastSent.get()}") close() } } diff --git a/lib/src/main/java/de/kuschku/libquassel/session/MessageRunnable.kt b/lib/src/main/java/de/kuschku/libquassel/session/MessageRunnable.kt index 7f8cf765a1ce03fd6cfd137f7a2cef4818185639..5ac489f341cb4077af93c68043b865cb541919db 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/MessageRunnable.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/MessageRunnable.kt @@ -8,6 +8,7 @@ import de.kuschku.libquassel.util.helpers.write import de.kuschku.libquassel.util.nio.ChainedByteBuffer import de.kuschku.libquassel.util.nio.WrappedChannel import java.nio.ByteBuffer +import java.util.concurrent.atomic.AtomicReference class MessageRunnable<T>( private val data: T, @@ -25,8 +26,13 @@ class MessageRunnable<T>( channel?.write(sizeBuffer) channel?.write(chainedBuffer) channel?.flush() + lastSent.set(data) } catch (e: Throwable) { log(WARN, "MessageDispatching", e) } } + + companion object { + val lastSent = AtomicReference<Any>() + } } diff --git a/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt b/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt index 5bb8962dfbd1dd0e047eeedf115d68b9607a2777..5cee6a28efcaca47eb8b803e4dd2459483c57a9b 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/ObjectStorage.kt @@ -1,7 +1,7 @@ package de.kuschku.libquassel.session import de.kuschku.libquassel.protocol.QType -import de.kuschku.libquassel.protocol.QVariant_ +import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.message.SignalProxyMessage import de.kuschku.libquassel.quassel.exceptions.ObjectNotFoundException @@ -47,8 +47,8 @@ class ObjectStorage(private val proxy: SignalProxy) { SignalProxyMessage.RpcCall( "__objectRenamed__", listOf( - QVariant_(obj.className, Type.QString), QVariant_(new, Type.QString), - QVariant_(old, Type.QString) + QVariant.of(obj.className, Type.QString), QVariant.of(new, Type.QString), + QVariant.of(old, Type.QString) ) ) ) diff --git a/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt b/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt index b04a2ae3a4b696ef8ab2392fd914c2c4946e0161..292dc67be08a23505a79f7a42b7faadaa78274b3 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/ProtocolHandler.kt @@ -1,20 +1,22 @@ package de.kuschku.libquassel.session -import de.kuschku.libquassel.protocol.QVariant_ +import de.kuschku.libquassel.protocol.QVariantList import de.kuschku.libquassel.protocol.message.HandshakeMessage import de.kuschku.libquassel.protocol.message.SignalProxyMessage +import de.kuschku.libquassel.quassel.exceptions.MessageHandlingException import de.kuschku.libquassel.quassel.exceptions.ObjectNotFoundException import de.kuschku.libquassel.quassel.syncables.RpcHandler import de.kuschku.libquassel.quassel.syncables.interfaces.ISyncableObject import de.kuschku.libquassel.quassel.syncables.interfaces.invokers.Invokers import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log import de.kuschku.libquassel.util.compatibility.LoggingHandler.LogLevel.DEBUG -import de.kuschku.libquassel.util.compatibility.LoggingHandler.LogLevel.WARN import org.threeten.bp.Instant import java.io.Closeable @Suppress("LeakingThis") -abstract class ProtocolHandler : SignalProxy, AuthHandler, Closeable { +abstract class ProtocolHandler( + protected val exceptionHandler: (Throwable) -> Unit +) : SignalProxy, AuthHandler, Closeable { protected var closed = false private val objectStorage: ObjectStorage = ObjectStorage(this) @@ -42,7 +44,7 @@ abstract class ProtocolHandler : SignalProxy, AuthHandler, Closeable { log(DEBUG, "ProtocolHandler", "No receiver registered for $f") } } catch (e: Throwable) { - log(WARN, "ProtocolHandler", "Error Handling SignalProxyMessage", e) + exceptionHandler.invoke(MessageHandlingException.SignalProxy(f, e)) } return true } @@ -55,13 +57,12 @@ abstract class ProtocolHandler : SignalProxy, AuthHandler, Closeable { log(DEBUG, "ProtocolHandler", "No receiver registered for $f") } } catch (e: Throwable) { - log(WARN, "ProtocolHandler", "Error Handling HandshakeMessage", e) + exceptionHandler.invoke(MessageHandlingException.Handshake(f, e)) } return true } override fun handle(f: SignalProxyMessage.InitData): Boolean { - log(DEBUG, "ProtocolHandler", "< $f") val obj: ISyncableObject = objectStorage.get(f.className, f.objectName) ?: throw ObjectNotFoundException(f.className, f.objectName) @@ -83,7 +84,7 @@ abstract class ProtocolHandler : SignalProxy, AuthHandler, Closeable { try { this.handle(it) } catch (e: Throwable) { - log(WARN, "ProtocolHandler", e) + exceptionHandler.invoke(e) } } } @@ -92,36 +93,32 @@ abstract class ProtocolHandler : SignalProxy, AuthHandler, Closeable { open fun onInitStatusChanged(progress: Int, total: Int) {} override fun handle(f: SignalProxyMessage.SyncMessage): Boolean { - log(DEBUG, "ProtocolHandler", "< $f") - val obj = objectStorage.get(f.className, f.objectName) ?: if (isInitializing) { syncQueue.add(f) return true - } else { - throw ObjectNotFoundException(f.className, f.objectName) - } + } else null - val initQueue = toInit[obj] - if (initQueue != null) { - initQueue.add(f) - return true - } + obj?.let { + val initQueue = toInit[it] + if (initQueue != null) { + initQueue.add(f) + return true + } - val invoker = Invokers.get(f.className) - ?: throw IllegalArgumentException("Invalid classname: ${f.className}") - currentCallClass = f.className - currentCallInstance = f.objectName - currentCallSlot = f.slotName - invoker.invoke(obj, f.slotName, f.params) - currentCallClass = "" - currentCallInstance = "" - currentCallSlot = "" + val invoker = Invokers.get(f.className) + ?: throw IllegalArgumentException("Invalid classname: ${f.className}") + currentCallClass = f.className + currentCallInstance = f.objectName + currentCallSlot = f.slotName + invoker.invoke(it, f.slotName, f.params) + currentCallClass = "" + currentCallInstance = "" + currentCallSlot = "" + } return true } override fun handle(f: SignalProxyMessage.RpcCall): Boolean { - log(DEBUG, "ProtocolHandler", "< $f") - currentCallSlot = f.slotName Invokers.RPC?.invoke(rpcHandler, f.slotName, f.params) currentCallSlot = "" @@ -137,13 +134,13 @@ abstract class ProtocolHandler : SignalProxy, AuthHandler, Closeable { override fun shouldSync(type: String, instance: String, slot: String): Boolean = type != currentCallClass || slot != currentCallSlot || instance != currentCallInstance - override fun callSync(type: String, instance: String, slot: String, params: List<QVariant_>) { + override fun callSync(type: String, instance: String, slot: String, params: QVariantList) { dispatch(SignalProxyMessage.SyncMessage(type, instance, slot, params)) } override fun shouldRpc(slot: String): Boolean = slot != currentCallSlot - override fun callRpc(slot: String, params: List<QVariant_>) { + override fun callRpc(slot: String, params: QVariantList) { dispatch(SignalProxyMessage.RpcCall(slot, params)) } diff --git a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt index 04f10cb538277b7e00200d38a28026bfbd1c18cb..07a3af97ad3f3485beb7f55156468d0d2994a4ab 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/Session.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/Session.kt @@ -7,9 +7,6 @@ import de.kuschku.libquassel.quassel.ExtendedFeature import de.kuschku.libquassel.quassel.QuasselFeatures import de.kuschku.libquassel.quassel.syncables.* import de.kuschku.libquassel.util.compatibility.HandlerService -import de.kuschku.libquassel.util.compatibility.LoggingHandler.Companion.log -import de.kuschku.libquassel.util.compatibility.LoggingHandler.LogLevel.DEBUG -import de.kuschku.libquassel.util.compatibility.LoggingHandler.LogLevel.INFO import io.reactivex.subjects.BehaviorSubject import org.threeten.bp.Instant import javax.net.ssl.X509TrustManager @@ -21,8 +18,9 @@ class Session( private val handlerService: HandlerService, backlogStorage: BacklogStorage, private var userData: Pair<String, String>, - val disconnectFromCore: () -> Unit -) : ProtocolHandler(), ISession { + val disconnectFromCore: () -> Unit, + exceptionHandler: (Throwable) -> Unit +) : ProtocolHandler(exceptionHandler), ISession { override val features = Features(clientData.clientFeatures, QuasselFeatures.empty()) override val sslSession @@ -152,8 +150,6 @@ class Session( override fun onInitDone() { coreConnection.setState(ConnectionState.CONNECTED) - log(INFO, "Session", "Initialization finished") - dispatch(SignalProxyMessage.HeartBeat(Instant.now())) } @@ -167,14 +163,11 @@ class Session( override fun dispatch(message: SignalProxyMessage) { if (closed) return - log(DEBUG, "Session", "> $message") coreConnection.dispatch(message) } override fun dispatch(message: HandshakeMessage) { if (closed) return - - log(DEBUG, "Session", "> $message") coreConnection.dispatch(message) } diff --git a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt index b252dc121d5f1ac1fcaccef5dc11b00865f15c8a..02e993639095ef12b26cdcc8d3b713df5f8c2a0c 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/SessionManager.kt @@ -20,7 +20,8 @@ class SessionManager( offlineSession: ISession, val backlogStorage: BacklogStorage, val handlerService: HandlerService, - private val disconnectFromCore: () -> Unit + private val disconnectFromCore: () -> Unit, + private val exceptionHandler: (Throwable) -> Unit ) : ISession { override val features: Features get() = session.or(lastSession).features @@ -125,7 +126,8 @@ class SessionManager( handlerService, backlogStorage, userData, - disconnectFromCore + disconnectFromCore, + exceptionHandler ) ) } diff --git a/lib/src/main/java/de/kuschku/libquassel/session/SignalProxy.kt b/lib/src/main/java/de/kuschku/libquassel/session/SignalProxy.kt index 474d326d96d7a68ad58dd4f325e922f3af833aa7..b37a93c522af4220ea3291d9ed2ed758d6dac8cd 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/SignalProxy.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/SignalProxy.kt @@ -2,7 +2,7 @@ package de.kuschku.libquassel.session import de.kuschku.libquassel.protocol.IdentityId import de.kuschku.libquassel.protocol.NetworkId -import de.kuschku.libquassel.protocol.QVariant_ +import de.kuschku.libquassel.protocol.QVariantList import de.kuschku.libquassel.protocol.message.HandshakeMessage import de.kuschku.libquassel.protocol.message.SignalProxyMessage import de.kuschku.libquassel.quassel.syncables.Identity @@ -29,8 +29,8 @@ interface SignalProxy { fun dispatch(message: SignalProxyMessage) fun dispatch(message: HandshakeMessage) - fun callSync(type: String, instance: String, slot: String, params: List<QVariant_>) - fun callRpc(slot: String, params: List<QVariant_>) + fun callSync(type: String, instance: String, slot: String, params: QVariantList) + fun callRpc(slot: String, params: QVariantList) fun shouldSync(type: String, instance: String, slot: String): Boolean fun shouldRpc(slot: String): Boolean @@ -49,9 +49,9 @@ interface SignalProxy { override fun dispatch(message: SignalProxyMessage) = Unit override fun dispatch(message: HandshakeMessage) = Unit override fun callSync(type: String, instance: String, slot: String, - params: List<QVariant_>) = Unit + params: QVariantList) = Unit - override fun callRpc(slot: String, params: List<QVariant_>) = Unit + override fun callRpc(slot: String, params: QVariantList) = Unit override fun shouldSync(type: String, instance: String, slot: String) = false override fun shouldRpc(slot: String) = false override fun network(id: NetworkId): Network? = null diff --git a/lib/src/main/java/de/kuschku/libquassel/util/compatibility/LoggingHandler.kt b/lib/src/main/java/de/kuschku/libquassel/util/compatibility/LoggingHandler.kt index efc5ab6e3f1986cafc136477c6e5df4378ab7f5f..bcd7977da3be54bc5c0884956b3e428fdc6f68e6 100644 --- a/lib/src/main/java/de/kuschku/libquassel/util/compatibility/LoggingHandler.kt +++ b/lib/src/main/java/de/kuschku/libquassel/util/compatibility/LoggingHandler.kt @@ -33,14 +33,17 @@ abstract class LoggingHandler { companion object { val loggingHandlers: MutableSet<LoggingHandler> = mutableSetOf(JavaLoggingHandler) - inline fun log(logLevel: LoggingHandler.LogLevel, tag: String, message: String? = null, - throwable: Throwable? = null) { + inline fun log(logLevel: LoggingHandler.LogLevel, tag: String, message: String?, + throwable: Throwable?) { LoggingHandler.loggingHandlers .filter { it.isLoggable(logLevel, tag) } .forEach { it.log(logLevel, tag, message, throwable) } } - inline fun log(logLevel: LoggingHandler.LogLevel, tag: String, throwable: Throwable? = null) = + inline fun log(logLevel: LoggingHandler.LogLevel, tag: String, throwable: Throwable) = log(logLevel, tag, null, throwable) + + inline fun log(logLevel: LoggingHandler.LogLevel, tag: String, message: String) = + log(logLevel, tag, message, null) } } diff --git a/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt b/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt index bf959c7852d03930561fa2a3c1ecc94ec07ef2cc..f2b187560d3262b62963f5131341b843fc507d82 100644 --- a/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/ConnectionUnitTest.kt @@ -1,20 +1,7 @@ package de.kuschku.libquassel -import de.kuschku.libquassel.protocol.* -import de.kuschku.libquassel.quassel.LegacyFeature -import de.kuschku.libquassel.quassel.ProtocolFeature -import de.kuschku.libquassel.session.BacklogStorage -import de.kuschku.libquassel.session.Session -import de.kuschku.libquassel.session.SocketAddress -import de.kuschku.libquassel.util.compatibility.reference.JavaHandlerService -import org.junit.BeforeClass -import org.junit.Test -import org.threeten.bp.Instant -import java.security.cert.X509Certificate -import java.util.logging.LogManager -import javax.net.ssl.X509TrustManager - class ConnectionUnitTest { +/* companion object { @JvmStatic @BeforeClass @@ -55,4 +42,5 @@ class ConnectionUnitTest { ) {} session.join() } -} +*/ +} \ No newline at end of file diff --git a/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt b/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt index d097fa660e970959d76c03a1f4a1172beaa74830..71ab8fe9251bdc87983f95ba6134718966e64d94 100644 --- a/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt @@ -1,8 +1,10 @@ package de.kuschku.libquassel -import de.kuschku.libquassel.protocol.Quassel_Feature -import de.kuschku.libquassel.protocol.Quassel_Features +import de.kuschku.libquassel.protocol.QType +import de.kuschku.libquassel.protocol.QVariant +import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.primitive.serializer.* +import de.kuschku.libquassel.quassel.QuasselFeatures import de.kuschku.libquassel.util.nio.ChainedByteBuffer import org.junit.Assert.assertArrayEquals import org.junit.Assert.assertEquals @@ -97,9 +99,89 @@ class SerializerUnitTest { assertEquals(0L.inv(), roundTrip(LongSerializer, 0L.inv())) } + @Test + fun stringSerializer() { + assertEquals("Test", roundTrip(StringSerializer.UTF16, "Test")) + assertEquals("Test", roundTrip(StringSerializer.UTF8, "Test")) + assertEquals("Test", roundTrip(StringSerializer.C, "Test")) + } + + @Test + fun variantListSerializer() { + val value = listOf( + QVariant.of(1, Type.Int), + QVariant.of(ByteBuffer.wrap(byteArrayOf( + 66, + 97, + 99, + 107, + 108, + 111, + 103, + 77, + 97, + 110, + 97, + 103, + 101, + 114, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + )), Type.QByteArray), + QVariant.of(ByteBuffer.wrap(byteArrayOf( + 114, + 101, + 113, + 117, + 101, + 115, + 116, + 66, + 97, + 99, + 107, + 108, + 111, + 103, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + )), Type.QByteArray), + QVariant.of(1873, QType.BufferId), + QVariant.of(-1, QType.MsgId), + QVariant.of(-1, QType.MsgId), + QVariant.of(20, Type.Int), + QVariant.of(0, Type.Int) + ) + assert(value == roundTrip(VariantListSerializer, value)) + } + companion object { fun <T> roundTrip(serializer: Serializer<T>, value: T, - features: Quassel_Features = Quassel_Feature.NONE): T { + features: QuasselFeatures = QuasselFeatures.all()): T { val chainedBuffer = ChainedByteBuffer( direct = false ) diff --git a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt index ed48026a2890c16057c28c961c9ac4e17712fe58..487462636305f69e50e5f854bee9d4440aa2197c 100644 --- a/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt +++ b/malheur/src/main/java/de/kuschku/malheur/CrashHandler.kt @@ -58,7 +58,7 @@ object CrashHandler { val crashFile = File(crashDirectory, "${System.currentTimeMillis()}.json") crashFile.createNewFile() crashFile.writeText(json) - Log.e("Malheur", "Crash report saved: $crashFile") + Log.e("Malheur", "Crash report saved: $crashFile", throwable) handler.post { Toast.makeText(application, "Crash report saved: ${crashFile.name}",