Skip to content

Commit

Permalink
ref: use more rx in ProductUploaderWorker.kt
Browse files Browse the repository at this point in the history
  • Loading branch information
VaiTon committed May 13, 2021
1 parent f192e2e commit 7114ae7
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 86 deletions.
Expand Up @@ -93,7 +93,7 @@ import openfoodfacts.github.scrachx.openfood.features.search.ProductSearchActivi
import openfoodfacts.github.scrachx.openfood.features.searchbycode.SearchByCodeFragment
import openfoodfacts.github.scrachx.openfood.features.shared.BaseActivity
import openfoodfacts.github.scrachx.openfood.images.ProductImage
import openfoodfacts.github.scrachx.openfood.jobs.OfflineProductWorker.Companion.scheduleSync
import openfoodfacts.github.scrachx.openfood.jobs.ProductUploaderWorker.Companion.scheduleProductUpload
import openfoodfacts.github.scrachx.openfood.models.Product
import openfoodfacts.github.scrachx.openfood.models.ProductImageField
import openfoodfacts.github.scrachx.openfood.network.OpenFoodAPIClient
Expand Down Expand Up @@ -414,7 +414,7 @@ class MainActivity : BaseActivity(), NavigationDrawerListener {

//Scheduling background image upload job
scheduleProductUploadJob(this)
scheduleSync(this, sharedPreferences)
scheduleProductUpload(this, sharedPreferences)

//Adds nutriscore and quantity values in old history for schema 5 update
val mSharedPref = applicationContext.getSharedPreferences("prefs", 0)
Expand Down
Expand Up @@ -60,7 +60,7 @@ import openfoodfacts.github.scrachx.openfood.analytics.MatomoAnalytics
import openfoodfacts.github.scrachx.openfood.customtabs.CustomTabActivityHelper
import openfoodfacts.github.scrachx.openfood.customtabs.WebViewFallback
import openfoodfacts.github.scrachx.openfood.jobs.LoadTaxonomiesWorker
import openfoodfacts.github.scrachx.openfood.jobs.OfflineProductWorker.Companion.scheduleSync
import openfoodfacts.github.scrachx.openfood.jobs.ProductUploaderWorker.Companion.scheduleProductUpload
import openfoodfacts.github.scrachx.openfood.models.DaoSession
import openfoodfacts.github.scrachx.openfood.models.entities.analysistag.AnalysisTagNameDao
import openfoodfacts.github.scrachx.openfood.models.entities.analysistagconfig.AnalysisTagConfig
Expand Down Expand Up @@ -371,7 +371,7 @@ class PreferencesFragment : PreferenceFragmentCompat(), INavigationItem, OnShare

override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
when (key) {
getString(R.string.pref_enable_mobile_data_key) -> scheduleSync(requireContext(), sharedPreferences)
getString(R.string.pref_enable_mobile_data_key) -> scheduleProductUpload(requireContext(), sharedPreferences)
}
}

Expand Down
Expand Up @@ -49,7 +49,7 @@ import openfoodfacts.github.scrachx.openfood.features.product.ProductFragmentPag
import openfoodfacts.github.scrachx.openfood.features.shared.BaseActivity
import openfoodfacts.github.scrachx.openfood.images.IMG_ID
import openfoodfacts.github.scrachx.openfood.images.ProductImage
import openfoodfacts.github.scrachx.openfood.jobs.OfflineProductWorker.Companion.scheduleSync
import openfoodfacts.github.scrachx.openfood.jobs.ProductUploaderWorker.Companion.scheduleProductUpload
import openfoodfacts.github.scrachx.openfood.models.DaoSession
import openfoodfacts.github.scrachx.openfood.models.Product
import openfoodfacts.github.scrachx.openfood.models.ProductImageField
Expand Down Expand Up @@ -318,7 +318,7 @@ class ProductEditActivity : BaseActivity() {
)
daoSession.offlineSavedProductDao!!.insertOrReplace(toSaveOffline)

scheduleSync(this, sharedPreferences)
scheduleProductUpload(this, sharedPreferences)
daoSession.historyProductDao.addToHistorySync(toSaveOffline)

Toast.makeText(this, R.string.productSavedToast, Toast.LENGTH_SHORT).show()
Expand Down
Expand Up @@ -14,15 +14,15 @@ import javax.inject.Inject
* @param workerParams Parameters to setup the internal state of this worker
*/
@HiltWorker
class SavedProductUploadWorker @AssistedInject constructor(
@Assisted appContext: Context,
@Assisted workerParams: WorkerParameters
class ImagesUploaderWorker @AssistedInject constructor(
@Assisted appContext: Context,
@Assisted workerParams: WorkerParameters
) : RxWorker(appContext, workerParams) {
@Inject
lateinit var client: OpenFoodAPIClient

override fun createWork() = client
.uploadOfflineImages()
.toSingleDefault(Result.success())
.onErrorReturnItem(Result.failure())
.uploadOfflineImages()
.toSingleDefault(Result.success())
.onErrorReturnItem(Result.failure())
}

This file was deleted.

@@ -0,0 +1,72 @@
package openfoodfacts.github.scrachx.openfood.jobs

import android.content.Context
import android.content.SharedPreferences
import android.util.Log
import androidx.hilt.work.HiltWorker
import androidx.work.*
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
import io.reactivex.Single
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.utils.OfflineProductService
import javax.inject.Inject

@HiltWorker
class ProductUploaderWorker @AssistedInject constructor(
@Assisted context: Context,
@Assisted workerParams: WorkerParameters
) : RxWorker(context, workerParams) {

@Inject
lateinit var offlineProductService: OfflineProductService

override fun createWork() = Single.fromCallable { inputData.getBoolean(KEY_INCLUDE_IMAGES, false) }
.doOnSuccess { Log.d(WORK_TAG, "[START] (includeImages=$it)") }
.flatMap { includeImages -> offlineProductService.uploadAll(includeImages) }
.map { shouldRetry ->
if (shouldRetry) {
Log.d(WORK_TAG, "[RETRY]")
Result.retry()
} else {
Log.d(WORK_TAG, "[SUCCESS]")
Result.success()
}
}

companion object {
private const val WORK_TAG = "OFFLINE_WORKER_TAG"
const val KEY_INCLUDE_IMAGES = "includeImages"
private fun inputData(includeImages: Boolean) = Data.Builder()
.putBoolean(KEY_INCLUDE_IMAGES, includeImages)
.build()

fun scheduleProductUpload(context: Context, sharedPreferences: SharedPreferences) {

val constData = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val uploadDataWorkRequest = OneTimeWorkRequest.Builder(ProductUploaderWorker::class.java)
.setInputData(inputData(false))
.setConstraints(constData)
.build()

val constPics = Constraints.Builder()
.setRequiredNetworkType(
if (sharedPreferences.getBoolean(context.getString(R.string.pref_enable_mobile_data_key), true))
NetworkType.CONNECTED
else
NetworkType.UNMETERED
)
val uploadPicturesWorkRequest = OneTimeWorkRequest.Builder(ProductUploaderWorker::class.java)
.setInputData(inputData(true))
.setConstraints(constPics.build())
.build()

WorkManager.getInstance(context)
.beginUniqueWork(WORK_TAG, ExistingWorkPolicy.REPLACE, uploadDataWorkRequest)
.then(uploadPicturesWorkRequest)
.enqueue()
}
}
}
Expand Up @@ -52,7 +52,7 @@ import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.features.LoginActivity
import openfoodfacts.github.scrachx.openfood.features.scan.ContinuousScanActivity
import openfoodfacts.github.scrachx.openfood.features.search.ProductSearchActivity.Companion.start
import openfoodfacts.github.scrachx.openfood.jobs.SavedProductUploadWorker
import openfoodfacts.github.scrachx.openfood.jobs.ImagesUploaderWorker
import openfoodfacts.github.scrachx.openfood.network.ApiFields
import org.apache.commons.validator.routines.checkdigit.EAN13CheckDigit
import java.io.*
Expand Down Expand Up @@ -159,9 +159,9 @@ object Utils {
if (isUploadJobInitialised) return

val periodicity = TimeUnit.MINUTES.toSeconds(30).toInt()
val uploadWorkRequest = OneTimeWorkRequest.Builder(SavedProductUploadWorker::class.java)
.setConstraints(Constraints.Builder().setRequiredNetworkType(NetworkType.UNMETERED).build())
.setInitialDelay(periodicity.toLong(), TimeUnit.SECONDS).build()
val uploadWorkRequest = OneTimeWorkRequest.Builder(ImagesUploaderWorker::class.java)
.setConstraints(Constraints.Builder().setRequiredNetworkType(NetworkType.UNMETERED).build())
.setInitialDelay(periodicity.toLong(), TimeUnit.SECONDS).build()
WorkManager.getInstance(context).enqueueUniqueWork(UPLOAD_JOB_TAG, ExistingWorkPolicy.KEEP, uploadWorkRequest)

isUploadJobInitialised = true
Expand Down

0 comments on commit 7114ae7

Please sign in to comment.