Actively poll public chat group if the app is in the foreground

This commit is contained in:
Niels Andriesse
2019-08-06 16:18:24 +10:00
parent 149d4b0181
commit 9e4b70058c
3 changed files with 38 additions and 9 deletions

View File

@@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.loki
import android.content.Context
import android.os.Handler
import android.util.Log
import org.thoughtcrime.securesms.jobs.PushDecryptJob
import org.whispersystems.libsignal.util.guava.Optional
@@ -10,10 +11,33 @@ import org.whispersystems.signalservice.api.messages.SignalServiceGroup
import org.whispersystems.signalservice.api.push.SignalServiceAddress
import org.whispersystems.signalservice.loki.api.LokiGroupChatAPI
object LokiGroupChatPoller {
class LokiGroupChatPoller(private val context: Context, private val groupID: Long) {
private val handler = Handler()
private var hasStarted = false
@JvmStatic
fun poll(context: Context, groupID: Long) {
private val task = object : Runnable {
override fun run() {
poll()
handler.postDelayed(this, pollInterval)
}
}
companion object {
private val pollInterval: Long = 5 * 1000
}
fun startIfNeeded() {
if (hasStarted) return
task.run()
hasStarted = true
}
fun stop() {
handler.removeCallbacks(task)
}
private fun poll() {
LokiGroupChatAPI.getMessages(groupID).success { messages ->
messages.map { message ->
val id = "loki-group-chat-$groupID".toByteArray()