diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1dc2ea01cfd9ec00c44d64bee6b54804ea7dd6f3..bb47d3bf5d40a6da4dd4b95cc14fbf1b34f5cdd0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -86,7 +86,9 @@ dependencies { implementation(appArch("persistence.room", "runtime")) kapt(appArch("persistence.room", "compiler")) - implementation(appArch("paging", "runtime", version = "1.0.0-alpha1")) + implementation(appArch("paging", "runtime", version = "1.0.0-alpha1")) { + exclude(group = "junit", module = "junit") + } implementation("org.threeten:threetenbp:1.3.6") diff --git a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt index fd14d529fb850546da2eeced64d0ddbf9b04ad84..3d6f407e232ba2a82e3ca452d16ff4216ae03608 100644 --- a/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt +++ b/lib/src/main/java/de/kuschku/libquassel/protocol/primitive/serializer/DateTimeSerializer.kt @@ -2,10 +2,7 @@ package de.kuschku.libquassel.protocol.primitive.serializer import de.kuschku.libquassel.protocol.Quassel_Features import de.kuschku.libquassel.util.nio.ChainedByteBuffer -import org.threeten.bp.Instant -import org.threeten.bp.LocalDateTime -import org.threeten.bp.OffsetDateTime -import org.threeten.bp.ZoneOffset +import org.threeten.bp.* import org.threeten.bp.temporal.ChronoField import org.threeten.bp.temporal.JulianFields import org.threeten.bp.temporal.Temporal @@ -37,6 +34,12 @@ object DateTimeSerializer : Serializer<Temporal> { ByteSerializer.serialize(buffer, TimeSpec.OffsetFromUTC.value, features) IntSerializer.serialize(buffer, data.offset.totalSeconds, features) } + is ZonedDateTime -> { + IntSerializer.serialize(buffer, data.getLong(JulianFields.JULIAN_DAY).toInt(), features) + IntSerializer.serialize(buffer, data.getLong(ChronoField.MILLI_OF_DAY).toInt(), features) + ByteSerializer.serialize(buffer, TimeSpec.OffsetFromUTC.value, features) + IntSerializer.serialize(buffer, data.offset.totalSeconds, features) + } is Instant -> { val time = data.atOffset(ZoneOffset.UTC) IntSerializer.serialize(buffer, time.getLong(JulianFields.JULIAN_DAY).toInt(), features) @@ -56,12 +59,18 @@ object DateTimeSerializer : Serializer<Temporal> { if (milliOfDay == -1L || julianDay == -1L) return Instant.EPOCH return when (timeSpec) { - TimeSpec.LocalTime -> + TimeSpec.LocalTime -> Instant.EPOCH.atZone(ZoneOffset.systemDefault()) .with(JulianFields.JULIAN_DAY, julianDay) .with(ChronoField.MILLI_OF_DAY, milliOfDay) .toInstant() - else -> + TimeSpec.OffsetFromUTC -> + Instant.EPOCH.atOffset( + ZoneOffset.ofTotalSeconds(IntSerializer.deserialize(buffer, features))) + .with(JulianFields.JULIAN_DAY, julianDay) + .with(ChronoField.MILLI_OF_DAY, milliOfDay) + .toInstant() + else -> Instant.EPOCH.atOffset(ZoneOffset.UTC) .with(JulianFields.JULIAN_DAY, julianDay) .with(ChronoField.MILLI_OF_DAY, milliOfDay) diff --git a/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt b/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt index 85f57bd667150a104abb492100a650ab39493619..829653e929b3be5fdabeaf51323e785e1ce3c3f5 100644 --- a/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt +++ b/lib/src/test/java/de/kuschku/libquassel/SerializerUnitTest.kt @@ -44,12 +44,13 @@ class SerializerUnitTest { @Test fun dateTimeSerializer() { assertEquals(Instant.EPOCH, roundTrip(DateTimeSerializer, Instant.EPOCH)) - assertEquals(Instant.now(), roundTrip(DateTimeSerializer, Instant.now())) + val now = Instant.now() + assertEquals(now, roundTrip(DateTimeSerializer, now)) val value1 = Instant.EPOCH.atOffset(ZoneOffset.ofTotalSeconds(1234)) - assertEquals(value1, roundTrip(DateTimeSerializer, value1)) + assertEquals(value1.toInstant(), roundTrip(DateTimeSerializer, value1)) val value2 = Instant.now().atOffset(ZoneOffset.ofTotalSeconds(1234)) - assertEquals(value2, roundTrip(DateTimeSerializer, value2)) + assertEquals(value2.toInstant(), roundTrip(DateTimeSerializer, value2)) val value3 = LocalDateTime.of(1970, 1, 1, 0, 0) .atZone(ZoneOffset.systemDefault()).toInstant()