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

Implement first chat list settings

parent 423da495
No related branches found
No related tags found
No related merge requests found
Showing
with 403 additions and 97 deletions
...@@ -81,6 +81,12 @@ ...@@ -81,6 +81,12 @@
android:label="@string/settings_identity_title" android:label="@string/settings_identity_title"
android:parentActivityName=".ui.coresettings.CoreSettingsActivity" android:parentActivityName=".ui.coresettings.CoreSettingsActivity"
android:windowSoftInputMode="adjustResize" /> android:windowSoftInputMode="adjustResize" />
<activity
android:name=".ui.coresettings.chatlist.ChatListActivity"
android:exported="false"
android:label="@string/settings_chatlist_title"
android:parentActivityName=".ui.coresettings.CoreSettingsActivity"
android:windowSoftInputMode="adjustResize" />
<activity <activity
android:name=".ui.coresettings.networkconfig.NetworkConfigActivity" android:name=".ui.coresettings.networkconfig.NetworkConfigActivity"
android:exported="false" android:exported="false"
......
...@@ -18,6 +18,8 @@ import de.kuschku.quasseldroid.ui.clientsettings.license.LicenseSettingsActivity ...@@ -18,6 +18,8 @@ import de.kuschku.quasseldroid.ui.clientsettings.license.LicenseSettingsActivity
import de.kuschku.quasseldroid.ui.clientsettings.license.LicenseSettingsFragmentProvider import de.kuschku.quasseldroid.ui.clientsettings.license.LicenseSettingsFragmentProvider
import de.kuschku.quasseldroid.ui.coresettings.CoreSettingsActivity import de.kuschku.quasseldroid.ui.coresettings.CoreSettingsActivity
import de.kuschku.quasseldroid.ui.coresettings.CoreSettingsFragmentProvider import de.kuschku.quasseldroid.ui.coresettings.CoreSettingsFragmentProvider
import de.kuschku.quasseldroid.ui.coresettings.chatlist.ChatListActivity
import de.kuschku.quasseldroid.ui.coresettings.chatlist.ChatListFragmentProvider
import de.kuschku.quasseldroid.ui.coresettings.identity.IdentityActivity import de.kuschku.quasseldroid.ui.coresettings.identity.IdentityActivity
import de.kuschku.quasseldroid.ui.coresettings.identity.IdentityFragmentProvider import de.kuschku.quasseldroid.ui.coresettings.identity.IdentityFragmentProvider
import de.kuschku.quasseldroid.ui.coresettings.networkconfig.NetworkConfigActivity import de.kuschku.quasseldroid.ui.coresettings.networkconfig.NetworkConfigActivity
...@@ -54,6 +56,9 @@ abstract class ActivityModule { ...@@ -54,6 +56,9 @@ abstract class ActivityModule {
@ContributesAndroidInjector(modules = [IdentityFragmentProvider::class]) @ContributesAndroidInjector(modules = [IdentityFragmentProvider::class])
abstract fun bindIdentityActivity(): IdentityActivity abstract fun bindIdentityActivity(): IdentityActivity
@ContributesAndroidInjector(modules = [ChatListFragmentProvider::class])
abstract fun bindChatListActivity(): ChatListActivity
@ContributesAndroidInjector(modules = [NetworkConfigFragmentProvider::class]) @ContributesAndroidInjector(modules = [NetworkConfigFragmentProvider::class])
abstract fun bindNetworkConfigActivity(): NetworkConfigActivity abstract fun bindNetworkConfigActivity(): NetworkConfigActivity
......
...@@ -16,6 +16,7 @@ import de.kuschku.libquassel.quassel.syncables.BufferViewConfig ...@@ -16,6 +16,7 @@ import de.kuschku.libquassel.quassel.syncables.BufferViewConfig
import de.kuschku.libquassel.quassel.syncables.Identity import de.kuschku.libquassel.quassel.syncables.Identity
import de.kuschku.libquassel.quassel.syncables.Network import de.kuschku.libquassel.quassel.syncables.Network
import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.chatlist.ChatListActivity
import de.kuschku.quasseldroid.ui.coresettings.identity.IdentityActivity import de.kuschku.quasseldroid.ui.coresettings.identity.IdentityActivity
import de.kuschku.quasseldroid.ui.coresettings.networkconfig.NetworkConfigActivity import de.kuschku.quasseldroid.ui.coresettings.networkconfig.NetworkConfigActivity
import de.kuschku.quasseldroid.util.helper.combineLatest import de.kuschku.quasseldroid.util.helper.combineLatest
...@@ -55,11 +56,9 @@ class CoreSettingsFragment : ServiceBoundFragment() { ...@@ -55,11 +56,9 @@ class CoreSettingsFragment : ServiceBoundFragment() {
} }
val chatListAdapter = SettingsItemAdapter { val chatListAdapter = SettingsItemAdapter {
/* val intent = Intent(requireContext(), ChatListActivity::class.java)
val intent = Intent(requireContext(), BufferViewConfigActivity::class.java) intent.putExtra("chatlist", it)
intent.putExtra("bufferviewconfig", it)
startActivity(intent) startActivity(intent)
*/
} }
val itemDecoration = DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) val itemDecoration = DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
...@@ -99,8 +98,8 @@ class CoreSettingsFragment : ServiceBoundFragment() { ...@@ -99,8 +98,8 @@ class CoreSettingsFragment : ServiceBoundFragment() {
chatlists.addItemDecoration(itemDecoration) chatlists.addItemDecoration(itemDecoration)
ViewCompat.setNestedScrollingEnabled(chatlists, false) ViewCompat.setNestedScrollingEnabled(chatlists, false)
viewModel.bufferViewConfigs.switchMap { viewModel.bufferViewConfigMap.switchMap {
combineLatest(it.map(BufferViewConfig::live_config)).map { combineLatest(it.values.map(BufferViewConfig::liveUpdates)).map {
it.map { it.map {
SettingsItem(it.bufferViewId(), it.bufferViewName()) SettingsItem(it.bufferViewId(), it.bufferViewName())
}.sortedBy(SettingsItem::name) }.sortedBy(SettingsItem::name)
......
package de.kuschku.quasseldroid.ui.coresettings.chatlist
import de.kuschku.quasseldroid.util.ui.SettingsActivity
class ChatListActivity : SettingsActivity(ChatListFragment())
package de.kuschku.quasseldroid.ui.coresettings.chatlist
import android.arch.lifecycle.Observer
import android.os.Bundle
import android.support.v7.widget.SwitchCompat
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.libquassel.quassel.syncables.BufferViewConfig
import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.helper.toLiveData
import io.reactivex.Observable
class ChatListFragment : SettingsFragment() {
private var chatlist: Pair<BufferViewConfig, BufferViewConfig>? = null
@BindView(R.id.buffer_view_name)
lateinit var bufferViewName: TextView
@BindView(R.id.show_search)
lateinit var showSearch: SwitchCompat
@BindView(R.id.sort_alphabetically)
lateinit var sortAlphabetically: SwitchCompat
@BindView(R.id.add_new_buffers_automatically)
lateinit var addNewBuffersAutomatically: SwitchCompat
@BindView(R.id.disable_decoration)
lateinit var disableDecoration: SwitchCompat
@BindView(R.id.show_channels)
lateinit var showChannels: SwitchCompat
@BindView(R.id.show_queries)
lateinit var showQueries: SwitchCompat
@BindView(R.id.hide_inactive_buffers)
lateinit var hideInactiveBuffers: SwitchCompat
@BindView(R.id.hide_inactive_networks)
lateinit var hideInactiveNetworks: SwitchCompat
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.settings_chatlist, container, false)
ButterKnife.bind(this, view)
val chatlistId = arguments?.getInt("chatlist", -1) ?: -1
viewModel.bufferViewConfigMap.switchMap {
it[chatlistId]?.liveUpdates() ?: Observable.empty()
}.firstElement()
.toLiveData().observe(this, Observer {
if (it != null) {
this.chatlist = Pair(it, it.copy())
this.chatlist?.let { (_, data) ->
bufferViewName.text = data.bufferViewName()
showSearch.isChecked = data.showSearch()
sortAlphabetically.isChecked = data.sortAlphabetically()
addNewBuffersAutomatically.isChecked = data.addNewBuffersAutomatically()
disableDecoration.isChecked = data.disableDecoration()
hideInactiveBuffers.isChecked = data.hideInactiveBuffers()
hideInactiveNetworks.isChecked = data.hideInactiveNetworks()
}
}
})
return view
}
override fun onSave() = chatlist?.let { (it, data) ->
data.setBufferViewName(bufferViewName.text.toString())
data.setShowSearch(showSearch.isChecked)
data.setSortAlphabetically(sortAlphabetically.isChecked)
data.setAddNewBuffersAutomatically(addNewBuffersAutomatically.isChecked)
data.setDisableDecoration(disableDecoration.isChecked)
data.setHideInactiveBuffers(hideInactiveBuffers.isChecked)
data.setHideInactiveNetworks(hideInactiveNetworks.isChecked)
it.requestUpdate(data.toVariantMap())
true
} ?: false
}
package de.kuschku.quasseldroid.ui.coresettings.chatlist
import dagger.Module
import dagger.android.ContributesAndroidInjector
@Module
abstract class ChatListFragmentProvider {
@ContributesAndroidInjector
abstract fun bindChatListFragment(): ChatListFragment
}
...@@ -17,11 +17,11 @@ import butterknife.BindView ...@@ -17,11 +17,11 @@ import butterknife.BindView
import butterknife.ButterKnife import butterknife.ButterKnife
import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.MaterialDialog
import de.kuschku.libquassel.quassel.syncables.Identity import de.kuschku.libquassel.quassel.syncables.Identity
import de.kuschku.libquassel.util.Optional
import de.kuschku.quasseldroid.R import de.kuschku.quasseldroid.R
import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment import de.kuschku.quasseldroid.ui.coresettings.SettingsFragment
import de.kuschku.quasseldroid.util.helper.setDependent import de.kuschku.quasseldroid.util.helper.setDependent
import de.kuschku.quasseldroid.util.helper.toLiveData import de.kuschku.quasseldroid.util.helper.toLiveData
import io.reactivex.Observable
class IdentityFragment : SettingsFragment() { class IdentityFragment : SettingsFragment() {
...@@ -73,11 +73,9 @@ class IdentityFragment : SettingsFragment() { ...@@ -73,11 +73,9 @@ class IdentityFragment : SettingsFragment() {
val identityId = arguments?.getInt("identity", -1) ?: -1 val identityId = arguments?.getInt("identity", -1) ?: -1
viewModel.identities.map { viewModel.identities.switchMap {
Optional.ofNullable(it[identityId]) it[identityId]?.liveUpdates() ?: Observable.empty()
}.filter(Optional<Identity>::isPresent) }.firstElement()
.map(Optional<Identity>::get)
.firstElement()
.toLiveData().observe(this, Observer { .toLiveData().observe(this, Observer {
if (it != null) { if (it != null) {
this.identity = Pair(it, it.copy()) this.identity = Pair(it, it.copy())
......
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#000"
android:pathData="M12,20A8,8 0 0,0 20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22C6.47,22 2,17.5 2,12A10,10 0 0,1 12,2M12.5,7V12.25L17,14.92L16.25,16.15L11,13V7H12.5Z" />
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24"
android:viewportWidth="24">
<path
android:fillColor="#000"
android:pathData="M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9M12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17M12,4.5C7,4.5 2.73,7.61 1,12C2.73,16.39 7,19.5 12,19.5C17,19.5 21.27,16.39 23,12C21.27,7.61 17,4.5 12,4.5Z" />
</vector>
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical">
<LinearLayout style="@style/Widget.CoreSettings.Wrapper">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp">
<android.support.v7.widget.AppCompatImageView
style="@style/Widget.CoreSettings.PrimaryItemIcon"
app:srcCompat="@drawable/ic_eye" />
<TextView
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_ui" />
</LinearLayout>
<LinearLayout
style="@style/Widget.CoreSettings.DependentGroup"
android:visibility="visible">
<android.support.design.widget.TextInputLayout
style="@style/Widget.CoreSettings.EditTextLayout"
android:hint="@string/settings_chatlist_buffer_view_name">
<android.support.design.widget.TextInputEditText
android:id="@+id/buffer_view_name"
style="@style/Widget.CoreSettings.EditText"
tools:text="All Chats" />
</android.support.design.widget.TextInputLayout>
<android.support.v7.widget.SwitchCompat
android:id="@+id/show_search"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_show_search" />
<android.support.v7.widget.SwitchCompat
android:id="@+id/sort_alphabetically"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_sort_alphabetically" />
<android.support.v7.widget.SwitchCompat
android:id="@+id/add_new_buffers_automatically"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_add_new_buffers_automatically" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp">
<android.support.v7.widget.AppCompatImageView
style="@style/Widget.CoreSettings.PrimaryItemIcon"
app:srcCompat="@drawable/ic_server_network" />
<TextView
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_network" />
</LinearLayout>
<LinearLayout
style="@style/Widget.CoreSettings.DependentGroup"
android:visibility="visible">
<android.support.v7.widget.SwitchCompat
android:id="@+id/disable_decoration"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_disable_decoration" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp">
<android.support.v7.widget.AppCompatImageView
style="@style/Widget.CoreSettings.PrimaryItemIcon"
app:srcCompat="@drawable/ic_tag_text" />
<TextView
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_types" />
</LinearLayout>
<LinearLayout
style="@style/Widget.CoreSettings.DependentGroup"
android:visibility="visible">
<android.support.v7.widget.SwitchCompat
android:id="@+id/show_channels"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_show_channels" />
<android.support.v7.widget.SwitchCompat
android:id="@+id/show_queries"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_show_queries" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp">
<android.support.v7.widget.AppCompatImageView
style="@style/Widget.CoreSettings.PrimaryItemIcon"
app:srcCompat="@drawable/ic_clock" />
<TextView
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_activity" />
</LinearLayout>
<LinearLayout
style="@style/Widget.CoreSettings.DependentGroup"
android:visibility="visible">
<android.support.v7.widget.SwitchCompat
android:id="@+id/hide_inactive_buffers"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_hide_inactive_buffers" />
<android.support.v7.widget.SwitchCompat
android:id="@+id/hide_inactive_networks"
style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_chatlist_hide_inactive_networks" />
</LinearLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
...@@ -150,7 +150,7 @@ ...@@ -150,7 +150,7 @@
<android.support.v7.widget.AppCompatImageView <android.support.v7.widget.AppCompatImageView
style="@style/Widget.CoreSettings.PrimaryItemIcon" style="@style/Widget.CoreSettings.PrimaryItemIcon"
app:srcCompat="@drawable/ic_history" /> app:srcCompat="@drawable/ic_clock" />
<TextView <TextView
style="@style/Widget.CoreSettings.PrimaryItemSwitch" style="@style/Widget.CoreSettings.PrimaryItemSwitch"
...@@ -170,25 +170,16 @@ ...@@ -170,25 +170,16 @@
style="@style/Widget.CoreSettings.EditText" style="@style/Widget.CoreSettings.EditText"
tools:text="Gone Fishing." /> tools:text="Gone Fishing." />
</android.support.design.widget.TextInputLayout> </android.support.design.widget.TextInputLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="48dp">
<Space style="@style/Widget.CoreSettings.PrimaryItemIcon" />
<android.support.v7.widget.SwitchCompat <android.support.v7.widget.SwitchCompat
android:id="@+id/detach_away" android:id="@+id/detach_away"
style="@style/Widget.CoreSettings.PrimaryItemSwitch" style="@style/Widget.CoreSettings.PrimaryItemSwitch"
android:text="@string/settings_identity_detach_away" /> android:text="@string/settings_identity_detach_away" />
</LinearLayout>
<LinearLayout <LinearLayout
android:id="@+id/detach_away_group" android:id="@+id/detach_away_group"
style="@style/Widget.CoreSettings.DependentGroup" android:layout_width="match_parent"
tools:visibility="visible"> android:layout_height="wrap_content">
<android.support.design.widget.TextInputLayout <android.support.design.widget.TextInputLayout
style="@style/Widget.CoreSettings.EditTextLayout" style="@style/Widget.CoreSettings.EditTextLayout"
...@@ -201,4 +192,5 @@ ...@@ -201,4 +192,5 @@
</android.support.design.widget.TextInputLayout> </android.support.design.widget.TextInputLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout>
</android.support.v4.widget.NestedScrollView> </android.support.v4.widget.NestedScrollView>
...@@ -21,6 +21,19 @@ ...@@ -21,6 +21,19 @@
<string name="settings_chatlists_title">Chatlists</string> <string name="settings_chatlists_title">Chatlists</string>
<string name="settings_chatlist_title">Chatlist</string> <string name="settings_chatlist_title">Chatlist</string>
<string name="settings_chatlist_ui">User Interface</string>
<string name="settings_chatlist_buffer_view_name">Name</string>
<string name="settings_chatlist_show_search">Show Search</string>
<string name="settings_chatlist_sort_alphabetically">Sort Alphabetically</string>
<string name="settings_chatlist_add_new_buffers_automatically">Add new chats automatically</string>
<string name="settings_chatlist_network">Network</string>
<string name="settings_chatlist_disable_decoration">Hide Status Buffer</string>
<string name="settings_chatlist_types">Chat Types</string>
<string name="settings_chatlist_show_channels">Show Channels</string>
<string name="settings_chatlist_show_queries">Show Queries</string>
<string name="settings_chatlist_activity">Activity</string>
<string name="settings_chatlist_hide_inactive_buffers">Hide Inactive Chats</string>
<string name="settings_chatlist_hide_inactive_networks">Hide Inactive Networks</string>
<string name="settings_networkconfig_title">IRC Config</string> <string name="settings_networkconfig_title">IRC Config</string>
<string name="settings_networkconfig_ping_timeout">Ping Timeout Detection</string> <string name="settings_networkconfig_ping_timeout">Ping Timeout Detection</string>
......
...@@ -5,14 +5,13 @@ import de.kuschku.libquassel.protocol.* ...@@ -5,14 +5,13 @@ import de.kuschku.libquassel.protocol.*
import de.kuschku.libquassel.protocol.Type import de.kuschku.libquassel.protocol.Type
import de.kuschku.libquassel.quassel.BufferInfo import de.kuschku.libquassel.quassel.BufferInfo
import de.kuschku.libquassel.quassel.syncables.interfaces.IBufferViewConfig import de.kuschku.libquassel.quassel.syncables.interfaces.IBufferViewConfig
import de.kuschku.libquassel.session.ISession
import de.kuschku.libquassel.session.SignalProxy import de.kuschku.libquassel.session.SignalProxy
import io.reactivex.Observable
import io.reactivex.subjects.BehaviorSubject import io.reactivex.subjects.BehaviorSubject
class BufferViewConfig constructor( class BufferViewConfig constructor(
bufferViewId: Int, bufferViewId: Int,
proxy: SignalProxy, proxy: SignalProxy
private val session: ISession
) : SyncableObject(proxy, "BufferViewConfig"), IBufferViewConfig { ) : SyncableObject(proxy, "BufferViewConfig"), IBufferViewConfig {
override fun init() { override fun init() {
renameObject("$_bufferViewId") renameObject("$_bufferViewId")
...@@ -20,8 +19,8 @@ class BufferViewConfig constructor( ...@@ -20,8 +19,8 @@ class BufferViewConfig constructor(
override fun toVariantMap(): QVariantMap = mapOf( override fun toVariantMap(): QVariantMap = mapOf(
"BufferList" to QVariant.of(initBufferList(), Type.QVariantList), "BufferList" to QVariant.of(initBufferList(), Type.QVariantList),
"RemovedBuffers" to QVariant.of(initBufferList(), Type.QVariantList), "RemovedBuffers" to QVariant.of(initRemovedBuffers(), Type.QVariantList),
"TemporarilyRemovedBuffers" to QVariant.of(initBufferList(), Type.QVariantList) "TemporarilyRemovedBuffers" to QVariant.of(initTemporarilyRemovedBuffers(), Type.QVariantList)
) + initProperties() ) + initProperties()
override fun fromVariantMap(properties: QVariantMap) { override fun fromVariantMap(properties: QVariantMap) {
...@@ -29,13 +28,6 @@ class BufferViewConfig constructor( ...@@ -29,13 +28,6 @@ class BufferViewConfig constructor(
initSetRemovedBuffers(properties["RemovedBuffers"].valueOr(::emptyList)) initSetRemovedBuffers(properties["RemovedBuffers"].valueOr(::emptyList))
initSetTemporarilyRemovedBuffers(properties["TemporarilyRemovedBuffers"].valueOr(::emptyList)) initSetTemporarilyRemovedBuffers(properties["TemporarilyRemovedBuffers"].valueOr(::emptyList))
initSetProperties(properties) initSetProperties(properties)
val bufferSyncer = session.bufferSyncer
if (bufferSyncer != null) {
for (info in bufferSyncer.bufferInfos()) {
handleBuffer(info, bufferSyncer)
}
}
} }
override fun initBufferList(): QVariantList = _buffers.map { override fun initBufferList(): QVariantList = _buffers.map {
...@@ -79,18 +71,16 @@ class BufferViewConfig constructor( ...@@ -79,18 +71,16 @@ class BufferViewConfig constructor(
} }
override fun initSetProperties(properties: QVariantMap) { override fun initSetProperties(properties: QVariantMap) {
setBufferViewName(properties["bufferViewName"].valueOr(this::bufferViewName)) _bufferViewName = properties["bufferViewName"].valueOr(this::bufferViewName)
setNetworkId(properties["networkId"].valueOr(this::networkId)) _networkId = properties["networkId"].valueOr(this::networkId)
setAddNewBuffersAutomatically( _addNewBuffersAutomatically = properties["addNewBuffersAutomatically"].valueOr(this::addNewBuffersAutomatically)
properties["addNewBuffersAutomatically"].valueOr(this::addNewBuffersAutomatically) _sortAlphabetically = properties["sortAlphabetically"].valueOr(this::sortAlphabetically)
) _hideInactiveBuffers = properties["hideInactiveBuffers"].valueOr(this::hideInactiveBuffers)
setSortAlphabetically(properties["sortAlphabetically"].valueOr(this::sortAlphabetically)) _hideInactiveNetworks = properties["hideInactiveNetworks"].valueOr(this::hideInactiveNetworks)
setHideInactiveBuffers(properties["hideInactiveBuffers"].valueOr(this::hideInactiveBuffers)) _disableDecoration = properties["disableDecoration"].valueOr(this::disableDecoration)
setHideInactiveNetworks(properties["hideInactiveNetworks"].valueOr(this::hideInactiveNetworks)) _allowedBufferTypes = properties["allowedBufferTypes"].valueOr(this::allowedBufferTypes)
setDisableDecoration(properties["disableDecoration"].valueOr(this::disableDecoration)) _minimumActivity = properties["minimumActivity"].valueOr(this::minimumActivity)
setAllowedBufferTypes(properties["allowedBufferTypes"].valueOr { allowedBufferTypes().toInt() }) _showSearch = properties["showSearch"].valueOr(this::showSearch)
setMinimumActivity(properties["minimumActivity"].valueOr { minimumActivity().toInt() })
setShowSearch(properties["showSearch"].valueOr(this::showSearch))
} }
override fun addBuffer(bufferId: BufferId, pos: Int) { override fun addBuffer(bufferId: BufferId, pos: Int) {
...@@ -177,93 +167,125 @@ class BufferViewConfig constructor( ...@@ -177,93 +167,125 @@ class BufferViewConfig constructor(
fun removedBuffers(): Set<BufferId> = _removedBuffers fun removedBuffers(): Set<BufferId> = _removedBuffers
fun temporarilyRemovedBuffers(): Set<BufferId> = _temporarilyRemovedBuffers fun temporarilyRemovedBuffers(): Set<BufferId> = _temporarilyRemovedBuffers
fun liveUpdates(): Observable<BufferViewConfig> = live_config
fun liveBuffers(): Observable<List<BufferId>> = live_buffers
fun liveRemovedBuffers(): Observable<Set<BufferId>> = live_removedBuffers
fun liveTemporarilyRemovedBuffers(): Observable<Set<BufferId>> = live_temporarilyRemovedBuffers
fun copy(): BufferViewConfig {
val config = BufferViewConfig(this.bufferViewId(), SignalProxy.NULL)
config.fromVariantMap(toVariantMap())
return config
}
override fun setAddNewBuffersAutomatically(addNewBuffersAutomatically: Boolean) { override fun setAddNewBuffersAutomatically(addNewBuffersAutomatically: Boolean) {
_addNewBuffersAutomatically = addNewBuffersAutomatically _addNewBuffersAutomatically = addNewBuffersAutomatically
super.setAddNewBuffersAutomatically(addNewBuffersAutomatically) super.setAddNewBuffersAutomatically(addNewBuffersAutomatically)
live_config.onNext(this)
} }
override fun setAllowedBufferTypes(bufferTypes: Int) { override fun setAllowedBufferTypes(bufferTypes: Int) {
_allowedBufferTypes = Buffer_Type.of(bufferTypes.toShort()) _allowedBufferTypes = Buffer_Type.of(bufferTypes.toShort())
super.setAllowedBufferTypes(bufferTypes) super.setAllowedBufferTypes(bufferTypes)
live_config.onNext(this)
} }
override fun setBufferViewName(bufferViewName: String) { override fun setBufferViewName(bufferViewName: String) {
_bufferViewName = bufferViewName _bufferViewName = bufferViewName
super.setBufferViewName(bufferViewName) super.setBufferViewName(bufferViewName)
live_config.onNext(this)
} }
override fun setDisableDecoration(disableDecoration: Boolean) { override fun setDisableDecoration(disableDecoration: Boolean) {
_disableDecoration = disableDecoration _disableDecoration = disableDecoration
super.setDisableDecoration(disableDecoration) super.setDisableDecoration(disableDecoration)
live_config.onNext(this)
} }
override fun setHideInactiveBuffers(hideInactiveBuffers: Boolean) { override fun setHideInactiveBuffers(hideInactiveBuffers: Boolean) {
_hideInactiveBuffers = hideInactiveBuffers _hideInactiveBuffers = hideInactiveBuffers
super.setHideInactiveBuffers(hideInactiveBuffers) super.setHideInactiveBuffers(hideInactiveBuffers)
live_config.onNext(this)
} }
override fun setHideInactiveNetworks(hideInactiveNetworks: Boolean) { override fun setHideInactiveNetworks(hideInactiveNetworks: Boolean) {
_hideInactiveNetworks = hideInactiveNetworks _hideInactiveNetworks = hideInactiveNetworks
super.setHideInactiveNetworks(hideInactiveNetworks) super.setHideInactiveNetworks(hideInactiveNetworks)
live_config.onNext(this)
} }
override fun setMinimumActivity(activity: Int) { override fun setMinimumActivity(activity: Int) {
_minimumActivity = Buffer_Activity.of(activity) _minimumActivity = Buffer_Activity.of(activity)
super.setMinimumActivity(activity) super.setMinimumActivity(activity)
live_config.onNext(this)
} }
override fun setNetworkId(networkId: NetworkId) { override fun setNetworkId(networkId: NetworkId) {
_networkId = networkId _networkId = networkId
super.setNetworkId(networkId) super.setNetworkId(networkId)
live_config.onNext(this)
} }
override fun setShowSearch(showSearch: Boolean) { override fun setShowSearch(showSearch: Boolean) {
_showSearch = showSearch _showSearch = showSearch
super.setShowSearch(showSearch) super.setShowSearch(showSearch)
live_config.onNext(this)
} }
override fun setSortAlphabetically(sortAlphabetically: Boolean) { override fun setSortAlphabetically(sortAlphabetically: Boolean) {
_sortAlphabetically = sortAlphabetically _sortAlphabetically = sortAlphabetically
super.setSortAlphabetically(sortAlphabetically) super.setSortAlphabetically(sortAlphabetically)
live_config.onNext(this)
} }
private val _bufferViewId: Int = bufferViewId private val _bufferViewId: Int = bufferViewId
private var _bufferViewName: String = "" private var _bufferViewName: String = ""
set(value) {
field = value
live_config.onNext(this)
}
private var _networkId: NetworkId = 0 private var _networkId: NetworkId = 0
set(value) {
field = value
live_config.onNext(this)
}
private var _addNewBuffersAutomatically: Boolean = true private var _addNewBuffersAutomatically: Boolean = true
set(value) {
field = value
live_config.onNext(this)
}
private var _sortAlphabetically: Boolean = true private var _sortAlphabetically: Boolean = true
set(value) {
field = value
live_config.onNext(this)
}
private var _hideInactiveBuffers: Boolean = false private var _hideInactiveBuffers: Boolean = false
set(value) {
field = value
live_config.onNext(this)
}
private var _hideInactiveNetworks: Boolean = false private var _hideInactiveNetworks: Boolean = false
set(value) {
field = value
live_config.onNext(this)
}
private var _disableDecoration: Boolean = false private var _disableDecoration: Boolean = false
set(value) {
field = value
live_config.onNext(this)
}
private var _allowedBufferTypes: Buffer_Types = Buffer_Type.of(*Buffer_Type.validValues) private var _allowedBufferTypes: Buffer_Types = Buffer_Type.of(*Buffer_Type.validValues)
set(value) {
field = value
live_config.onNext(this)
}
private var _minimumActivity: Buffer_Activities = Buffer_Activities.of(0) private var _minimumActivity: Buffer_Activities = Buffer_Activities.of(0)
set(value) {
field = value
live_config.onNext(this)
}
private var _showSearch: Boolean = false private var _showSearch: Boolean = false
set(value) {
field = value
live_config.onNext(this)
}
private var _buffers: MutableList<BufferId> = mutableListOf() private var _buffers: MutableList<BufferId> = mutableListOf()
private var _removedBuffers: MutableSet<BufferId> = mutableSetOf() private var _removedBuffers: MutableSet<BufferId> = mutableSetOf()
private var _temporarilyRemovedBuffers: MutableSet<BufferId> = mutableSetOf() private var _temporarilyRemovedBuffers: MutableSet<BufferId> = mutableSetOf()
val live_config = BehaviorSubject.createDefault(this) private val live_config = BehaviorSubject.createDefault(this)
private val live_buffers = BehaviorSubject.createDefault<List<BufferId>>(emptyList())
val live_buffers: BehaviorSubject<List<BufferId>> = BehaviorSubject.createDefault<List<BufferId>>( private val live_removedBuffers = BehaviorSubject.createDefault<Set<BufferId>>(emptySet())
emptyList() private val live_temporarilyRemovedBuffers = BehaviorSubject.createDefault<Set<BufferId>>(emptySet())
)
val live_removedBuffers: BehaviorSubject<Set<BufferId>> = BehaviorSubject.createDefault<Set<BufferId>>(
emptySet()
)
val live_temporarilyRemovedBuffers: BehaviorSubject<Set<BufferId>> = BehaviorSubject.createDefault<Set<BufferId>>(
emptySet()
)
object NameComparator : Comparator<BufferViewConfig> { object NameComparator : Comparator<BufferViewConfig> {
override fun compare(a: BufferViewConfig?, b: BufferViewConfig?) = override fun compare(a: BufferViewConfig?, b: BufferViewConfig?) =
......
...@@ -3,14 +3,12 @@ package de.kuschku.libquassel.quassel.syncables ...@@ -3,14 +3,12 @@ package de.kuschku.libquassel.quassel.syncables
import de.kuschku.libquassel.protocol.* import de.kuschku.libquassel.protocol.*
import de.kuschku.libquassel.quassel.BufferInfo import de.kuschku.libquassel.quassel.BufferInfo
import de.kuschku.libquassel.quassel.syncables.interfaces.IBufferViewManager import de.kuschku.libquassel.quassel.syncables.interfaces.IBufferViewManager
import de.kuschku.libquassel.session.ISession
import de.kuschku.libquassel.session.SignalProxy import de.kuschku.libquassel.session.SignalProxy
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.subjects.BehaviorSubject import io.reactivex.subjects.BehaviorSubject
class BufferViewManager constructor( class BufferViewManager constructor(
proxy: SignalProxy, proxy: SignalProxy
private val session: ISession
) : SyncableObject(proxy, "BufferViewManager"), IBufferViewManager { ) : SyncableObject(proxy, "BufferViewManager"), IBufferViewManager {
override fun toVariantMap(): QVariantMap = mapOf( override fun toVariantMap(): QVariantMap = mapOf(
"BufferViewIds" to QVariant.of(initBufferViewIds(), Type.QVariantList) "BufferViewIds" to QVariant.of(initBufferViewIds(), Type.QVariantList)
...@@ -49,7 +47,7 @@ class BufferViewManager constructor( ...@@ -49,7 +47,7 @@ class BufferViewManager constructor(
if (_bufferViewConfigs.contains(bufferViewConfigId)) if (_bufferViewConfigs.contains(bufferViewConfigId))
return return
addBufferViewConfig(BufferViewConfig(bufferViewConfigId, proxy, session)) addBufferViewConfig(BufferViewConfig(bufferViewConfigId, proxy))
} }
override fun deleteBufferViewConfig(bufferViewConfigId: Int) { override fun deleteBufferViewConfig(bufferViewConfigId: Int) {
......
...@@ -28,13 +28,13 @@ interface ISyncableObject { ...@@ -28,13 +28,13 @@ interface ISyncableObject {
fun toVariantMap(): QVariantMap = emptyMap() fun toVariantMap(): QVariantMap = emptyMap()
} }
inline fun ISyncableObject.SYNC(function: String, vararg arg: QVariant_) { /*inline*/ fun ISyncableObject.SYNC(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
if (initialized && proxy.shouldSync(className, objectName, function)) if (initialized && proxy.shouldSync(className, objectName, function))
proxy.callSync(className, objectName, function, arg.toList()) proxy.callSync(className, objectName, function, arg.toList())
} }
inline fun ISyncableObject.REQUEST(function: String, vararg arg: QVariant_) { /*inline*/ fun ISyncableObject.REQUEST(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
if (initialized && proxy.shouldSync(className, objectName, function)) if (initialized && proxy.shouldSync(className, objectName, function))
proxy.callSync(className, objectName, function, arg.toList()) proxy.callSync(className, objectName, function, arg.toList())
......
...@@ -39,7 +39,7 @@ class Session( ...@@ -39,7 +39,7 @@ class Session(
override val aliasManager = AliasManager(this) override val aliasManager = AliasManager(this)
override val backlogManager = BacklogManager(this, backlogStorage) override val backlogManager = BacklogManager(this, backlogStorage)
override val bufferViewManager = BufferViewManager(this, this) override val bufferViewManager = BufferViewManager(this)
override val bufferSyncer = BufferSyncer(this, this) override val bufferSyncer = BufferSyncer(this, this)
override val certManagers = mutableMapOf<IdentityId, CertManager>() override val certManagers = mutableMapOf<IdentityId, CertManager>()
override val coreInfo = CoreInfo(this) override val coreInfo = CoreInfo(this)
...@@ -191,6 +191,11 @@ class Session( ...@@ -191,6 +191,11 @@ class Session(
} }
override fun onInitDone() { override fun onInitDone() {
for (config in bufferViewManager.bufferViewConfigs()) {
for (info in bufferSyncer.bufferInfos()) {
config.handleBuffer(info, bufferSyncer)
}
}
coreConnection.setState(ConnectionState.CONNECTED) coreConnection.setState(ConnectionState.CONNECTED)
dispatch(SignalProxyMessage.HeartBeat(Instant.now())) dispatch(SignalProxyMessage.HeartBeat(Instant.now()))
} }
......
...@@ -318,6 +318,14 @@ class QuasselViewModel : ViewModel() { ...@@ -318,6 +318,14 @@ class QuasselViewModel : ViewModel() {
} }
}.mapOrElse(emptyList()) }.mapOrElse(emptyList())
val bufferViewConfigMap = bufferViewManager.switchMap {
it.map { manager ->
manager.liveBufferViewConfigs().map {
it.mapNotNull(manager::bufferViewConfig).associateBy(BufferViewConfig::bufferViewId)
}
}.orElse(Observable.empty())
}
val showHidden = BehaviorSubject.createDefault(false) val showHidden = BehaviorSubject.createDefault(false)
val collapsedNetworks = BehaviorSubject.createDefault(emptySet<NetworkId>()) val collapsedNetworks = BehaviorSubject.createDefault(emptySet<NetworkId>())
val selectedBufferId = BehaviorSubject.createDefault(-1) val selectedBufferId = BehaviorSubject.createDefault(-1)
...@@ -381,14 +389,14 @@ class QuasselViewModel : ViewModel() { ...@@ -381,14 +389,14 @@ class QuasselViewModel : ViewModel() {
val config = configOptional.orNull() val config = configOptional.orNull()
if (bufferSyncer != null && config != null) { if (bufferSyncer != null && config != null) {
session.liveNetworks().switchMap { networks -> session.liveNetworks().switchMap { networks ->
config.live_config config.liveUpdates()
.debounce(16, TimeUnit.MILLISECONDS) .debounce(16, TimeUnit.MILLISECONDS)
.switchMap { currentConfig -> .switchMap { currentConfig ->
combineLatest<Collection<BufferId>>( combineLatest<Collection<BufferId>>(
listOf( listOf(
config.live_buffers, config.liveBuffers(),
config.live_temporarilyRemovedBuffers, config.liveTemporarilyRemovedBuffers(),
config.live_removedBuffers config.liveRemovedBuffers()
) )
).switchMap { (ids, temp, perm) -> ).switchMap { (ids, temp, perm) ->
fun transformIds(ids: Collection<BufferId>, state: BufferHiddenState) = fun transformIds(ids: Collection<BufferId>, state: BufferHiddenState) =
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment