diff --git a/app/src/androidTest/java/net/pokeranalytics/android/RealmInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/RealmInstrumentedUnitTest.kt index d19327fd..45faaaef 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/RealmInstrumentedUnitTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/RealmInstrumentedUnitTest.kt @@ -18,7 +18,8 @@ open class RealmInstrumentedUnitTest { fun newSessionInstance(realm: Realm) : Session { val session = realm.createObject(Session::class.java, UUID.randomUUID().toString()) - session.computableResult = realm.createObject(ComputableResult::class.java) + val computableResult = realm.createObject(ComputableResult::class.java) + computableResult.session = session session.result = realm.createObject(Result::class.java) return session } diff --git a/app/src/androidTest/java/net/pokeranalytics/android/filter/SessionFilterInstrumentedUnitTest.kt b/app/src/androidTest/java/net/pokeranalytics/android/filter/SessionFilterInstrumentedUnitTest.kt index f7a94cb4..fd53269d 100644 --- a/app/src/androidTest/java/net/pokeranalytics/android/filter/SessionFilterInstrumentedUnitTest.kt +++ b/app/src/androidTest/java/net/pokeranalytics/android/filter/SessionFilterInstrumentedUnitTest.kt @@ -541,7 +541,7 @@ class SessionFilterInstrumentedUnitTest : BaseFilterInstrumentedUnitTest() { realm.beginTransaction() val s1 = Session.testInstance(netResult = 200.0) Session.testInstance(netResult = 500.0) - val s2 = Session.testInstance(netResult = 50.0) + Session.testInstance(netResult = 50.0) Session.testInstance(netResult = 570.0) realm.commitTransaction() diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt index 7458503e..638c7cb5 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -58,10 +58,10 @@ class Calculator { companion object { - fun computePreAggregation(sets: List, options: Options): List { - Timber.d("sets = ${sets.size}") - return listOf() - } +// fun computePreAggregation(sets: List, options: Options): List { +// Timber.d("sets = ${sets.size}") +// return listOf() +// } /** * Computes all stats for list of Session sessionGroup @@ -168,6 +168,9 @@ class Calculator { } } + else -> { + // nothing + } } val sessionSets = computableGroup.sets @@ -190,8 +193,8 @@ class Calculator { var tSum = 0.0 var tTotalHands = 0.0 var tBBSum = 0.0 - var tHourlyRate = 0.0 - var tHourlyRateBB = 0.0 + var tHourlyRate: Double = 0.0 + var tHourlyRateBB: Double = 0.0 sessionSets.forEach { sessionSet -> tIndex++ @@ -219,6 +222,9 @@ class Calculator { } } } + else -> { + // nothing + } } var average = 0.0 diff --git a/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt b/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt index 2f333f23..3a126a68 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollCalculator.kt @@ -18,14 +18,14 @@ class BankrollCalculator { if (setup.bankroll != null) { sessionQuery.equalTo("bankroll.id", setup.bankroll.id) } - val sessions = sessionQuery.findAll() +// val sessions = sessionQuery.findAll() val transactionQuery = realm.where(Transaction::class.java) if (setup.bankroll != null) { transactionQuery.equalTo("bankroll.id", setup.bankroll.id).findAll() } val transactions = transactionQuery.findAll() - val sessionsNet = sessions.sum("result.net") +// val sessionsNet = sessions.sum("result.net") val transactionsNet = transactions.sum("value") transactions.forEach { diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/SessionFilterable.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/SessionFilterable.kt index d1ceef6a..472a0bdc 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/SessionFilterable.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/SessionFilterable.kt @@ -55,7 +55,7 @@ enum class SessionFilterable(private var fieldName:String? = null, private var s SMALL_BLIND("cgSmallBlind"), COMMENT("comment"), TOURNAMENT_FEATURES("tournamentFeatures.id"), - NET_RESULT("result.ratedNet"), + NET_RESULT("computableResult.ratedNet"), BUY_IN("result.buyin"), CASH_OUT("result.cashout"), TIPS("result.tips"), diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt index a9d2092f..276f3a47 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/ComputableResult.kt @@ -1,9 +1,6 @@ package net.pokeranalytics.android.model.realm import io.realm.RealmObject -import io.realm.RealmResults -import io.realm.annotations.Ignore -import io.realm.annotations.LinkingObjects import net.pokeranalytics.android.calculus.interfaces.Computable open class ComputableResult : RealmObject(), Computable { @@ -24,11 +21,11 @@ open class ComputableResult : RealmObject(), Computable { override var sessionSet: SessionSet? = null - @LinkingObjects("computableResult") - private val sessions: RealmResults? = null +// @LinkingObjects("computableResult") +// private val sessions: RealmResults? = null - @Ignore - val session: Session? = this.sessions?.firstOrNull() +// @Ignore + var session: Session? = null fun updateWith(session: Session) { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt index 9f4d8b65..5f18c933 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt @@ -27,7 +27,7 @@ open class Currency : RealmObject() { // could be async val query = this.realm.where(ComputableResult::class.java) - query.`in`("sessions.bankroll.currency.id", arrayOf(this.id)) + query.`in`("session.bankroll.currency.id", arrayOf(this.id)) val cResults = query.findAll() cResults.forEach { computable -> diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index ebe070ed..ae91e05c 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -4,8 +4,10 @@ import android.content.Context import io.realm.Realm import io.realm.RealmList import io.realm.RealmObject +import io.realm.RealmResults import io.realm.annotations.Ignore import io.realm.annotations.Index +import io.realm.annotations.LinkingObjects import io.realm.annotations.PrimaryKey import io.realm.kotlin.where import net.pokeranalytics.android.R @@ -61,7 +63,10 @@ open class Session : RealmObject(), Manageable, StaticRowRepresentableDataSource fun newInstance(realm: Realm, isTournament: Boolean, bankroll: Bankroll? = null): Session { val session = Session() session.result = Result() - session.computableResult = ComputableResult() + + val computableResult = ComputableResult() + computableResult.session = session + if (bankroll != null) { session.bankroll = bankroll } else { @@ -78,6 +83,7 @@ open class Session : RealmObject(), Manageable, StaticRowRepresentableDataSource /** * Indicates the type of session, cash game or tournament */ + @Index var type: Int = Type.CASH_GAME.ordinal // The result of the main user @@ -86,7 +92,13 @@ open class Session : RealmObject(), Manageable, StaticRowRepresentableDataSource /** * Optimized result for faster stats */ - var computableResult: ComputableResult? = null +// var computableResult: ComputableResult? = null + + @LinkingObjects("session") + private val computableResults: RealmResults? = null + + @Ignore + val computableResult: ComputableResult? = this.computableResults?.firstOrNull() // Timed interface @@ -293,10 +305,11 @@ open class Session : RealmObject(), Manageable, StaticRowRepresentableDataSource } fun updateComputableResult() { - this.computableResult?.let { + + this.computableResults?.forEach { it.updateWith(this) } ?: run { - throw IllegalStateException("Session should always have a Light Result") + throw IllegalStateException("Session should always have a computable results") } } @@ -497,6 +510,7 @@ open class Session : RealmObject(), Manageable, StaticRowRepresentableDataSource // cleanup unnecessary related objects set.deleteFromRealm() this.result?.deleteFromRealm() + this.computableResults?.deleteAllFromRealm() // Updates the timeline SessionSetManager.removeFromTimeline(this) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt index 3acab070..f569614c 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt @@ -57,7 +57,7 @@ open class SessionSet : RealmObject(), Timed { } fun computeStats() { - this.ratedNet = this.sessions?.sumByDouble { it.computableResult!!.ratedNet } ?: 0.0 + this.ratedNet = this.sessions?.sumByDouble { it.computableResult?.ratedNet ?: 0.0 } ?: 0.0 this.estimatedHands = this.sessions?.sumByDouble { it.estimatedHands } ?: 0.0 this.bbNetResult = this.sessions?.sumByDouble { it.bbNetResult } ?: 0.0 } diff --git a/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt b/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt index 6f59a315..66b4b000 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt @@ -125,9 +125,9 @@ class SessionSetManager { session.sessionSet = set // Add all orphan endedSessions - sessions.forEach { session -> - session.sessionSet = set - set.breakDuration = max(set.breakDuration, session.breakDuration) + sessions.forEach { s -> + s.sessionSet = set + set.breakDuration = max(set.breakDuration, s.breakDuration) } set.computeStats() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt index 56084034..934317e7 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt @@ -152,7 +152,7 @@ class HomeActivity : PokerAnalyticsActivity() { } } - .setNegativeButton(R.string.cancel) {dialog, which -> + .setNegativeButton(R.string.cancel) { _, which -> Timber.d("Click on cancel") } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt index 446039ed..6b108640 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/BankrollDataFragment.kt @@ -111,7 +111,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS override fun onRowSelected(position: Int, row: RowRepresentable, fromAction: Boolean) { when (row) { - BankrollRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@BankrollDataFragment, BankrollDataFragment.REQUEST_CODE_CURRENCY) + BankrollRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@BankrollDataFragment, REQUEST_CODE_CURRENCY) BankrollRow.REFRESH_RATE -> refreshRate() else -> super.onRowSelected(position, row, fromAction) } @@ -197,7 +197,7 @@ class BankrollDataFragment : EditableDataFragment(), StaticRowRepresentableDataS override fun onResponse(call: Call>, response: Response>) { response.body()?.let { - it[currenciesConverterValue]?.value?.let {rate -> + it[currenciesConverterValue]?.value?.let { rate -> onRowValueChanged(rate.toString(), BankrollRow.RATE) } } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt index 8f6a5f86..e8faee6c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt @@ -166,25 +166,16 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc val s = Date() - val allSessions = realm.where(ComputableResult::class.java).isNotNull("sessions.endDate").findAll() + val allSessions = realm.where(ComputableResult::class.java).isNotNull("session.endDate").findAll() val allSessionSets = realm.where(SessionSet::class.java).findAll() Timber.d(">>>>> number of computables to compute = ${allSessions.size}") - val cgSessions = allSessions.where().equalTo("sessions.type", Session.Type.CASH_GAME.ordinal).findAll() + val cgSessions = allSessions.where().equalTo("session.type", Session.Type.CASH_GAME.ordinal).findAll() val cgSessionSets = realm.where(SessionSet::class.java).equalTo("sessions.type", Session.Type.CASH_GAME.ordinal).findAll() - val tSessions = allSessions.where().equalTo("sessions.type", Session.Type.TOURNAMENT.ordinal).findAll() + val tSessions = allSessions.where().equalTo("session.type", Session.Type.TOURNAMENT.ordinal).findAll() val tSessionSets = realm.where(SessionSet::class.java).equalTo("sessions.type", Session.Type.TOURNAMENT.ordinal).findAll() -// val computableList = realm.copyFromRealm(allSessions) - -// computableList.forEach { session -> -// if (true) { // @todo -// cgSessions.add(session) -// } else { -// tSessions.add(session) -// } -// } val e = Date() val duration = (e.time - s.time) / 1000.0 Timber.d(">>> filtering in ${duration} seconds") diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt index 2f5b288d..ffa166be 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/SessionObserverFragment.kt @@ -10,7 +10,7 @@ open class SessionObserverFragment : PokerAnalyticsFragment() { init { val realm = Realm.getDefaultInstance() - this.endedSessions = realm.where(ComputableResult::class.java).isNotNull("sessions.endDate").findAll() + this.endedSessions = realm.where(ComputableResult::class.java).isNotNull("session.endDate").findAll() this.endedSessions.addChangeListener { _, _ -> this.sessionsChanged() } diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt index 257c5166..38014ea2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetDoubleEditTextFragment.kt @@ -88,7 +88,7 @@ class BottomSheetDoubleEditTextFragment : BottomSheetFragment() { } - editText2.setOnEditorActionListener { v, actionId, _ -> + editText2.setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_DONE) { this.delegate.onRowValueChanged(values, row) dismiss() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt index 4e8933d0..66986615 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetEditTextFragment.kt @@ -53,7 +53,7 @@ class BottomSheetEditTextFragment : BottomSheetFragment() { editText1.addTextChangedListener { value = it?.toString() ?: "" } editText1.setText((data[0].defaultValue ?: "").toString()) - editText1.setOnEditorActionListener { v, actionId, _ -> + editText1.setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_DONE) { delegate.onRowValueChanged(getValue(), row) dismiss() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt index 58f1ff3e..81684a46 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/components/bottomsheet/BottomSheetSumFragment.kt @@ -117,7 +117,7 @@ class BottomSheetSumFragment : BottomSheetFragment() { } } - editText2.setOnEditorActionListener { v, actionId, _ -> + editText2.setOnEditorActionListener { _, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_DONE) { this.delegate.onRowValueChanged(value, row) dismiss() diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt index af5d5f88..d1654104 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterCategoryRow.kt @@ -4,6 +4,32 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType + +/* +enum class FilterCategoryRow(override val resId: Int?, val subCategories:Array, override val viewType: Int = RowViewType.TITLE_VALUE_ARROW.ordinal) : RowRepresentable { + GENERAL(R.string.general, GeneralSubCategory.values()), + DATE, + DURATION, + SESSION, + CASH, + TOURNAMENT, + ONLINE, + RESULT, + TRANSACTION_TYPES, + + // Title Custom fields + LOCATION, + BANKROLL, + PLAYERS; + + private enum class GeneralSubCategory(val category : FilterCategoryRow = GENERAL): RowRepresentable { + CASH_TOURNAMENT, + LIVE_ONLINE, + GAME, + LIMIT_TYPE, + TABLE_SIZE, + } + */ enum class FilterCategoryRow : RowRepresentable { GENERAL, diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt index 598455db..b28aa705 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterRow.kt @@ -6,6 +6,34 @@ import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.RowViewType +/* + +sealed class FilterElement : RowRepresentable { + class Cash : FilterElement() + class Tournament : FilterElement() + data class Game(val game: net.pokeranalytics.android.model.realm.Game) : FilterElement() + + + var value : Any? = null + + override val resId: Int? + get() { + return when (this) { + is Cash -> R.string.cash_game + is Tournament -> R.string.tournament + else -> null + } + } + + override val viewType: Int + get() { + return when (this) { + else -> RowViewType.TITLE_CHECK.ordinal + } + } + +} + */ enum class FilterRow : RowRepresentable { // General diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt index 579a5988..b04e7469 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/FilterSubcategoryRow.kt @@ -15,7 +15,14 @@ import java.text.DateFormatSymbols import java.util.* import kotlin.collections.ArrayList - +/* + GAME -> { + val games = realm.copyFromRealm(LiveData.GAME.items(realm) as RealmResults) + games.forEach { + rows.add(FilterElement.Game(game = it)) + } + } + */ enum class FilterSubcategoryRow : RowRepresentable { // General