Merge branch 'dev' of gitlab.com:stax-river/poker-analytics into dev

# Conflicts:
#	app/src/main/java/net/pokeranalytics/android/ui/activity/CalendarDetailsActivity.kt
feature/top10
Aurelien Hubert 7 years ago
commit 51d259675f
  1. 118
      app/src/main/java/net/pokeranalytics/android/model/comparison/Comparator.kt
  2. 43
      app/src/main/java/net/pokeranalytics/android/model/filter/QueryCondition.kt
  3. 5
      app/src/main/java/net/pokeranalytics/android/ui/activity/StatisticDetailsActivity.kt
  4. 14
      app/src/main/java/net/pokeranalytics/android/ui/fragment/GraphFragment.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticDetailsFragment.kt
  6. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatsFragment.kt

@ -7,25 +7,35 @@ import io.realm.kotlin.where
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.filter.Filterable
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.*
import java.util.*
import kotlin.collections.ArrayList
enum class Comparator {
DAY_OF_WEEK,
MONTH_OF_YEAR,
MONTH,
YEAR,
BLIND,
CASH,
TOURNAMENT,
LIVE,
ONLINE,
GAME,
BANKROLL,
LOCATION,
TOURNAMENT_FEATURE,
TOURNAMENT_NAME,
DAY_PERIOD,
LIMIT_TYPE,
TABLE_SIZE,
TOURNAMENT_TYPE,
;
val queryConditions: List<QueryCondition>
get() {
return when (this) {
MONTH_OF_YEAR -> List(12) { index -> QueryCondition.MONTH().apply { setMonth(index) } }
DAY_OF_WEEK -> listOf()
DAY_OF_WEEK -> List(7) { index -> QueryCondition.DAY_OF_WEEK().apply { setDay(index) } }
YEAR -> {
val years = arrayListOf<QueryCondition.YEAR>()
val calendar = Calendar.getInstance()
@ -40,10 +50,108 @@ enum class Comparator {
realm.close()
years
}
DAY_PERIOD -> listOf(QueryCondition.WEEK_DAY, QueryCondition.WEEK_END)
CASH -> listOf(QueryCondition.CASH)
TOURNAMENT -> listOf(QueryCondition.TOURNAMENT)
else -> throw PokerAnalyticsException.QueryTypeUnhandled
}
LIVE -> listOf(QueryCondition.LIVE)
ONLINE -> listOf(QueryCondition.ONLINE)
BLIND -> {
val blinds = arrayListOf<QueryCondition.BLIND>()
val realm = Realm.getDefaultInstance()
realm.where<Session>().distinct("blind", "bankroll.currency.code").findAll().sort("cgSmallBlind", Sort.ASCENDING).map {
it.blinds?.let { stake ->
blinds.add(QueryCondition.BLIND().apply { setBlind(stake, it.hasDefaultCurrency)})
}
}
realm.close()
blinds
}
GAME -> {
val objects = arrayListOf<QueryCondition.GAME>()
val realm = Realm.getDefaultInstance()
realm.where<Game>().findAll().forEach {
objects.add(QueryCondition.GAME().apply { setObjectId(it.id)})
}
realm.close()
objects
}
BANKROLL -> {
val objects = arrayListOf<QueryCondition.BANKROLL>()
val realm = Realm.getDefaultInstance()
realm.where<Bankroll>().findAll().forEach {
objects.add(QueryCondition.BANKROLL().apply { setObjectId(it.id)})
}
realm.close()
objects
}
LOCATION -> {
val objects = arrayListOf<QueryCondition.LOCATION>()
val realm = Realm.getDefaultInstance()
realm.where<Location>().findAll().forEach {
objects.add(QueryCondition.LOCATION().apply { setObjectId(it.id)})
}
realm.close()
objects
}
TOURNAMENT_NAME -> {
val objects = arrayListOf<QueryCondition.TOURNAMENT_NAME>()
val realm = Realm.getDefaultInstance()
realm.where<TournamentName>().findAll().forEach {
objects.add(QueryCondition.TOURNAMENT_NAME().apply { setObjectId(it.id)})
}
realm.close()
objects
}
TOURNAMENT_FEATURE -> {
val objects = arrayListOf<QueryCondition.ANY_TOURNAMENT_FEATURES>()
val realm = Realm.getDefaultInstance()
realm.where<TournamentFeature>().findAll().forEach {
objects.add(QueryCondition.ANY_TOURNAMENT_FEATURES().apply { setObjectId(it.id)})
}
realm.close()
objects
}
LIMIT_TYPE -> {
val limits = arrayListOf<QueryCondition.LIMIT>()
val realm = Realm.getDefaultInstance()
val distinctLimitTypes = realm.where<Session>().distinct("limit").findAll().sort("limit", Sort.ASCENDING)
distinctLimitTypes.forEach { session ->
session.limit?.let { limitType->
limits.add(QueryCondition.LIMIT().apply { setLimitType(limitType) })
}
}
realm.close()
limits
}
TABLE_SIZE -> {
val tableSizes = arrayListOf<QueryCondition.TABLE_SIZE>()
val realm = Realm.getDefaultInstance()
val distinctTableSizes =
realm.where<Session>().distinct("tableSize").findAll().sort("tableSize", Sort.ASCENDING)
distinctTableSizes.forEach { session ->
session.tableSize?.let { tableSize ->
tableSizes.add(QueryCondition.TABLE_SIZE().apply { setNumberOfPlayer(tableSize) })
}
}
realm.close()
tableSizes
}
TOURNAMENT_TYPE -> {
val tableSizes = arrayListOf<QueryCondition.TOURNAMENT_TYPE>()
val realm = Realm.getDefaultInstance()
val distinctTournamentTypes =
realm.where<Session>().distinct("tournamentType").findAll().sort("tournamentType", Sort.ASCENDING)
distinctTournamentTypes.forEach { session ->
session.tournamentType?.let { tournamentType ->
tableSizes.add(QueryCondition.TOURNAMENT_TYPE().apply { setTournamentType(tournamentType) })
}
}
realm.close()
tableSizes
}
else -> throw PokerAnalyticsException.QueryTypeUnhandled
}
}
}

@ -1,7 +1,10 @@
package net.pokeranalytics.android.model.filter
import io.realm.RealmQuery
import io.realm.internal.Table
import net.pokeranalytics.android.exceptions.PokerAnalyticsException
import net.pokeranalytics.android.model.Limit
import net.pokeranalytics.android.model.TableSize
import net.pokeranalytics.android.model.realm.FilterCondition
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.util.extensions.endOfDay
@ -22,6 +25,9 @@ fun List<QueryCondition>.name() : String {
sealed class QueryCondition(var operator: Operator? = null) {
abstract class QueryDataCondition : QueryCondition()
fun setObjectId(id:String) {
this.valueMap = mapOf("ids" to id)
}
companion object {
fun valueOf(name:String) : QueryCondition {
@ -49,10 +55,31 @@ sealed class QueryCondition(var operator: Operator? = null) {
class ANY_TOURNAMENT_FEATURES: QueryCondition()
class ALL_TOURNAMENT_FEATURES: QueryCondition()
class LOCATION: QueryCondition()
class LIMIT: QueryCondition()
class TABLE_SIZE: QueryCondition()
class TOURNAMENT_TYPE: QueryCondition()
class BLIND: QueryCondition()
class LIMIT: QueryCondition() {
fun setLimitType(limitType: Int) {
this.valueMap = mapOf("values" to limitType)
}
}
class TABLE_SIZE: QueryCondition() {
fun setNumberOfPlayer(numberOfPlayer: Int) {
this.valueMap = mapOf("values" to numberOfPlayer)
}
}
class TOURNAMENT_TYPE: QueryCondition() {
fun setTournamentType(tournamentType:Int) {
this.valueMap = mapOf("values" to tournamentType)
}
}
class BLIND: QueryCondition() {
fun setBlind(blind:String, hasDefaultCurrency:Boolean) {
this.valueMap = mapOf(
"blinds" to blind,
"hasDefaultCurrency" to hasDefaultCurrency)
}
}
class LAST_GAMES: QueryCondition()
class LAST_SESSIONS: QueryCondition()
class MORE_NUMBER_OF_TABLE: QueryCondition(Operator.MORE)
@ -80,7 +107,13 @@ sealed class QueryCondition(var operator: Operator? = null) {
class STARTED_TO_DATE: QueryCondition()
class ENDED_FROM_DATE: QueryCondition()
class ENDED_TO_DATE: QueryCondition()
class DAY_OF_WEEK: QueryCondition()
class DAY_OF_WEEK: QueryCondition() {
fun setDay(dayOfWeek:Int) {
this.valueMap = mapOf("dayOfWeek" to dayOfWeek)
}
}
class MONTH: QueryCondition() {
fun setMonth(month:Int) {
this.valueMap = mapOf("month" to month)

@ -4,6 +4,7 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.ComputableGroup
import net.pokeranalytics.android.calculus.Report
import net.pokeranalytics.android.calculus.Stat
import net.pokeranalytics.android.ui.activity.components.PokerAnalyticsActivity
@ -25,8 +26,8 @@ class StatisticDetailsActivity : PokerAnalyticsActivity() {
/**
* Default constructor
*/
fun newInstance(context: Context, stat: Stat, report: Report) {
parameters = GraphParameters(stat, report)
fun newInstance(context: Context, stat: Stat, group: ComputableGroup, report: Report) {
parameters = GraphParameters(stat, group, report)
val intent = Intent(context, StatisticDetailsActivity::class.java)
context.startActivity(intent)
}

@ -30,7 +30,7 @@ import java.text.DateFormat
import java.util.*
import kotlin.coroutines.CoroutineContext
class GraphParameters(var stat: Stat, var report: Report) {
class GraphParameters(var stat: Stat, var computableGroup: ComputableGroup, var report: Report) {
}
@ -40,8 +40,9 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co
private var stat: Stat = Stat.NETRESULT
private var reports: MutableMap<AggregationType, Report> = hashMapOf()
lateinit private var computableGroup: ComputableGroup
private var selectedReport: Report? = null
lateinit private var selectedReport: Report
lateinit var legendView: LegendView
lateinit var chartView: BarLineChartBase<*>
@ -55,8 +56,9 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co
}
fun setData(stat: Stat, report: Report) {
fun setData(stat: Stat, group: ComputableGroup, report: Report) {
this.stat = stat
this.computableGroup = group
this.aggregationTypes = stat.aggregationTypes
this.reports[this.aggregationTypes.first()] = report
@ -84,9 +86,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co
this.legendView = LegendView(requireContext())
this.legendContainer.addView(this.legendView)
this.selectedReport?.let {
this.loadGraph(it)
}
this.loadGraph(this.selectedReport)
this.aggregationTypes.forEach { type ->
val chip = Chip(requireContext())
@ -127,7 +127,7 @@ class GraphFragment : PokerAnalyticsFragment(), OnChartValueSelectedListener, Co
val realm = Realm.getDefaultInstance()
val aggregationType = stat.aggregationTypes.first()
// r = Calculator.computeStatsWithEvolutionByAggregationType(realm, computableGroup, aggregationType)
r = Calculator.computeStatsWithEvolutionByAggregationType(realm, computableGroup, aggregationType)
realm.close()

@ -61,7 +61,7 @@ class StatisticDetailsFragment : PokerAnalyticsFragment() {
fragmentTransaction.commit()
StatisticDetailsActivity.parameters?.let {
fragment.setData(it.stat, it.report)
fragment.setData(it.stat, it.computableGroup, it.report)
StatisticDetailsActivity.parameters = null
} ?: run {
throw Exception("Missing graph parameters")

@ -10,7 +10,6 @@ import kotlinx.android.synthetic.main.fragment_stats.*
import kotlinx.coroutines.*
import net.pokeranalytics.android.R
import net.pokeranalytics.android.calculus.*
import net.pokeranalytics.android.ui.view.rowrepresentable.StatRow
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.ui.activity.StatisticDetailsActivity
import net.pokeranalytics.android.ui.adapter.DisplayDescriptor
@ -20,6 +19,7 @@ import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource
import net.pokeranalytics.android.ui.fragment.components.SessionObserverFragment
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rowrepresentable.StatRow
import net.pokeranalytics.android.util.NULL_TEXT
import timber.log.Timber
import java.util.*
@ -245,14 +245,10 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
Timber.d(">>> start...")
val realm = Realm.getDefaultInstance()
// val options = Calculator.Options()
// options.evolutionValues = Calculator.Options.EvolutionValues.STANDARD
// options.displayedStats = listOf(stat)
val aggregationType = stat.aggregationTypes.first()
report = Calculator.computeStatsWithEvolutionByAggregationType(realm, computableGroup, aggregationType)
// report = Calculator.computeGroups(realm, listOf(computableGroup), options)
realm.close()
val e = Date()
@ -263,7 +259,7 @@ class StatsFragment : SessionObserverFragment(), StaticRowRepresentableDataSourc
test.await()
if (!isDetached) {
StatisticDetailsActivity.newInstance(requireContext(), stat, report)
StatisticDetailsActivity.newInstance(requireContext(), stat, computableGroup, report)
}
}

Loading…
Cancel
Save