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

Automatically connect to newly created networks

parent ae26e5c7
No related branches found
No related tags found
No related merge requests found
Showing with 73 additions and 43 deletions
......@@ -63,4 +63,8 @@ class AsyncBackend(
}
override fun sessionManager() = backend.sessionManager()
override fun requestConnectNewNetwork() {
backend.requestConnectNewNetwork()
}
}
......@@ -273,6 +273,20 @@ class QuasselService : DaggerLifecycleService(),
override fun disconnect(forever: Boolean) {
sessionManager.disconnect(forever)
}
override fun requestConnectNewNetwork() {
sessionManager.session.flatMap(ISession::liveNetworkAdded).firstElement().flatMap { id ->
sessionManager.session.flatMap(ISession::liveNetworks)
.map { it[id] }
.flatMap { network ->
network.liveInitialized
.filter { it }
.map { network }
}.firstElement()
}.toLiveData().observe(this@QuasselService, Observer {
it?.requestConnect()
})
}
}
private val handlerService = AndroidHandlerService()
......
......@@ -19,12 +19,14 @@
package de.kuschku.quasseldroid.ui.coresettings.network
import de.kuschku.libquassel.session.Backend
import de.kuschku.libquassel.util.helpers.value
class NetworkCreateFragment : NetworkBaseFragment(true) {
override fun onSave() = viewModel.session.value?.orNull()?.let { session ->
network?.let { (_, data) ->
applyChanges(data)
viewModel.backend.value?.ifPresent(Backend::requestConnectNewNetwork)
session.rpcHandler?.createNetwork(data.networkInfo(), emptyList())
true
}
......
......@@ -25,9 +25,7 @@ import android.content.Intent
import android.os.Bundle
import androidx.lifecycle.Observer
import de.kuschku.libquassel.protocol.IdentityId
import de.kuschku.libquassel.protocol.NetworkId
import de.kuschku.libquassel.quassel.syncables.Identity
import de.kuschku.libquassel.quassel.syncables.Network
import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork
import de.kuschku.libquassel.util.helpers.value
import de.kuschku.quasseldroid.R
......@@ -45,9 +43,9 @@ class UserSetupActivity : ServiceBoundSetupActivity() {
}
override fun onDone(data: Bundle) {
runInBackground {
val network = data.getSerializable("network") as? DefaultNetwork
if (network != null) {
viewModel.backend?.value?.ifPresent { backend ->
viewModel.session.value?.orNull()?.rpcHandler?.apply {
createIdentity(Defaults.identity(this@UserSetupActivity).apply {
setIdentityName(this@UserSetupActivity.getString(R.string.default_identity_identity_name))
......@@ -73,17 +71,9 @@ class UserSetupActivity : ServiceBoundSetupActivity() {
)
}
), data.getStringArray("channels")?.toList().orEmpty())
}
})
viewModel.networks
.map(Map<NetworkId, Network>::values)
.filter(Collection<Network>::isNotEmpty)
.map(Collection<Network>::first)
.firstElement()
.toLiveData().observe(this@UserSetupActivity, Observer {
it?.requestConnect()
runOnUiThread {
backend.requestConnectNewNetwork()
setResult(Activity.RESULT_OK)
finish()
}
......
......@@ -21,6 +21,8 @@ package de.kuschku.libquassel.quassel.syncables
import de.kuschku.libquassel.quassel.syncables.interfaces.ISyncableObject
import de.kuschku.libquassel.session.SignalProxy
import io.reactivex.Observable
import io.reactivex.subjects.BehaviorSubject
abstract class SyncableObject(
override val proxy: SignalProxy,
......@@ -29,7 +31,15 @@ abstract class SyncableObject(
final override var objectName: String = ""
private set
override var identifier = Pair(className, objectName)
override var initialized: Boolean = false
override var initialized: Boolean
get() = _liveInitialized.value
set(value) {
_liveInitialized.onNext(value)
}
private val _liveInitialized = BehaviorSubject.createDefault(false)
override val liveInitialized: Observable<Boolean>
get() = _liveInitialized
protected fun renameObject(newName: String) {
val oldName = objectName
......
......@@ -24,6 +24,7 @@ import de.kuschku.libquassel.protocol.QVariantMap
import de.kuschku.libquassel.protocol.QVariant_
import de.kuschku.libquassel.protocol.Type
import de.kuschku.libquassel.session.SignalProxy
import io.reactivex.Observable
interface ISyncableObject {
val objectName: String
......@@ -31,6 +32,7 @@ interface ISyncableObject {
val className: String
var initialized: Boolean
val proxy: SignalProxy
val liveInitialized: Observable<Boolean>
fun requestUpdate(properties: QVariantMap = toVariantMap()) {
REQUEST("requestUpdate", ARG(properties, Type.QVariantMap))
......
......@@ -28,4 +28,5 @@ interface Backend {
fun disconnect(forever: Boolean = false)
fun sessionManager(): SessionManager
fun updateUserDataAndLogin(user: String, pass: String)
fun requestConnectNewNetwork()
}
......@@ -30,6 +30,7 @@ import io.reactivex.BackpressureStrategy
import io.reactivex.Flowable
import io.reactivex.Observable
import io.reactivex.subjects.BehaviorSubject
import io.reactivex.subjects.PublishSubject
import java.io.Closeable
import javax.net.ssl.SSLSession
......@@ -52,6 +53,7 @@ interface ISession : Closeable {
val ircListHelper: IrcListHelper?
val networks: Map<NetworkId, Network>
fun liveNetworks(): Observable<Map<NetworkId, Network>>
fun liveNetworkAdded(): Observable<NetworkId>
val networkConfig: NetworkConfig?
val rpcHandler: RpcHandler?
val initStatus: Observable<Pair<Int, Int>>
......@@ -93,6 +95,7 @@ interface ISession : Closeable {
override val ircListHelper: IrcListHelper? = null
override val networks: Map<NetworkId, Network> = emptyMap()
override fun liveNetworks() = Observable.empty<Map<NetworkId, Network>>()
override fun liveNetworkAdded(): Observable<NetworkId> = PublishSubject.create()
override val networkConfig: NetworkConfig? = null
override val initStatus: Observable<Pair<Int, Int>> = Observable.just(0 to 0)
override val lag: Observable<Long> = Observable.just(0L)
......
......@@ -96,6 +96,9 @@ class Session(
private val live_networks = BehaviorSubject.createDefault(Unit)
override fun liveNetworks(): Observable<Map<NetworkId, Network>> = live_networks.map { networks.toMap() }
private val network_added = PublishSubject.create<NetworkId>()
override fun liveNetworkAdded(): Observable<NetworkId> = network_added
override val networkConfig = NetworkConfig(this)
override var rpcHandler: RpcHandler? = RpcHandler(this, backlogStorage, notificationManager)
......@@ -168,6 +171,7 @@ class Session(
networks[networkId] = network
synchronize(network)
live_networks.onNext(Unit)
network_added.onNext(networkId)
}
fun removeNetwork(networkId: NetworkId) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment