mirror of
https://github.com/nextcloud/android.git
synced 2024-11-23 05:35:39 +03:00
check if sync worker is already running
Signed-off-by: Jonas Mayer <jonas.a.mayer@gmx.net>
This commit is contained in:
parent
177ffc9688
commit
aef9a41a5f
4 changed files with 38 additions and 0 deletions
|
@ -163,4 +163,5 @@ interface BackgroundJobManager {
|
|||
fun cancelAllJobs()
|
||||
fun schedulePeriodicHealthStatus()
|
||||
fun startHealthStatus()
|
||||
fun bothFilesSyncJobsRunning(): Boolean
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ import androidx.work.PeriodicWorkRequest
|
|||
import androidx.work.WorkInfo
|
||||
import androidx.work.WorkManager
|
||||
import androidx.work.workDataOf
|
||||
import com.google.common.util.concurrent.ListenableFuture
|
||||
import com.nextcloud.client.account.User
|
||||
import com.nextcloud.client.core.Clock
|
||||
import com.nextcloud.client.di.Injectable
|
||||
|
@ -28,11 +29,14 @@ import com.nextcloud.client.documentscan.GeneratePdfFromImagesWork
|
|||
import com.nextcloud.client.jobs.download.FileDownloadWorker
|
||||
import com.nextcloud.client.jobs.upload.FileUploadWorker
|
||||
import com.nextcloud.client.preferences.AppPreferences
|
||||
import com.nextcloud.utils.extensions.isWorkRunning
|
||||
import com.nextcloud.utils.extensions.isWorkScheduled
|
||||
import com.owncloud.android.datamodel.OCFile
|
||||
import com.owncloud.android.lib.common.utils.Log_OC
|
||||
import com.owncloud.android.operations.DownloadType
|
||||
import java.util.Date
|
||||
import java.util.UUID
|
||||
import java.util.concurrent.ExecutionException
|
||||
import java.util.concurrent.TimeUnit
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
|
@ -403,6 +407,12 @@ internal class BackgroundJobManagerImpl(
|
|||
workManager.cancelJob(JOB_PERIODIC_CALENDAR_BACKUP, user)
|
||||
}
|
||||
|
||||
override fun bothFilesSyncJobsRunning(): Boolean {
|
||||
|
||||
return workManager.isWorkRunning(JOB_PERIODIC_FILES_SYNC) &&
|
||||
workManager.isWorkRunning(JOB_IMMEDIATE_FILES_SYNC)
|
||||
}
|
||||
|
||||
override fun schedulePeriodicFilesSyncJob() {
|
||||
val request = periodicRequestBuilder(
|
||||
jobClass = FilesSyncWork::class,
|
||||
|
|
|
@ -94,6 +94,10 @@ class FilesSyncWork(
|
|||
|
||||
@Suppress("MagicNumber")
|
||||
override fun doWork(): Result {
|
||||
if (backgroundJobManager.bothFilesSyncJobsRunning()){
|
||||
Log_OC.d(TAG,"Kill Sync Worker since another instance of the worker seems to be running already!")
|
||||
return Result.success()
|
||||
}
|
||||
backgroundJobManager.logStartOfWorker(BackgroundJobManagerImpl.formatClassTag(this::class))
|
||||
|
||||
val overridePowerSaving = inputData.getBoolean(OVERRIDE_POWER_SAVING, false)
|
||||
|
|
|
@ -33,3 +33,26 @@ fun WorkManager.isWorkScheduled(tag: String): Boolean {
|
|||
|
||||
return running
|
||||
}
|
||||
|
||||
fun WorkManager.isWorkRunning(tag: String): Boolean {
|
||||
val statuses: ListenableFuture<List<WorkInfo>> = this.getWorkInfosByTag(tag)
|
||||
var running = false
|
||||
var workInfoList: List<WorkInfo> = emptyList()
|
||||
|
||||
try {
|
||||
workInfoList = statuses.get()
|
||||
} catch (e: ExecutionException) {
|
||||
Log_OC.d("Worker", "ExecutionException in isWorkScheduled: $e")
|
||||
} catch (e: InterruptedException) {
|
||||
Log_OC.d("Worker", "InterruptedException in isWorkScheduled: $e")
|
||||
}
|
||||
|
||||
for (workInfo in workInfoList) {
|
||||
val state = workInfo.state
|
||||
running = running || state == WorkInfo.State.RUNNING
|
||||
}
|
||||
|
||||
return running
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue