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 59538abc..d1709639 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -408,7 +408,7 @@ class Calculator { results.addStat(MINIMUM_NETRESULT, min) } maxDuration?.let { maxd -> - results.addStat(MAXIMUM_DURATION, maxd) + results.addStat(MAXIMUM_DURATION, maxd / 3600000) // (milliseconds to hours) } val bbPer100Hands = bbSum / totalHands * 100 diff --git a/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt b/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt index 961ede8f..de02cb45 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt @@ -29,12 +29,25 @@ enum class Comparator { LIMIT_TYPE, TABLE_SIZE, TOURNAMENT_TYPE, + TOURNAMENT_ENTRY_FEE, ; val queryConditions: List get() { return when (this) { - MONTH_OF_YEAR -> List(12) { index -> QueryCondition.MONTH().apply { setMonth(index) } } + TOURNAMENT_ENTRY_FEE -> { + val fees = arrayListOf() + val realm = Realm.getDefaultInstance() + val fieldName = Session.fieldNameForQueryType(QueryCondition.BETWEEN_TOURNAMENT_FEE()) + realm.where().distinct(fieldName).findAll().sort(fieldName, Sort.ASCENDING).map { + it.tournamentEntryFee?.let { fee -> + fees.add(QueryCondition.BETWEEN_TOURNAMENT_FEE().apply { between(fee, fee) }) + } + } + realm.close() + fees + } + MONTH_OF_YEAR -> List(12) { index -> QueryCondition.MONTH().apply { setMonth(index) } } DAY_OF_WEEK -> List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { setDay(index) } } YEAR -> { val years = arrayListOf() diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt index 9cc307e5..cf5dac46 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt @@ -29,6 +29,9 @@ sealed class QueryCondition(var operator: Operator? = null) { this.valueMap = mapOf("ids" to id) } + class MoreQueryCondition : QueryCondition(Operator.MORE) + class LessQueryCondition : QueryCondition(Operator.LESS) + companion object { fun valueOf(name:String) : QueryCondition { val kClass = Class.forName("${QueryCondition::class.qualifiedName}$$name").kotlin @@ -42,7 +45,10 @@ sealed class QueryCondition(var operator: Operator? = null) { enum class Operator { BETWEEN, MORE, - LESS; + LESS, + BETWEEN_RIGHT_EXCLUSIVE, + BETWEEN_LEFT_EXCLUSIVE, + ; } object LIVE : QueryCondition() @@ -98,7 +104,14 @@ sealed class QueryCondition(var operator: Operator? = null) { class BETWEEN_NUMBER_OF_PLAYER: QueryCondition(Operator.BETWEEN) class MORE_THAN_TOURNAMENT_FEE: QueryCondition(Operator.MORE) class LESS_THAN_TOURNAMENT_FEE: QueryCondition(Operator.LESS) - class BETWEEN_TOURNAMENT_FEE: QueryCondition(Operator.BETWEEN) + class BETWEEN_TOURNAMENT_FEE: QueryCondition(Operator.BETWEEN_RIGHT_EXCLUSIVE) { + fun between(leftValue:Double, rightValue:Double) { + this.valueMap = mapOf( + "leftValue" to leftValue, + "rightValue" to rightValue + ) + } + } class MIN_RE_BUY: QueryCondition(Operator.MORE) class MAX_RE_BUY: QueryCondition(Operator.LESS) @@ -198,6 +211,16 @@ sealed class QueryCondition(var operator: Operator? = null) { val rightValue: Double by valueMap return realmQuery.between(fieldName, leftValue, rightValue) } + Operator.BETWEEN_LEFT_EXCLUSIVE -> { + val leftValue: Double by valueMap + val rightValue: Double by valueMap + return realmQuery.greaterThan(fieldName, leftValue).and().lessThanOrEqualTo(fieldName, rightValue) + } + Operator.BETWEEN_RIGHT_EXCLUSIVE-> { + val leftValue: Double by valueMap + val rightValue: Double by valueMap + return realmQuery.greaterThanOrEqualTo(fieldName, leftValue).and().lessThan(fieldName, rightValue) + } } return when (this) { diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt index 028fff65..7c8d876c 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarDetailsFragment.kt @@ -173,19 +173,17 @@ class CalendarDetailsFragment : PokerAnalyticsFragment(), StaticRowRepresentable rowRepresentables.add(StatDoubleRow(computedResults.computedStat(Stat.LOCATIONS_PLAYED), computedResults.computedStat(Stat.LONGEST_STREAKS))) rowRepresentables.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.distribution)) rowRepresentables.add(GraphRow(report, Stat.NETRESULT)) - rowRepresentables.add(StatDoubleRow(computedResults.computedStat(Stat.WIN_RATIO))) + rowRepresentables.add(StatDoubleRow(computedResults.computedStat(Stat.WIN_RATIO), computedResults.computedStat(Stat.MAXIMUM_NETRESULT))) rowRepresentables.add(CustomizableRowRepresentable(RowViewType.HEADER_TITLE, resId = R.string.volume)) rowRepresentables.add(GraphRow(report, Stat.NETRESULT)) rowRepresentables.add(StatDoubleRow(computedResults.computedStat(Stat.DURATION), computedResults.computedStat(Stat.AVERAGE_DURATION))) - rowRepresentables.add(StatDoubleRow(computedResults.computedStat(Stat.DAYS_PLAYED))) + rowRepresentables.add(StatDoubleRow(computedResults.computedStat(Stat.DAYS_PLAYED), computedResults.computedStat(Stat.MAXIMUM_DURATION))) launch(Dispatchers.Main) { statsAdapter.notifyDataSetChanged() } } - } - } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt index 07174f6a..07fcb870 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/CalendarFragment.kt @@ -238,8 +238,11 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep else -> listOf(Comparator.YEAR, Comparator.MONTH_OF_YEAR).combined() } + val requiredStats: List = listOf(Stat.LOCATIONS_PLAYED, Stat.LONGEST_STREAKS, Stat.DAYS_PLAYED) + val options = Calculator.Options(evolutionValues = Calculator.Options.EvolutionValues.STANDARD, stats = requiredStats) monthConditions.forEach { conditions -> - val report = Calculator.computeStatsWithComparators(realm, conditions = conditions, options = Calculator.Options()) + + val report = Calculator.computeStatsWithComparators(realm, conditions = conditions, options = options) report.results.forEach { computedResults -> if (!computedResults.isEmpty) { // Set date data @@ -267,7 +270,7 @@ class CalendarFragment : SessionObserverFragment(), CoroutineScope, StaticRowRep } yearConditions.forEach { conditions -> - val report = Calculator.computeStatsWithComparators(realm, conditions = conditions, options = Calculator.Options()) + val report = Calculator.computeStatsWithComparators(realm, conditions = conditions, options = options) report.results.forEach { computedResults -> if (!computedResults.isEmpty) { // Set date data