handle ComputableResult when Currency's rate is modified

feature/top10
Razmig Sarkissian 7 years ago
parent 1cfd5c4b56
commit 36cb88dc53
  1. 27
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 47
      app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt
  3. 18
      app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt
  4. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/EditableDataFragment.kt

@ -19,22 +19,6 @@ import timber.log.Timber
class PokerAnalyticsApplication : Application() { class PokerAnalyticsApplication : Application() {
var sessions: RealmResults<Session>? = null
// private val listener: OrderedRealmCollectionChangeListener<RealmResults<Session>> =
// OrderedRealmCollectionChangeListener() { realmResults: RealmResults<Session>, changeSet: OrderedCollectionChangeSet ->
//
// if (changeSet == null) {
// return@OrderedRealmCollectionChangeListener
// }
//
// val realm: Realm = Realm.getDefaultInstance()
//
// val deletedSessions = realm.where(Session::class.java).`in`("id", changeSet.deletions.toTypedArray()).findAll()
// deletedSessions.forEach { it.cleanup() }
//
// }
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
@ -48,17 +32,6 @@ class PokerAnalyticsApplication : Application() {
.build() .build()
Realm.setDefaultConfiguration(realmConfiguration) Realm.setDefaultConfiguration(realmConfiguration)
val realm: Realm = Realm.getDefaultInstance()
// Add observer on session time frame changes
this.sessions = realm.where(Session::class.java).findAll() // monitor session deletions
// this.endedSessions?.addChangeListener { _, changeSet ->
/*
val deletedSessions =
realm.where(Session::class.java).`in`("id", changeSet.deletions.toTypedArray()).findAll()
deletedSessions.forEach { it.cleanup() }
*/
// }
if (BuildConfig.DEBUG) { if (BuildConfig.DEBUG) {
// Logs // Logs
Timber.plant(PokerAnalyticsLogs()) Timber.plant(PokerAnalyticsLogs())

@ -1,10 +1,10 @@
package net.pokeranalytics.android.model.realm package net.pokeranalytics.android.model.realm
import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.annotations.PrimaryKey import io.realm.annotations.PrimaryKey
import java.util.* import java.util.*
open class Currency : RealmObject() { open class Currency : RealmObject() {
@PrimaryKey @PrimaryKey
@ -18,32 +18,21 @@ open class Currency : RealmObject() {
/** /**
* The rate of the currency with the main currency * The rate of the currency with the main currency
*/ */
var rate: Double? = null var rate: Double? = 1.0
set(value) {
field = value fun refreshAllRelatedComputableResults(realm:Realm) {
val rate = this.rate ?: 1.0
val rate = value ?: 1.0 val query = realm.where(ComputableResult::class.java)
query.`in`("session.bankroll.currency.id", arrayOf(this.id))
// could be async? val cResults = query.findAll()
cResults.forEach { computable ->
if (this.isManaged && this.realm != null) { computable.session?.result?.net?.let {
computable.ratedNet = it * rate
val query = this.realm.where(ComputableResult::class.java) }
query.`in`("session.bankroll.currency.id", arrayOf(this.id)) computable.session?.result?.buyin?.let {
val cResults = query.findAll() computable.ratedBuyin = it * rate
}
cResults.forEach { computable ->
}
computable.session?.result?.net?.let { }
computable.ratedNet = it * rate
}
computable.session?.result?.buyin?.let {
computable.ratedBuyin = it * rate
}
}
}
}
} }

@ -44,6 +44,13 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
private var isRefreshingRate = false private var isRefreshingRate = false
private var lastRefreshRateCall = 0L private var lastRefreshRateCall = 0L
private val differentCurrency : Boolean
get() {
return bankroll.currency?.let { bankrollCurrency ->
bankrollCurrency.code != defaultCurrency.currencyCode
} ?: false
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState) super.onViewCreated(view, savedInstanceState)
@ -60,6 +67,9 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
data?.let { data?.let {
val currencyCode = it.getStringExtra(CurrenciesFragment.INTENT_CURRENCY_CODE) val currencyCode = it.getStringExtra(CurrenciesFragment.INTENT_CURRENCY_CODE)
onRowValueChanged(currencyCode, BankrollRow.CURRENCY) onRowValueChanged(currencyCode, BankrollRow.CURRENCY)
if (differentCurrency) {
refreshRate()
}
} }
} }
} }
@ -152,12 +162,6 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
rows.add(BankrollRow.LIVE) rows.add(BankrollRow.LIVE)
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency)) rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.currency))
rows.add(BankrollRow.CURRENCY) rows.add(BankrollRow.CURRENCY)
var differentCurrency = false
bankroll.currency?.let { bankrollCurrency ->
differentCurrency = bankrollCurrency.code != defaultCurrency.currencyCode
}
if (differentCurrency) { if (differentCurrency) {
rows.add(BankrollRow.RATE) rows.add(BankrollRow.RATE)
rows.add(BankrollRow.REFRESH_RATE) rows.add(BankrollRow.REFRESH_RATE)
@ -191,7 +195,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS
} }
lastRefreshRateCall = System.currentTimeMillis() lastRefreshRateCall = System.currentTimeMillis()
val currenciesConverterValue = "${defaultCurrency.currencyCode}_${bankroll?.currency?.code}" val currenciesConverterValue = "${defaultCurrency.currencyCode}_${bankroll.currency?.code}"
val call = CurrencyConverterApi.getApi(requireContext())?.convert(currenciesConverterValue) val call = CurrencyConverterApi.getApi(requireContext())?.convert(currenciesConverterValue)
call?.enqueue(object : retrofit2.Callback<Map<String, CurrencyConverterValue>> { call?.enqueue(object : retrofit2.Callback<Map<String, CurrencyConverterValue>> {

@ -14,6 +14,7 @@ import net.pokeranalytics.android.model.LiveData
import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.Manageable import net.pokeranalytics.android.model.interfaces.Manageable
import net.pokeranalytics.android.model.interfaces.Savable import net.pokeranalytics.android.model.interfaces.Savable
import net.pokeranalytics.android.model.realm.Bankroll
import net.pokeranalytics.android.ui.activity.EditableDataActivity import net.pokeranalytics.android.ui.activity.EditableDataActivity
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
@ -145,6 +146,10 @@ open class EditableDataFragment : PokerAnalyticsFragment(), RowRepresentableDele
this.getRealm().executeTransaction { this.getRealm().executeTransaction {
val item = it.copyToRealmOrUpdate(this.item) val item = it.copyToRealmOrUpdate(this.item)
if (item is Bankroll) {
item.currency?.refreshAllRelatedComputableResults(it)
}
val uniqueIdentifier = if (item is Identifiable) { val uniqueIdentifier = if (item is Identifiable) {
item.id item.id
} else "" } else ""

Loading…
Cancel
Save