Use Signal's job framework for background polling
parent
19cdf8068d
commit
d6cf9b573e
@ -1,20 +1,44 @@
|
|||||||
package org.thoughtcrime.securesms.loki
|
package org.thoughtcrime.securesms.loki
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.work.Worker
|
import android.content.Intent
|
||||||
import androidx.work.WorkerParameters
|
import org.thoughtcrime.securesms.database.DatabaseFactory
|
||||||
|
import org.thoughtcrime.securesms.jobs.PushContentReceiveJob
|
||||||
|
import org.thoughtcrime.securesms.service.PersistentAlarmManagerListener
|
||||||
|
import org.thoughtcrime.securesms.util.TextSecurePreferences
|
||||||
|
import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope
|
||||||
import org.whispersystems.signalservice.loki.api.LokiAPI
|
import org.whispersystems.signalservice.loki.api.LokiAPI
|
||||||
import org.whispersystems.signalservice.loki.api.LokiAPIDatabaseProtocol
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
class BackgroundPollWorker(private val userHexEncodedPublicKey: String, private val apiDatabase: LokiAPIDatabaseProtocol, context: Context, parameters: WorkerParameters) : Worker(context, parameters) {
|
class BackgroundPollWorker : PersistentAlarmManagerListener() {
|
||||||
|
|
||||||
override fun doWork(): Result {
|
companion object {
|
||||||
return try {
|
private val pollInterval = TimeUnit.MINUTES.toMillis(5)
|
||||||
LokiAPI(userHexEncodedPublicKey, apiDatabase).getMessages().get()
|
|
||||||
// TODO: Process envelopes
|
@JvmStatic
|
||||||
Result.success()
|
fun schedule(context: Context) {
|
||||||
} catch (exception: Exception) {
|
BackgroundPollWorker().onReceive(context, Intent())
|
||||||
Result.failure()
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getNextScheduledExecutionTime(context: Context): Long {
|
||||||
|
return TextSecurePreferences.getBackgroundPollTime(context)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onAlarm(context: Context, scheduledTime: Long): Long {
|
||||||
|
if (scheduledTime != 0L) {
|
||||||
|
val userHexEncodedPublicKey = TextSecurePreferences.getLocalNumber(context)
|
||||||
|
val apiDatabase = DatabaseFactory.getLokiAPIDatabase(context)
|
||||||
|
try {
|
||||||
|
LokiAPI(userHexEncodedPublicKey, apiDatabase).getMessages().get().forEach {
|
||||||
|
PushContentReceiveJob(context).processEnvelope(SignalServiceEnvelope(it))
|
||||||
|
}
|
||||||
|
} catch (exception: Throwable) {
|
||||||
|
// Do nothing
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
val nextTime = System.currentTimeMillis() + pollInterval
|
||||||
|
TextSecurePreferences.setBackgroundPollTime(context, nextTime)
|
||||||
|
return nextTime
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue