Skip to content
Snippets Groups Projects
Verified Commit 3e3dd1a3 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Fix minor bugs

parent 10d6cd5a
No related branches found
No related tags found
No related merge requests found
Showing
with 156 additions and 147 deletions
......@@ -20,14 +20,7 @@ import de.justjanne.libquassel.protocol.session.MessageChannelReadThread
import de.justjanne.libquassel.protocol.session.Session
import de.justjanne.libquassel.protocol.util.log.trace
import de.justjanne.libquassel.protocol.variant.QVariantMap
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.runInterruptible
import kotlinx.coroutines.withContext
import org.slf4j.LoggerFactory
import sun.security.util.DisabledAlgorithmConstraints
import java.nio.ByteBuffer
class ClientHandshakeHandler(
......
......@@ -42,9 +42,17 @@ object QDateTimeSerializer : PrimitiveSerializer<Temporal> {
is LocalDateTime ->
serialize(data, TimeSpec.LocalUnknown, null)
is OffsetDateTime ->
if (data.offset === ZoneOffset.UTC) {
serialize(data.toLocalDateTime(), TimeSpec.UTC, null)
} else {
serialize(data.toLocalDateTime(), TimeSpec.OffsetFromUTC, data.offset)
}
is ZonedDateTime ->
if (data.offset === ZoneOffset.UTC) {
serialize(data.toLocalDateTime(), TimeSpec.UTC, null)
} else {
serialize(data.toLocalDateTime(), TimeSpec.OffsetFromUTC, data.offset)
}
is Instant ->
serialize(data.atOffset(ZoneOffset.UTC).toLocalDateTime(), TimeSpec.UTC, null)
else ->
......@@ -64,15 +72,9 @@ object QDateTimeSerializer : PrimitiveSerializer<Temporal> {
TimeSpec.LocalDST ->
localDateTime.atZone(ZoneId.systemDefault()).toOffsetDateTime()
TimeSpec.OffsetFromUTC ->
localDateTime
.atOffset(
ZoneOffset.ofTotalSeconds(
IntSerializer.deserialize(buffer, featureSet)
)
)
localDateTime.atOffset(ZoneOffset.ofTotalSeconds(IntSerializer.deserialize(buffer, featureSet)))
TimeSpec.UTC ->
localDateTime
.atOffset(ZoneOffset.UTC)
localDateTime.atOffset(ZoneOffset.UTC)
}
}
}
......@@ -16,6 +16,7 @@ import de.justjanne.libquassel.protocol.variant.QVariantList
import de.justjanne.libquassel.protocol.variant.into
import de.justjanne.libquassel.protocol.variant.qVariant
import org.threeten.bp.Instant
import org.threeten.bp.ZoneOffset
/**
* Serializer for [SignalProxyMessage.HeartBeatReply]
......@@ -29,6 +30,6 @@ object HeartBeatReplySerializer : SignalProxySerializer<SignalProxyMessage.Heart
)
override fun deserialize(data: QVariantList) = SignalProxyMessage.HeartBeatReply(
data.getOrNull(1).into(Instant.EPOCH)
data.getOrNull(1).into(Instant.EPOCH.atOffset(ZoneOffset.UTC)).toInstant()
)
}
......@@ -30,7 +30,7 @@ object InitDataSerializer : SignalProxySerializer<SignalProxyMessage.InitData> {
qVariant(type, QtType.Int),
qVariant(StringSerializerUtf8.serializeRaw(data.className), QtType.QByteArray),
qVariant(StringSerializerUtf8.serializeRaw(data.objectName), QtType.QByteArray),
) + data.initData.toVariantList()
) + data.initData.toVariantList(byteBuffer = true)
override fun deserialize(data: QVariantList) = SignalProxyMessage.InitData(
StringSerializerUtf8.deserializeRaw(data.getOrNull(1).into<ByteBuffer>()),
......
......@@ -28,7 +28,6 @@ import de.justjanne.libquassel.protocol.util.collections.pairs
import de.justjanne.libquassel.protocol.util.update
import de.justjanne.libquassel.protocol.variant.QVariantList
import de.justjanne.libquassel.protocol.variant.QVariantMap
import de.justjanne.libquassel.protocol.variant.QVariant_
import de.justjanne.libquassel.protocol.variant.into
import de.justjanne.libquassel.protocol.variant.qVariant
......
......@@ -74,12 +74,12 @@ open class IrcUser(
"account" to qVariant(account(), QtType.QString),
"away" to qVariant(isAway(), QtType.Bool),
"awayMessage" to qVariant(awayMessage(), QtType.QString),
"idleTime" to qVariant(idleTime(), QtType.QDateTime),
"loginTime" to qVariant(loginTime(), QtType.QDateTime),
"idleTime" to qVariant(idleTime().atOffset(ZoneOffset.UTC), QtType.QDateTime),
"loginTime" to qVariant(loginTime().atOffset(ZoneOffset.UTC), QtType.QDateTime),
"server" to qVariant(server(), QtType.QString),
"ircOperator" to qVariant(ircOperator(), QtType.QString),
"lastAwayMessage" to qVariant(lastAwayMessageTime().epochSecond.toInt(), QtType.Int),
"lastAwayMessageTime" to qVariant(lastAwayMessageTime(), QtType.QDateTime),
"lastAwayMessageTime" to qVariant(lastAwayMessageTime().atOffset(ZoneOffset.UTC), QtType.QDateTime),
"whoisServiceReply" to qVariant(whoisServiceReply(), QtType.QString),
"suserHost" to qVariant(suserHost(), QtType.QString),
"encrypted" to qVariant(isEncrypted(), QtType.Bool),
......
......@@ -18,8 +18,6 @@ import de.justjanne.libquassel.protocol.serializers.PrimitiveSerializer
import de.justjanne.libquassel.protocol.util.reflect.instanceof
import de.justjanne.libquassel.protocol.util.reflect.subtype
import java.nio.ByteBuffer
import org.threeten.bp.Instant
import org.threeten.bp.ZoneOffset
/**
* Simple alias for a generic QVariant type
......
......@@ -10,6 +10,7 @@
package de.justjanne.libquassel.protocol.variant
import de.justjanne.libquassel.protocol.models.types.QtType
import de.justjanne.libquassel.protocol.serializers.qt.StringSerializerUtf8
/**
* Simple alias for a generic QVariantMap type
......@@ -19,7 +20,11 @@ typealias QVariantMap = Map<String, QVariant_>
/**
* Transform a QVariantMap into a QVariantList of interleaved keys and values
*/
fun QVariantMap.toVariantList(): QVariantList =
fun QVariantMap.toVariantList(byteBuffer: Boolean = false): QVariantList =
flatMap { (key, value) ->
if (byteBuffer) {
listOf(qVariant(StringSerializerUtf8.serializeRaw(key), QtType.QByteArray), value)
} else {
listOf(qVariant(key, QtType.QString), value)
}
}
......@@ -26,7 +26,6 @@ import org.junit.jupiter.api.Assertions.assertTrue
import org.junit.jupiter.api.Nested
import org.junit.jupiter.api.Test
import kotlin.random.Random
import kotlin.test.assertFalse
class IrcChannelTest {
@Test
......
......@@ -15,6 +15,8 @@ import org.threeten.bp.LocalDate
import org.threeten.bp.LocalDateTime
import org.threeten.bp.LocalTime
import org.threeten.bp.OffsetDateTime
import org.threeten.bp.ZoneId
import org.threeten.bp.ZoneOffset
import org.threeten.bp.ZonedDateTime
import org.threeten.bp.temporal.Temporal
......@@ -25,24 +27,46 @@ class TemporalMatcher<T : Temporal>(
description?.appendText(expected.toString())
}
override fun matches(item: Any?): Boolean {
return when {
expected is ZonedDateTime && item is ZonedDateTime ->
expected == item
expected is ZonedDateTime && item is OffsetDateTime ->
expected.toOffsetDateTime() == item
expected is OffsetDateTime && item is OffsetDateTime ->
expected == item
expected is LocalDateTime && item is LocalDateTime ->
expected == item
expected is LocalTime && item is LocalTime ->
expected == item
expected is LocalDate && item is LocalDate ->
expected == item
expected is Instant && item is Instant ->
expected == item
else ->
false
private fun localDateTime(value: Any?): LocalDateTime? = when (value) {
is ZonedDateTime -> value.toLocalDateTime()
is OffsetDateTime -> value.toLocalDateTime()
is LocalDateTime -> value
is Instant -> value.atOffset(ZoneOffset.UTC).toLocalDateTime()
is LocalDate -> value.atTime(LocalTime.MIN)
is LocalTime -> value.atDate(LocalDate.MIN)
null -> null
else -> throw Exception("Unsupported date format: ${value::class.java.simpleName}")
}
private fun offset(value: Any?): ZoneOffset = when (value) {
is ZonedDateTime -> value.offset
is OffsetDateTime -> value.offset
is LocalDateTime -> value.atZone(ZoneId.systemDefault()).toOffsetDateTime().offset
is LocalDate -> value.atTime(LocalTime.MIN).atZone(ZoneId.systemDefault()).toOffsetDateTime().offset
is LocalTime -> value.atDate(LocalDate.MIN).atZone(ZoneId.systemDefault()).toOffsetDateTime().offset
else -> ZoneOffset.UTC
}
override fun describeMismatch(item: Any?, description: Description?) {
if (localDateTime(item) != localDateTime(expected)) {
description?.appendText("Expected local date time of ")
description?.appendValue(localDateTime(expected))
description?.appendText(" but got")
description?.appendValue(localDateTime(item))
description?.appendText(".")
}
if (offset(item) != offset(expected)) {
description?.appendText("Expected zone offset of ")
description?.appendValue(offset(expected))
description?.appendText(" but got ")
description?.appendValue(offset(item))
description?.appendText(".")
}
super.describeMismatch(item, description)
}
override fun matches(item: Any?): Boolean {
return localDateTime(expected) == localDateTime(item) &&
(offset(expected) == offset(item))
}
}
......@@ -14,11 +14,13 @@ import de.justjanne.libquassel.protocol.models.BufferInfo
import de.justjanne.libquassel.protocol.models.ids.IdentityId
import de.justjanne.libquassel.protocol.models.ids.NetworkId
import de.justjanne.libquassel.protocol.session.Session
import de.justjanne.libquassel.protocol.syncables.HeartBeatHandler
import de.justjanne.libquassel.protocol.syncables.ObjectRepository
import de.justjanne.libquassel.protocol.syncables.common.AliasManager
import de.justjanne.libquassel.protocol.syncables.common.BacklogManager
import de.justjanne.libquassel.protocol.syncables.common.BufferSyncer
import de.justjanne.libquassel.protocol.syncables.common.BufferViewManager
import de.justjanne.libquassel.protocol.syncables.common.CertManager
import de.justjanne.libquassel.protocol.syncables.common.CoreInfo
import de.justjanne.libquassel.protocol.syncables.common.DccConfig
import de.justjanne.libquassel.protocol.syncables.common.HighlightRuleManager
......@@ -27,21 +29,35 @@ import de.justjanne.libquassel.protocol.syncables.common.IgnoreListManager
import de.justjanne.libquassel.protocol.syncables.common.IrcListHelper
import de.justjanne.libquassel.protocol.syncables.common.Network
import de.justjanne.libquassel.protocol.syncables.common.NetworkConfig
import de.justjanne.libquassel.protocol.syncables.common.RpcHandler
import de.justjanne.libquassel.protocol.variant.QVariantMap
open class EmptySession : Session {
override val heartBeatHandler = HeartBeatHandler()
override val rpcHandler = RpcHandler(this)
final override val side = ProtocolSide.CLIENT
final override val objectRepository = ObjectRepository()
override val proxy = EmptySyncProxy()
override fun init(identities: List<QVariantMap>, bufferInfos: List<BufferInfo>, networkIds: List<NetworkId>) = Unit
override fun init(
identityInfo: List<QVariantMap>,
bufferInfos: List<BufferInfo>,
networkIds: List<NetworkId>
) = Unit
override fun network(id: NetworkId): Network? = null
override fun addNetwork(id: NetworkId) = Unit
override fun removeNetwork(id: NetworkId) = Unit
override fun networks() = emptySet<Network>()
override fun identity(id: IdentityId): Identity? = null
override fun addIdentity(properties: QVariantMap) = Unit
override fun removeIdentity(id: IdentityId) = Unit
override fun identities() = emptySet<Identity>()
override fun certManager(id: IdentityId) = null
override fun certManagers() = emptySet<CertManager>()
override fun rename(className: String, oldName: String, newName: String) = Unit
override val aliasManager = AliasManager(this)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment