Skip to content
Snippets Groups Projects
Commit 7b10813d authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Support for disconnectFromCore feature

parent e27f3d13
No related branches found
No related tags found
No related merge requests found
...@@ -19,6 +19,7 @@ import de.kuschku.quasseldroid.util.QuasseldroidNotificationManager ...@@ -19,6 +19,7 @@ import de.kuschku.quasseldroid.util.QuasseldroidNotificationManager
import de.kuschku.quasseldroid.util.backport.DaggerLifecycleService import de.kuschku.quasseldroid.util.backport.DaggerLifecycleService
import de.kuschku.quasseldroid.util.compatibility.AndroidHandlerService import de.kuschku.quasseldroid.util.compatibility.AndroidHandlerService
import de.kuschku.quasseldroid.util.helper.editApply import de.kuschku.quasseldroid.util.helper.editApply
import de.kuschku.quasseldroid.util.helper.editCommit
import de.kuschku.quasseldroid.util.helper.sharedPreferences import de.kuschku.quasseldroid.util.helper.sharedPreferences
import de.kuschku.quasseldroid.util.helper.toLiveData import de.kuschku.quasseldroid.util.helper.toLiveData
import io.reactivex.Observable import io.reactivex.Observable
...@@ -253,9 +254,21 @@ class QuasselService : DaggerLifecycleService(), ...@@ -253,9 +254,21 @@ class QuasselService : DaggerLifecycleService(),
} }
private val connectivity = BehaviorSubject.createDefault(Unit) private val connectivity = BehaviorSubject.createDefault(Unit)
private fun disconnectFromCore() {
getSharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE).editCommit {
putBoolean(Keys.Status.reconnect, false)
}
}
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
sessionManager = SessionManager(ISession.NULL, QuasselBacklogStorage(database), handlerService) sessionManager = SessionManager(
ISession.NULL,
QuasselBacklogStorage(database),
handlerService,
::disconnectFromCore
)
clientData = ClientData( clientData = ClientData(
identifier = "${resources.getString(R.string.app_name)} ${BuildConfig.VERSION_NAME}", identifier = "${resources.getString(R.string.app_name)} ${BuildConfig.VERSION_NAME}",
buildDate = Instant.ofEpochSecond(BuildConfig.GIT_COMMIT_DATE), buildDate = Instant.ofEpochSecond(BuildConfig.GIT_COMMIT_DATE),
......
...@@ -35,7 +35,9 @@ enum class QuasselFeature(override val bit: Int) : Flag<QuasselFeature> { ...@@ -35,7 +35,9 @@ enum class QuasselFeature(override val bit: Int) : Flag<QuasselFeature> {
/** Core-Side highlight configuration and matching */ /** Core-Side highlight configuration and matching */
CoreSideHighlights(0x1000), CoreSideHighlights(0x1000),
/** Show prefixes for senders in backlog */ /** Show prefixes for senders in backlog */
SenderPrefixes(0x2000); SenderPrefixes(0x2000),
/** Supports RPC call disconnectFromCore to remotely disconnect a client */
RemoteDisconnect(0x4000);
companion object : Flags.Factory<QuasselFeature> { companion object : Flags.Factory<QuasselFeature> {
override val NONE: Flags<QuasselFeature> = QuasselFeature.of() override val NONE: Flags<QuasselFeature> = QuasselFeature.of()
......
...@@ -37,8 +37,7 @@ class RpcHandler( ...@@ -37,8 +37,7 @@ class RpcHandler(
override fun passwordChanged(ignored: Long, success: Boolean) { override fun passwordChanged(ignored: Long, success: Boolean) {
} }
override fun disconnectFromCore() { override fun disconnectFromCore() = session.disconnectFromCore()
}
override fun objectRenamed(classname: ByteBuffer, newname: String, oldname: String) { override fun objectRenamed(classname: ByteBuffer, newname: String, oldname: String) {
session.renameObject(classname.deserializeString(StringSerializer.UTF8) ?: "", newname, oldname) session.renameObject(classname.deserializeString(StringSerializer.UTF8) ?: "", newname, oldname)
...@@ -64,16 +63,12 @@ class RpcHandler( ...@@ -64,16 +63,12 @@ class RpcHandler(
override fun requestPasswordChange(peerPtr: Long, user: String, old: String, new: String) { override fun requestPasswordChange(peerPtr: Long, user: String, old: String, new: String) {
} }
override fun requestKickClient(id: Int) { override fun requestKickClient(id: Int) = RPC("2requestKickClient(Int)", ARG(id, Type.Int))
RPC("2requestKickClient(Int)", ARG(id, Type.Int))
}
override fun sendInput(bufferInfo: BufferInfo, message: String) { override fun sendInput(bufferInfo: BufferInfo, message: String) = RPC(
RPC(
"2sendInput(BufferInfo,QString)", ARG(bufferInfo, QType.BufferInfo), "2sendInput(BufferInfo,QString)", ARG(bufferInfo, QType.BufferInfo),
ARG(message, Type.QString) ARG(message, Type.QString)
) )
}
inline fun RPC(function: String, vararg arg: QVariant_) { inline fun RPC(function: String, vararg arg: QVariant_) {
// Don’t transmit calls back that we just got from the network // Don’t transmit calls back that we just got from the network
......
...@@ -20,7 +20,8 @@ class Session( ...@@ -20,7 +20,8 @@ class Session(
address: SocketAddress, address: SocketAddress,
private val handlerService: HandlerService, private val handlerService: HandlerService,
backlogStorage: BacklogStorage, backlogStorage: BacklogStorage,
private var userData: Pair<String, String> private var userData: Pair<String, String>,
val disconnectFromCore: () -> Unit
) : ProtocolHandler(), ISession { ) : ProtocolHandler(), ISession {
override val features = Features(clientData.clientFeatures, Quassel_Features.of()) override val features = Features(clientData.clientFeatures, Quassel_Features.of())
......
...@@ -16,9 +16,12 @@ import io.reactivex.subjects.BehaviorSubject ...@@ -16,9 +16,12 @@ import io.reactivex.subjects.BehaviorSubject
import javax.net.ssl.SSLSession import javax.net.ssl.SSLSession
import javax.net.ssl.X509TrustManager import javax.net.ssl.X509TrustManager
class SessionManager(offlineSession: ISession, class SessionManager(
offlineSession: ISession,
val backlogStorage: BacklogStorage, val backlogStorage: BacklogStorage,
val handlerService: HandlerService) : ISession { val handlerService: HandlerService,
private val disconnectFromCore: () -> Unit
) : ISession {
override val features: Features override val features: Features
get() = session.or(lastSession).features get() = session.or(lastSession).features
override val sslSession: SSLSession? override val sslSession: SSLSession?
...@@ -121,7 +124,8 @@ class SessionManager(offlineSession: ISession, ...@@ -121,7 +124,8 @@ class SessionManager(offlineSession: ISession,
address, address,
handlerService, handlerService,
backlogStorage, backlogStorage,
userData userData,
disconnectFromCore
) )
) )
} }
......
...@@ -36,7 +36,7 @@ class ConnectionUnitTest { ...@@ -36,7 +36,7 @@ class ConnectionUnitTest {
buildDate = Instant.EPOCH, buildDate = Instant.EPOCH,
clientFeatures = Quassel_Feature.of(*QuasselFeature.validValues), clientFeatures = Quassel_Feature.of(*QuasselFeature.validValues),
protocolFeatures = Protocol_Feature.of(ProtocolFeature.TLS, ProtocolFeature.Compression), protocolFeatures = Protocol_Feature.of(ProtocolFeature.TLS, ProtocolFeature.Compression),
supportedProtocols = listOf(Protocol.Datastream) supportedProtocols = listOf(Protocol.Datastream),
), object : X509TrustManager { ), object : X509TrustManager {
override fun checkClientTrusted(p0: Array<out X509Certificate>?, p1: String?) { override fun checkClientTrusted(p0: Array<out X509Certificate>?, p1: String?) {
} }
...@@ -51,8 +51,8 @@ class ConnectionUnitTest { ...@@ -51,8 +51,8 @@ class ConnectionUnitTest {
override fun clearMessages(bufferId: BufferId, idRange: IntRange) = Unit override fun clearMessages(bufferId: BufferId, idRange: IntRange) = Unit
override fun clearMessages(bufferId: BufferId) = Unit override fun clearMessages(bufferId: BufferId) = Unit
override fun clearMessages() = Unit override fun clearMessages() = Unit
}, user to pass }, user to pass,
) ) {}
session.join() session.join()
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment