try to use jobs to mark if all open groups are caught up

This commit is contained in:
Ryan ZHAO
2021-05-21 14:55:06 +10:00
parent 12ae8d4051
commit d52787a661
8 changed files with 45 additions and 10 deletions

View File

@@ -5,6 +5,7 @@ import android.content.Context
import android.net.Uri
import org.session.libsession.messaging.jobs.AttachmentUploadJob
import org.session.libsession.messaging.jobs.Job
import org.session.libsession.messaging.jobs.MessageReceiveJob
import org.session.libsession.messaging.jobs.MessageSendJob
import org.session.libsession.messaging.messages.control.ConfigurationMessage
import org.session.libsession.messaging.messages.visible.Attachment
@@ -49,6 +50,7 @@ interface StorageProtocol {
fun getAllPendingJobs(type: String): Map<String,Job?>
fun getAttachmentUploadJob(attachmentID: Long): AttachmentUploadJob?
fun getMessageSendJob(messageSendJobID: String): MessageSendJob?
fun getMessageReceivedJob(messageReceiveJobID: String): MessageReceiveJob?
fun resumeMessageSendJobIfNeeded(messageSendJobID: String)
fun isJobCanceled(job: Job): Boolean

View File

@@ -18,6 +18,8 @@ import java.util.concurrent.TimeUnit
class OpenGroupPollerV2(private val server: String, private val executorService: ScheduledExecutorService?) {
var hasStarted = false
var isCaughtUp = false
var secondLastJob: MessageReceiveJob? = null
private var future: ScheduledFuture<*>? = null
companion object {
@@ -43,6 +45,9 @@ class OpenGroupPollerV2(private val server: String, private val executorService:
val openGroupID = "$server.$room"
handleNewMessages(openGroupID, response.messages, isBackgroundPoll)
handleDeletedMessages(openGroupID, response.deletions)
if (secondLastJob == null && !isCaughtUp) {
isCaughtUp = true
}
}
}.always {
executorService?.schedule(this@OpenGroupPollerV2::poll, OpenGroupPollerV2.pollInterval, TimeUnit.MILLISECONDS)
@@ -51,6 +56,7 @@ class OpenGroupPollerV2(private val server: String, private val executorService:
private fun handleNewMessages(openGroupID: String, messages: List<OpenGroupMessageV2>, isBackgroundPoll: Boolean) {
if (!hasStarted) { return }
var latestJob: MessageReceiveJob? = null
messages.sortedBy { it.serverID!! }.forEach { message ->
try {
val senderPublicKey = message.sender!!
@@ -66,11 +72,16 @@ class OpenGroupPollerV2(private val server: String, private val executorService:
job.executeAsync()
} else {
JobQueue.shared.add(job)
if (!isCaughtUp) {
secondLastJob = latestJob
}
latestJob = job
}
} catch (e: Exception) {
Log.e("Loki", "Exception parsing message", e)
}
}
Log.d("Ryan", "Finish a round of polling in thread $openGroupID")
}
private fun handleDeletedMessages(openGroupID: String, deletedMessageServerIDs: List<Long>) {