Skip to content

Commit

Permalink
ref: Remove obsolete products api from OpenFoodAPIClient.kt (#3860)
Browse files Browse the repository at this point in the history
  • Loading branch information
naivekook committed Feb 27, 2021
1 parent b50c533 commit 0f23183
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 59 deletions.
Expand Up @@ -35,6 +35,7 @@ import openfoodfacts.github.scrachx.openfood.customtabs.WebViewFallback
import openfoodfacts.github.scrachx.openfood.databinding.FragmentHomeBinding
import openfoodfacts.github.scrachx.openfood.features.LoginActivity.Companion.LoginContract
import openfoodfacts.github.scrachx.openfood.features.shared.NavigationBaseFragment
import openfoodfacts.github.scrachx.openfood.network.CommonApiManager
import openfoodfacts.github.scrachx.openfood.network.OpenFoodAPIClient
import openfoodfacts.github.scrachx.openfood.utils.LocaleHelper
import openfoodfacts.github.scrachx.openfood.utils.NavigationDrawerListener
Expand All @@ -53,7 +54,7 @@ class HomeFragment : NavigationBaseFragment() {
private var _binding: FragmentHomeBinding? = null
private val binding get() = _binding!!

private val api by lazy { OpenFoodAPIClient(requireActivity()).rawAPI }
private val api by lazy { CommonApiManager.productsApi }
private val sharedPrefs by lazy { PreferenceManager.getDefaultSharedPreferences(requireActivity()) }

private var taglineURL: String? = null
Expand Down Expand Up @@ -218,4 +219,4 @@ class HomeFragment : NavigationBaseFragment() {
private const val PRODUCT_COUNT_KEY = "productCount"
fun newInstance() = HomeFragment().apply { arguments = Bundle() }
}
}
}
Expand Up @@ -15,6 +15,7 @@ import openfoodfacts.github.scrachx.openfood.features.product.edit.ProductEditAc
import openfoodfacts.github.scrachx.openfood.features.shared.BaseFragment
import openfoodfacts.github.scrachx.openfood.images.ImageNameJsonParser
import openfoodfacts.github.scrachx.openfood.models.ProductState
import openfoodfacts.github.scrachx.openfood.network.CommonApiManager
import openfoodfacts.github.scrachx.openfood.network.OpenFoodAPIClient
import openfoodfacts.github.scrachx.openfood.utils.requireProductState

Expand All @@ -41,7 +42,7 @@ class ProductPhotosFragment : BaseFragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val product = requireProductState().product!!
openFoodAPIClient.rawAPI
CommonApiManager.productsApi
.getProductImages(product.code)
.observeOn(AndroidSchedulers.mainThread())
.doOnError { Log.e(LOG_TAG, "Cannot download images from server", it) }
Expand Down Expand Up @@ -95,4 +96,4 @@ class ProductPhotosFragment : BaseFragment() {
}
}
}
}
}
Expand Up @@ -26,7 +26,6 @@ import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.rxkotlin.addTo
import openfoodfacts.github.scrachx.openfood.BuildConfig
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.customtabs.CustomTabActivityHelper
import openfoodfacts.github.scrachx.openfood.databinding.ActivityProductBrowsingListBinding
Expand Down Expand Up @@ -246,7 +245,7 @@ class ProductSearchActivity : BaseActivity() {
}
else -> error("No match case found for ${mSearchInfo.searchType}")
}
client = OpenFoodAPIClient(this@ProductSearchActivity, BuildConfig.OFWEBSITE)
client = OpenFoodAPIClient(this@ProductSearchActivity)
binding.progressBar.visibility = View.VISIBLE
reloadSearch()
}
Expand Down Expand Up @@ -568,4 +567,4 @@ class ProductSearchActivity : BaseActivity() {

private val LOG_TAG: String = this::class.simpleName!!
}
}
}
Expand Up @@ -51,32 +51,12 @@ import openfoodfacts.github.scrachx.openfood.features.product.view.ProductViewAc
/**
* API Client for all API callbacks
*/
class OpenFoodAPIClient @JvmOverloads constructor(
private val context: Context,
customEndpointUrl: String? = null
) {
class OpenFoodAPIClient(private val context: Context) {
private var historySyncDisp = CompositeDisposable()

/**
* @return This api service gets products of provided brand.
*/
val rawAPI: ProductsAPI by lazy {
if (customEndpointUrl == null) productsApi
else {
Retrofit.Builder()
.baseUrl(customEndpointUrl)
.client(defaultHttpClient)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(JacksonConverterFactory.create(jacksonObjectMapper()))
.addCallAdapterFactory(RxJava2CallAdapterFactory.createWithScheduler(Schedulers.io()))
.build()
.create(ProductsAPI::class.java)
}
}

fun getProductStateFull(barcode: String, customHeader: String = Utils.HEADER_USER_AGENT_SEARCH): Single<ProductState> {
AnalyticsService.setBarcode(barcode)
return rawAPI.getProductByBarcode(barcode, getAllFields(), getUserAgent(customHeader))
return productsApi.getProductByBarcode(barcode, getAllFields(), getUserAgent(customHeader))
}

private fun getAllFields(): String {
Expand All @@ -92,7 +72,7 @@ class OpenFoodAPIClient @JvmOverloads constructor(
return fieldsSet.joinToString(",")
}

fun productNotFoundDialogBuilder(activity: Activity, barcode: String): MaterialDialog.Builder =
private fun productNotFoundDialogBuilder(activity: Activity, barcode: String): MaterialDialog.Builder =
MaterialDialog.Builder(activity)
.title(R.string.txtDialogsTitle)
.content(R.string.txtDialogsContent)
Expand All @@ -119,7 +99,7 @@ class OpenFoodAPIClient @JvmOverloads constructor(
*context.resources.getStringArray(R.array.product_images_fields_array),
"product_name_${getLanguage(context)}"
).joinToString(",")
return rawAPI.getProductByBarcode(
return productsApi.getProductByBarcode(
barcode,
fields,
getUserAgent(Utils.HEADER_USER_AGENT_SEARCH)
Expand All @@ -135,7 +115,7 @@ class OpenFoodAPIClient @JvmOverloads constructor(
* @param activity
*/
fun openProduct(barcode: String, activity: Activity): Disposable =
rawAPI.getProductByBarcode(barcode, getAllFields(), getUserAgent(Utils.HEADER_USER_AGENT_SEARCH))
productsApi.getProductByBarcode(barcode, getAllFields(), getUserAgent(Utils.HEADER_USER_AGENT_SEARCH))
.doOnError {
if (it is IOException) {
Toast.makeText(activity, R.string.something_went_wrong, Toast.LENGTH_LONG).show()
Expand All @@ -159,14 +139,14 @@ class OpenFoodAPIClient @JvmOverloads constructor(


fun searchProductsByName(name: String, page: Int) =
rawAPI.searchProductByName(name, getFieldsToFetchFacets(), page)
productsApi.searchProductByName(name, getFieldsToFetchFacets(), page)

/**
* @param barcode
* @return a single containing a list of product ingredients (can be empty)
*/
// TODO: This or the field inside Product.kt?
fun getIngredients(barcode: String?) = rawAPI.getIngredientsByBarcode(barcode).map { productState ->
fun getIngredients(barcode: String?) = productsApi.getIngredientsByBarcode(barcode).map { productState ->
productState["product"][ApiFields.Keys.INGREDIENTS]?.map {
ProductIngredient(
it["id"].asText(),
Expand All @@ -177,7 +157,7 @@ class OpenFoodAPIClient @JvmOverloads constructor(
}

fun getProductsByCountry(country: String, page: Int) =
rawAPI.getProductsByCountry(country, page, getFieldsToFetchFacets())
productsApi.getProductsByCountry(country, page, getFieldsToFetchFacets())

/**
* Returns a map for images uploaded for product/ingredients/nutrition/other images
Expand Down Expand Up @@ -211,18 +191,18 @@ class OpenFoodAPIClient @JvmOverloads constructor(
}

fun getProductsByCategory(category: String, page: Int) =
rawAPI.getProductByCategory(category, page)
productsApi.getProductByCategory(category, page)

fun getProductsByLabel(label: String, page: Int) =
rawAPI.getProductsByLabel(label, page, getFieldsToFetchFacets())
productsApi.getProductsByLabel(label, page, getFieldsToFetchFacets())

/**
* Add a product to ScanHistory asynchronously
*/
fun addToHistory(product: Product) = Completable.fromAction { daoSession.historyProductDao.addToHistorySync(product) }

fun getProductsByContributor(contributor: String, page: Int) =
rawAPI.getProductsByContributor(contributor, page).subscribeOn(Schedulers.io())
productsApi.getProductsByContributor(contributor, page).subscribeOn(Schedulers.io())

/**
* upload images in offline mode
Expand All @@ -241,7 +221,7 @@ class OpenFoodAPIClient @JvmOverloads constructor(
return@mapNotNull null
}
val productImage = ProductImage(product.barcode, product.productField, imageFile)
return@mapNotNull rawAPI.saveImageSingle(getUploadableMap(productImage))
return@mapNotNull productsApi.saveImageSingle(getUploadableMap(productImage))
.flatMapCompletable { jsonNode: JsonNode? ->
if (jsonNode != null) {
Log.d("onResponse", jsonNode.toString())
Expand All @@ -262,10 +242,10 @@ class OpenFoodAPIClient @JvmOverloads constructor(
}.flatMapCompletable { Completable.merge(it) }

fun getProductsByPackaging(packaging: String, page: Int): Single<Search> =
rawAPI.getProductsByPackaging(packaging, page, getFieldsToFetchFacets())
productsApi.getProductsByPackaging(packaging, page, getFieldsToFetchFacets())

fun getProductsByStore(store: String, page: Int): Single<Search> =
rawAPI.getProductByStores(store, page, getFieldsToFetchFacets())
productsApi.getProductByStores(store, page, getFieldsToFetchFacets())

/**
* Search for products using bran name
Expand All @@ -274,10 +254,10 @@ class OpenFoodAPIClient @JvmOverloads constructor(
* @param page page numbers
*/
fun getProductsByBrand(brand: String, page: Int): Single<Search> =
rawAPI.getProductByBrands(brand, page, getFieldsToFetchFacets())
productsApi.getProductByBrands(brand, page, getFieldsToFetchFacets())

fun postImg(image: ProductImage, setAsDefault: Boolean = false): Completable {
return rawAPI.saveImageSingle(getUploadableMap(image))
return productsApi.saveImageSingle(getUploadableMap(image))
.flatMapCompletable { body: JsonNode ->
if (!body.isObject) {
throw IOException("body is not an object")
Expand Down Expand Up @@ -306,7 +286,7 @@ class OpenFoodAPIClient @JvmOverloads constructor(
IMG_ID to body["image"][IMG_ID].asText(),
"id" to body["imagefield"].asText()
)
return rawAPI.editImageSingle(image.barcode, addUserInfo(queryMap))
return productsApi.editImageSingle(image.barcode, addUserInfo(queryMap))
.flatMapCompletable { jsonNode: JsonNode ->
if ("status ok" == jsonNode[ApiFields.Keys.STATUS].asText()) {
return@flatMapCompletable Completable.complete()
Expand All @@ -316,7 +296,7 @@ class OpenFoodAPIClient @JvmOverloads constructor(
}
}

fun editImage(code: String, imgMap: MutableMap<String, String>) = rawAPI.editImages(code, addUserInfo(imgMap))
fun editImage(code: String, imgMap: MutableMap<String, String>) = productsApi.editImages(code, addUserInfo(imgMap))

/**
* Unselect the image from the product code.
Expand All @@ -325,17 +305,17 @@ class OpenFoodAPIClient @JvmOverloads constructor(
*/
fun unSelectImage(code: String, field: ProductImageField, language: String): Single<String> {
val imgMap = hashMapOf(IMAGE_STRING_ID to getImageStringKey(field, language))
return rawAPI.unSelectImage(code, addUserInfo(imgMap))
return productsApi.unSelectImage(code, addUserInfo(imgMap))
}

fun getProductsByOrigin(origin: String, page: Int) =
rawAPI.getProductsByOrigin(origin, page, getFieldsToFetchFacets())
productsApi.getProductsByOrigin(origin, page, getFieldsToFetchFacets())

fun syncOldHistory() {
val fields = "image_small_url,product_name,brands,quantity,image_url,nutrition_grade_fr,code"
historySyncDisp.clear()
daoSession.historyProductDao.loadAll().forEach { historyProduct ->
rawAPI.getProductByBarcode(historyProduct.barcode, fields, getUserAgent(Utils.HEADER_USER_AGENT_SEARCH))
productsApi.getProductByBarcode(historyProduct.barcode, fields, getUserAgent(Utils.HEADER_USER_AGENT_SEARCH))
.map { state ->
if (state.status != 0L) {
val product = state.product!!
Expand All @@ -361,10 +341,10 @@ class OpenFoodAPIClient @JvmOverloads constructor(
}

fun getInfoAddedIncompleteProductsSingle(contributor: String, page: Int) =
rawAPI.getInfoAddedIncompleteProductsSingle(contributor, page)
productsApi.getInfoAddedIncompleteProductsSingle(contributor, page)

fun getProductsByManufacturingPlace(manufacturingPlace: String, page: Int) =
rawAPI.getProductsByManufacturingPlace(manufacturingPlace, page, getFieldsToFetchFacets())
productsApi.getProductsByManufacturingPlace(manufacturingPlace, page, getFieldsToFetchFacets())

/**
* call API service to return products using Additives
Expand All @@ -373,25 +353,25 @@ class OpenFoodAPIClient @JvmOverloads constructor(
* @param page number of pages
*/
fun getProductsByAdditive(additive: String, page: Int) =
rawAPI.getProductsByAdditive(additive, page, getFieldsToFetchFacets())
productsApi.getProductsByAdditive(additive, page, getFieldsToFetchFacets())

fun getProductsByAllergen(allergen: String, page: Int) =
rawAPI.getProductsByAllergen(allergen, page, getFieldsToFetchFacets())
productsApi.getProductsByAllergen(allergen, page, getFieldsToFetchFacets())

fun getToBeCompletedProductsByContributor(contributor: String, page: Int) =
rawAPI.getToBeCompletedProductsByContributor(contributor, page)
productsApi.getToBeCompletedProductsByContributor(contributor, page)

fun getPicturesContributedProducts(contributor: String, page: Int) =
rawAPI.getPicturesContributedProducts(contributor, page)
productsApi.getPicturesContributedProducts(contributor, page)

fun getPicturesContributedIncompleteProducts(contributor: String?, page: Int) =
rawAPI.getPicturesContributedIncompleteProducts(contributor, page)
productsApi.getPicturesContributedIncompleteProducts(contributor, page)

fun getInfoAddedProducts(contributor: String?, page: Int) = rawAPI.getInfoAddedProducts(contributor, page)
fun getInfoAddedProducts(contributor: String?, page: Int) = productsApi.getInfoAddedProducts(contributor, page)

fun getIncompleteProducts(page: Int) = rawAPI.getIncompleteProducts(page, getFieldsToFetchFacets())
fun getIncompleteProducts(page: Int) = productsApi.getIncompleteProducts(page, getFieldsToFetchFacets())

fun getProductsByStates(state: String?, page: Int) = rawAPI.getProductsByState(state, page, getFieldsToFetchFacets())
fun getProductsByStates(state: String?, page: Int) = productsApi.getProductsByState(state, page, getFieldsToFetchFacets())

companion object {
const val MIME_TEXT = "text/plain"
Expand Down Expand Up @@ -490,4 +470,4 @@ class OpenFoodAPIClient @JvmOverloads constructor(
getLocaleProductNameField()
).joinToString(",")
}
}
}

0 comments on commit 0f23183

Please sign in to comment.