diff options
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.kt | 25 |
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 | ||
19 | package org.pacien.tincapp.activities.status.nodes | 19 | package org.pacien.tincapp.activities.status.nodes |
20 | 20 | ||
21 | import android.arch.lifecycle.LiveData | 21 | import org.pacien.tincapp.activities.common.SelfRefreshingLiveData |
22 | import org.pacien.tincapp.commands.Tinc | 22 | import org.pacien.tincapp.commands.Tinc |
23 | import java.util.* | 23 | import java.util.concurrent.TimeUnit |
24 | import kotlin.concurrent.timer | ||
25 | 24 | ||
26 | /** | 25 | /** |
27 | * @author pacien | 26 | * @author pacien |
28 | */ | 27 | */ |
29 | class NodeListLiveData(private val netName: String) : LiveData<List<String>>() { | 28 | class 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 | } |