diff --git a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt index 4310be90..9a81fd99 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/Criteria.kt @@ -68,21 +68,21 @@ sealed class Criteria { } abstract class ListCriteria : Criteria() { - inline fun , reified S:Any> comparison(): List { - QueryCondition.distinct()?.let { + inline fun , reified S:Comparable> comparison(): List { + QueryCondition.distinct()?.let { val values = it.mapNotNull { session -> when (this) { is Limits -> if (session.limit is S) { session.limit as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue is TournamentTypes -> if (session.tournamentType is S) { session.tournamentType as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue is TableSizes -> if (session.tableSize is S) { session.tableSize as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue - is TournamentFees -> if (session.tournamentEntryFee is S) { session.tournamentEntryFee as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue + is TournamentFees -> if (session.tournamentEntryFee is S) { session.tournamentEntryFee as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue is Blinds -> if (session.blinds is S) { session.blinds as S } else throw PokerAnalyticsException.QueryValueMapUnexpectedValue else -> null } - } - return compareList(values = values) + }.distinct() + return compareList(values = values).sorted() } - return listOf().sorted() + return listOf() } } diff --git a/app/src/main/java/net/pokeranalytics/android/model/TournamentType.kt b/app/src/main/java/net/pokeranalytics/android/model/TournamentType.kt index c06cfed4..64a22295 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/TournamentType.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/TournamentType.kt @@ -23,5 +23,12 @@ enum class TournamentType : RowRepresentable { } } + override fun getDisplayName(): String { + return when (this) { + MTT -> "MTT" + SNG -> "SNG" + } + } + override val viewType: Int = RowViewType.TITLE.ordinal } \ No newline at end of file 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 452aa01d..e589a850 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 @@ -15,8 +15,10 @@ import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.ui.view.rowrepresentable.FilterElementRow import net.pokeranalytics.android.ui.view.rowrepresentable.FilterSectionRow import net.pokeranalytics.android.util.NULL_TEXT +import net.pokeranalytics.android.util.UserDefaults import net.pokeranalytics.android.util.extensions.endOfDay import net.pokeranalytics.android.util.extensions.startOfDay +import net.pokeranalytics.android.util.extensions.toCurrency import java.text.DateFormatSymbols import java.util.* import kotlin.collections.ArrayList @@ -45,10 +47,10 @@ inline fun List.queryWith(query: RealmQ sealed class QueryCondition : FilterElementRow { companion object { - fun valueOf(name:String) : QueryCondition { + fun valueOf(name:String) : T { val kClass = Class.forName("${QueryCondition::class.qualifiedName}$$name").kotlin val instance = kClass.objectInstance ?: kClass.java.newInstance() - return instance as QueryCondition + return instance as T } inline fun getInstance(): QueryCondition { @@ -62,10 +64,15 @@ sealed class QueryCondition : FilterElementRow { } } - inline fun < reified T: Filterable, reified S: QueryCondition>distinct(): RealmResults? { + inline fun < reified T: Filterable, reified S: QueryCondition, reified U:Comparable>distinct(): RealmResults? { FilterHelper.fieldNameForQueryType(S::class.java)?.let { val realm = Realm.getDefaultInstance() - val distincts = realm.where().distinct(it).findAll().sort(it, Sort.ASCENDING) + + val distincts = when (T::class) { + String::class, Int::class -> realm.where().distinct(it).findAll().sort(it, Sort.ASCENDING) + else -> realm.where().isNotNull(it).findAll().sort(it, Sort.ASCENDING) + } + realm.close() return distincts } @@ -133,7 +140,7 @@ sealed class QueryCondition : FilterElementRow { return when (this) { is StaticDataQueryCondition -> label() is QueryDataCondition<*> -> label() - is AnyBlind -> label() + is ListOfValueQueryCondition<*> -> label() else -> baseId } } @@ -332,9 +339,9 @@ sealed class QueryCondition : FilterElementRow { object DuringThisMonth: QueryCondition() object DuringThisYear: QueryCondition() - object TournamentFee: ListOfValueQueryCondition() { + class TournamentFee: ListOfValueQueryCondition() { override fun labelForValue(value: Double): String { - return "$value" + return value.toCurrency(UserDefaults.currency) } } @@ -374,7 +381,7 @@ sealed class QueryCondition : FilterElementRow { realmQuery } is AnyBlind -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) - is TournamentFee -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) + is TournamentFee -> realmQuery.equalTo(fieldName, listOfValues.first()) is QueryDataCondition<*> -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) is StaticDataQueryCondition -> realmQuery.`in`(fieldName, listOfValues.toTypedArray()) is DateQuery -> { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt index bd58a593..304df00c 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/FilterCondition.kt @@ -35,7 +35,7 @@ open class FilterCondition() : RealmObject() { var sectionName: String? = null val queryCondition : QueryCondition - get() = QueryCondition.valueOf(this.filterName ?: throw PokerAnalyticsException.FilterElementUnknownName) + get() = QueryCondition.valueOf(this.filterName ?: throw PokerAnalyticsException.FilterElementUnknownName) .apply { this.updateValueMap(this@FilterCondition) }