From a89b6668ab4f0a0854dc4751b0a8d124320bb691 Mon Sep 17 00:00:00 2001 From: Janne Koschinski <janne@kuschku.de> Date: Tue, 15 May 2018 14:16:19 +0200 Subject: [PATCH] Includes missing files from previous commits --- .../libquassel/quassel/QuasselFeatures.kt | 2 +- .../libquassel/quassel/syncables/IrcUser.kt | 22 ++++++++++++++----- .../quassel/syncables/interfaces/IIrcUser.kt | 5 ++++- .../kuschku/libquassel/session/SignalProxy.kt | 6 +++++ 4 files changed, 27 insertions(+), 8 deletions(-) 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 3ce719b39..9a646b45c 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/QuasselFeatures.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/QuasselFeatures.kt @@ -36,7 +36,7 @@ class QuasselFeatures( fun toStringList() = enabledFeatures.map(ExtendedFeature::name) - fun hasFeature(feature: ExtendedFeature) = enabledFeatures.contains(feature) + infix fun hasFeature(feature: ExtendedFeature) = enabledFeatures.contains(feature) companion object { fun empty() = QuasselFeatures(emptySet(), emptySet()) 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 d3b5cc552..4ece8907d 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 @@ -23,6 +23,7 @@ import de.kuschku.libquassel.protocol.QVariant import de.kuschku.libquassel.protocol.QVariantMap import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.valueOr +import de.kuschku.libquassel.quassel.ExtendedFeature import de.kuschku.libquassel.quassel.syncables.interfaces.IIrcUser import de.kuschku.libquassel.session.SignalProxy import de.kuschku.libquassel.util.irc.HostmaskHelper @@ -58,6 +59,7 @@ class IrcUser( "server" to QVariant.of(server(), Type.QString), "ircOperator" to QVariant.of(ircOperator(), Type.QString), "lastAwayMessage" to QVariant.of(lastAwayMessage(), Type.Long), + "lastAwayMessageTime" to QVariant.of(lastAwayMessageTime(), Type.Long), "whoisServiceReply" to QVariant.of(whoisServiceReply(), Type.QString), "suserHost" to QVariant.of(suserHost(), Type.QString), "encrypted" to QVariant.of(encrypted(), Type.Bool), @@ -78,7 +80,9 @@ class IrcUser( setLoginTime(properties["loginTime"].valueOr(this::loginTime)) setServer(properties["server"].valueOr(this::server)) setIrcOperator(properties["ircOperator"].valueOr(this::ircOperator)) - setLastAwayMessage(properties["lastAwayMessage"].valueOr(this::lastAwayMessage)) + setLastAwayMessageTime(properties["lastAwayMessageTime"].valueOr { + Instant.ofEpochSecond(properties["lastAwayMessage"].valueOr(this::lastAwayMessage).toLong()) + }) setWhoisServiceReply(properties["whoisServiceReply"].valueOr(this::whoisServiceReply)) setSuserHost(properties["suserHost"].valueOr(this::suserHost)) setEncrypted(properties["encrypted"].valueOr(this::encrypted)) @@ -104,7 +108,8 @@ class IrcUser( fun loginTime() = _loginTime fun ircOperator() = _ircOperator - fun lastAwayMessage() = _lastAwayMessage + fun lastAwayMessage() = _lastAwayMessageTime.epochSecond.toInt() + fun lastAwayMessageTime() = _lastAwayMessageTime fun whoisServiceReply() = _whoisServiceReply fun suserHost() = _suserHost fun encrypted() = _encrypted @@ -183,12 +188,17 @@ class IrcUser( } } - override fun setLastAwayMessage(lastAwayMessage: Long) { - if (lastAwayMessage > _lastAwayMessage) { - _lastAwayMessage = lastAwayMessage + override fun setLastAwayMessage(lastAwayMessage: Int) { + if (lastAwayMessage > lastAwayMessage() && + !(proxy.features.negotiated hasFeature ExtendedFeature.LongTime)) { + _lastAwayMessageTime = Instant.ofEpochSecond(lastAwayMessage.toLong()) } } + override fun setLastAwayMessageTime(lastAwayMessageTime: Instant) { + _lastAwayMessageTime = lastAwayMessageTime + } + override fun setWhoisServiceReply(whoisServiceReply: String) { if (_whoisServiceReply != whoisServiceReply) { _whoisServiceReply = whoisServiceReply @@ -331,7 +341,7 @@ class IrcUser( field = value hasChangedNotification.onNext(Unit) } - private var _lastAwayMessage: Long = 0L + private var _lastAwayMessageTime: Instant = Instant.EPOCH set(value) { field = value hasChangedNotification.onNext(Unit) diff --git a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIrcUser.kt b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIrcUser.kt index 12c91cf25..88b41f507 100644 --- a/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIrcUser.kt +++ b/lib/src/main/java/de/kuschku/libquassel/quassel/syncables/interfaces/IIrcUser.kt @@ -68,7 +68,10 @@ interface IIrcUser : ISyncableObject { fun setIrcOperator(ircOperator: String) @Slot - fun setLastAwayMessage(lastAwayMessage: Long) + fun setLastAwayMessage(lastAwayMessage: Int) + + @Slot + fun setLastAwayMessageTime(lastAwayMessageTime: Instant) @Slot fun setLoginTime(loginTime: Instant) 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 12a7481bb..0e90f6805 100644 --- a/lib/src/main/java/de/kuschku/libquassel/session/SignalProxy.kt +++ b/lib/src/main/java/de/kuschku/libquassel/session/SignalProxy.kt @@ -19,11 +19,13 @@ package de.kuschku.libquassel.session +import de.kuschku.libquassel.connection.Features import de.kuschku.libquassel.protocol.IdentityId import de.kuschku.libquassel.protocol.NetworkId 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.QuasselFeatures import de.kuschku.libquassel.quassel.syncables.Identity import de.kuschku.libquassel.quassel.syncables.Network import de.kuschku.libquassel.quassel.syncables.interfaces.ISyncableObject @@ -63,6 +65,8 @@ interface SignalProxy { fun synchronize(syncableObject: ISyncableObject?) = synchronize(syncableObject, false) fun stopSynchronize(syncableObject: ISyncableObject?) + val features: Features + companion object { val NULL = object : SignalProxy { override fun dispatch(message: SignalProxyMessage) = Unit @@ -81,6 +85,8 @@ interface SignalProxy { override fun renameObject(className: String, newName: String, oldName: String) = Unit override fun synchronize(syncableObject: ISyncableObject?, baseInit: Boolean) = Unit override fun stopSynchronize(syncableObject: ISyncableObject?) = Unit + + override val features get() = Features(QuasselFeatures.empty(), QuasselFeatures.empty()) } } } -- GitLab