package com.parkplants.data.sync import android.content.Context import androidx.hilt.work.HiltWorker import androidx.work.* import com.parkplants.data.repository.PlantRepository import dagger.assisted.Assisted import dagger.assisted.AssistedInject @HiltWorker class SyncWorker @AssistedInject constructor( @Assisted context: Context, @Assisted params: WorkerParameters, private val plantRepository: PlantRepository, ) : CoroutineWorker(context, params) { override suspend fun doWork(): Result { return try { plantRepository.syncAll() Result.success() } catch (e: Exception) { if (runAttemptCount < 3) Result.retry() else Result.failure() } } companion object { const val WORK_NAME = "sync_plants" fun buildRequest(): OneTimeWorkRequest = OneTimeWorkRequestBuilder() .setConstraints( Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .build() ) .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 30_000, java.util.concurrent.TimeUnit.MILLISECONDS) .build() } }