Fetch all merchants from the webservice.
- Modified the method that fetches the merchants from the webservice to keep requesting the merchants list until nothing is returned, to make sure the whole list of merchants is obtained. - Modified the time the app waits to update the merchants and tellers list from 24 hours to just 3 hours.
This commit is contained in:
parent
d14c10c672
commit
0ae587a7aa
2 changed files with 34 additions and 21 deletions
|
@ -21,13 +21,27 @@ class MerchantRepository internal constructor(val context: Context) : retrofit2.
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private const val TAG = "MerchantRepository"
|
private const val TAG = "MerchantRepository"
|
||||||
|
|
||||||
|
private const val MERCHANTS_QUERY_LIMIT = 50
|
||||||
}
|
}
|
||||||
|
|
||||||
private val mMerchantDao: MerchantDao
|
private val mMerchantDao: MerchantDao
|
||||||
|
|
||||||
|
private val merchantsList = mutableListOf<Merchant>()
|
||||||
|
private var merchantsSkip = 0
|
||||||
|
|
||||||
|
private val bitsyWebservice: BitsyWebservice
|
||||||
|
|
||||||
init {
|
init {
|
||||||
val db = BitsyDatabase.getDatabase(context)
|
val db = BitsyDatabase.getDatabase(context)
|
||||||
mMerchantDao = db!!.merchantDao()
|
mMerchantDao = db!!.merchantDao()
|
||||||
|
|
||||||
|
val retrofit = Retrofit.Builder()
|
||||||
|
.baseUrl(Constants.BITSY_WEBSERVICE_URL)
|
||||||
|
.addConverterFactory(GsonConverterFactory.create())
|
||||||
|
.build()
|
||||||
|
|
||||||
|
bitsyWebservice = retrofit.create<BitsyWebservice>(BitsyWebservice::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns a LiveData object directly from the database while the response from the WebService is obtained. */
|
/** Returns a LiveData object directly from the database while the response from the WebService is obtained. */
|
||||||
|
@ -45,15 +59,8 @@ class MerchantRepository internal constructor(val context: Context) : retrofit2.
|
||||||
|
|
||||||
if (lastMerchantUpdate + Constants.MERCHANTS_UPDATE_PERIOD < now) {
|
if (lastMerchantUpdate + Constants.MERCHANTS_UPDATE_PERIOD < now) {
|
||||||
Log.d(TAG, "Updating merchants from webservice")
|
Log.d(TAG, "Updating merchants from webservice")
|
||||||
// TODO make sure it works when there are more merchants than those sent back in the first response
|
val request = bitsyWebservice.getMerchants(merchantsSkip, MERCHANTS_QUERY_LIMIT)
|
||||||
val retrofit = Retrofit.Builder()
|
request.enqueue(this)
|
||||||
.baseUrl(Constants.BITSY_WEBSERVICE_URL)
|
|
||||||
.addConverterFactory(GsonConverterFactory.create())
|
|
||||||
.build()
|
|
||||||
|
|
||||||
val bitsyWebservice = retrofit.create<BitsyWebservice>(BitsyWebservice::class.java)
|
|
||||||
val call = bitsyWebservice.getMerchants(0)
|
|
||||||
call.enqueue(this)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,23 +68,29 @@ class MerchantRepository internal constructor(val context: Context) : retrofit2.
|
||||||
if (response.isSuccessful) {
|
if (response.isSuccessful) {
|
||||||
val res: FeathersResponse<Merchant>? = response.body()
|
val res: FeathersResponse<Merchant>? = response.body()
|
||||||
val merchants = res?.data ?: return
|
val merchants = res?.data ?: return
|
||||||
insertAllAsyncTask(mMerchantDao).execute(merchants)
|
|
||||||
|
if (merchants.isNotEmpty()) {
|
||||||
|
merchantsList.addAll(merchants)
|
||||||
|
merchantsSkip += MERCHANTS_QUERY_LIMIT
|
||||||
|
|
||||||
|
val request = bitsyWebservice.getMerchants(merchantsSkip, MERCHANTS_QUERY_LIMIT)
|
||||||
|
request.enqueue(this)
|
||||||
|
} else {
|
||||||
|
updateMerchants(merchantsList)
|
||||||
|
|
||||||
val now = System.currentTimeMillis()
|
val now = System.currentTimeMillis()
|
||||||
PreferenceManager.getDefaultSharedPreferences(context).edit()
|
PreferenceManager.getDefaultSharedPreferences(context).edit()
|
||||||
.putLong(Constants.KEY_MERCHANTS_LAST_UPDATE, now).apply()
|
.putLong(Constants.KEY_MERCHANTS_LAST_UPDATE, now).apply()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onFailure(call: Call<FeathersResponse<Merchant>>, t: Throwable) { /* Do nothing */ }
|
override fun onFailure(call: Call<FeathersResponse<Merchant>>, t: Throwable) { /* Do nothing */ }
|
||||||
|
|
||||||
private class insertAllAsyncTask internal constructor(private val mAsyncTaskDao: MerchantDao) :
|
private fun updateMerchants(merchants: List<Merchant>) {
|
||||||
AsyncTask<List<Merchant>, Void, Void>() {
|
AsyncTask.execute {
|
||||||
|
mMerchantDao.deleteAll()
|
||||||
override fun doInBackground(vararg merchants: List<Merchant>): Void? {
|
mMerchantDao.insertAll(merchants)
|
||||||
mAsyncTaskDao.deleteAll()
|
|
||||||
mAsyncTaskDao.insertAll(merchants[0])
|
|
||||||
return null
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ object Constants {
|
||||||
const val KEY_TELLERS_LAST_UPDATE = "key_tellers_last_update"
|
const val KEY_TELLERS_LAST_UPDATE = "key_tellers_last_update"
|
||||||
|
|
||||||
/** Constant used to decide whether or not to update the tellers and merchants info from the webservice */
|
/** Constant used to decide whether or not to update the tellers and merchants info from the webservice */
|
||||||
const val MERCHANTS_UPDATE_PERIOD = 1000L * 60 * 60 + 24 // 1 day
|
const val MERCHANTS_UPDATE_PERIOD = 1000L * 60 * 60 + 3 // 3 hours
|
||||||
|
|
||||||
/** Name of the external storage folder used to save files like PDF and CSV exports and Backups **/
|
/** Name of the external storage folder used to save files like PDF and CSV exports and Backups **/
|
||||||
const val EXTERNAL_STORAGE_FOLDER = "BiTSy"
|
const val EXTERNAL_STORAGE_FOLDER = "BiTSy"
|
||||||
|
|
Loading…
Reference in a new issue