aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/activities/status/nodes/NodeListLiveData.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/activities/status/nodes/NodeListLiveData.kt')
-rw-r--r--app/src/main/java/org/pacien/tincapp/activities/status/nodes/NodeListLiveData.kt25
1 files changed, 8 insertions, 17 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/activities/status/nodes/NodeListLiveData.kt b/app/src/main/java/org/pacien/tincapp/activities/status/nodes/NodeListLiveData.kt
index cdbdf0a..70ea54e 100644
--- a/app/src/main/java/org/pacien/tincapp/activities/status/nodes/NodeListLiveData.kt
+++ b/app/src/main/java/org/pacien/tincapp/activities/status/nodes/NodeListLiveData.kt
@@ -18,30 +18,21 @@
18 18
19package org.pacien.tincapp.activities.status.nodes 19package org.pacien.tincapp.activities.status.nodes
20 20
21import android.arch.lifecycle.LiveData 21import org.pacien.tincapp.activities.common.SelfRefreshingLiveData
22import org.pacien.tincapp.commands.Tinc 22import org.pacien.tincapp.commands.Tinc
23import java.util.* 23import java.util.concurrent.TimeUnit
24import kotlin.concurrent.timer
25 24
26/** 25/**
27 * @author pacien 26 * @author pacien
28 */ 27 */
29class NodeListLiveData(private val netName: String) : LiveData<List<String>>() { 28class NodeListLiveData(private val netName: String) : SelfRefreshingLiveData<List<String>>(1, TimeUnit.SECONDS) {
30 private val updateInterval = 2 * 1000L // in milliseconds
31 private val tincCtl = Tinc 29 private val tincCtl = Tinc
32 private lateinit var updateTimer: Timer
33 30
34 override fun onActive() { 31 override fun onRefresh() {
35 updateTimer = timer(period = updateInterval, action = { updateNodeList() }) 32 val nodeList = tincCtl.dumpNodes(netName)
36 } 33 .thenApply { list -> list.map { it.substringBefore(' ') } }
37 34 .get()
38 override fun onInactive() {
39 updateTimer.apply { cancel() }.apply { purge() }
40 }
41 35
42 private fun updateNodeList() { 36 postValue(nodeList)
43 tincCtl.dumpNodes(netName)
44 .thenApply { list -> list.map { it.substringBefore(' ')} }
45 .thenAccept(this::postValue)
46 } 37 }
47} 38}