aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/org/pacien/tincapp/activities/viewlog/LogLiveData.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/pacien/tincapp/activities/viewlog/LogLiveData.kt')
-rw-r--r--app/src/main/java/org/pacien/tincapp/activities/viewlog/LogLiveData.kt32
1 files changed, 16 insertions, 16 deletions
diff --git a/app/src/main/java/org/pacien/tincapp/activities/viewlog/LogLiveData.kt b/app/src/main/java/org/pacien/tincapp/activities/viewlog/LogLiveData.kt
index f410a8c..9767e12 100644
--- a/app/src/main/java/org/pacien/tincapp/activities/viewlog/LogLiveData.kt
+++ b/app/src/main/java/org/pacien/tincapp/activities/viewlog/LogLiveData.kt
@@ -18,30 +18,37 @@
18 18
19package org.pacien.tincapp.activities.viewlog 19package org.pacien.tincapp.activities.viewlog
20 20
21import android.arch.lifecycle.LiveData 21import org.pacien.tincapp.activities.common.SelfRefreshingLiveData
22import org.pacien.tincapp.commands.Executor 22import org.pacien.tincapp.commands.Executor
23import org.pacien.tincapp.commands.Tinc 23import org.pacien.tincapp.commands.Tinc
24import java.util.* 24import java.util.*
25import kotlin.concurrent.timer 25import java.util.concurrent.TimeUnit
26 26
27/** 27/**
28 * @author pacien 28 * @author pacien
29 */ 29 */
30class LogLiveData(private val netName: String, private val logLevel: Int, private val logLineSize: Int) : LiveData<List<String>>() { 30class LogLiveData(private val netName: String, private val logLevel: Int, private val logLineSize: Int)
31 private val updateInterval = 250L // milliseconds 31 : SelfRefreshingLiveData<List<String>>(250, TimeUnit.MILLISECONDS) {
32
32 private val executor = Executor 33 private val executor = Executor
33 private val log = LinkedList<String>() 34 private val log = LinkedList<String>()
34 private var loggerProcess: Process? = null 35 private lateinit var loggerProcess: Process
35 private var logUpdateTimer: Timer? = null
36 36
37 override fun onActive() { 37 override fun onActive() {
38 super.onActive()
38 loggerProcess = startNewLogger() 39 loggerProcess = startNewLogger()
39 logUpdateTimer = timer(period = updateInterval, action = { outputLog() })
40 } 40 }
41 41
42 override fun onInactive() { 42 override fun onInactive() {
43 loggerProcess?.destroy() 43 loggerProcess.destroy()
44 logUpdateTimer?.apply { cancel() }?.apply { purge() } 44 super.onInactive()
45 }
46
47 override fun onRefresh() {
48 synchronized(log) {
49 val logView = ArrayList(log)
50 postValue(logView)
51 }
45 } 52 }
46 53
47 private fun startNewLogger(): Process { 54 private fun startNewLogger(): Process {
@@ -64,11 +71,4 @@ class LogLiveData(private val netName: String, private val logLevel: Int, privat
64 log.addLast(line) 71 log.addLast(line)
65 } 72 }
66 } 73 }
67
68 private fun outputLog() {
69 synchronized(log) {
70 val logView = ArrayList(log)
71 postValue(logView)
72 }
73 }
74} 74}