diff --git a/app/src/main/java/net/pokeranalytics/android/model/filter/FilterComponent.kt b/app/src/main/java/net/pokeranalytics/android/model/filter/FilterComponent.kt index 4f5a6b69..bd727baf 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/filter/FilterComponent.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/filter/FilterComponent.kt @@ -5,6 +5,9 @@ import io.realm.RealmObject import io.realm.RealmQuery import io.realm.RealmResults import net.pokeranalytics.android.model.realm.Session +import com.google.android.libraries.places.internal.`in` +import java.util.* + enum class FilterComponent { @@ -14,15 +17,91 @@ enum class SessionFilterable(var fieldName:String? = null) : Filterable { LIVE("bankroll.live"), CASH("type"), ONLINE, - TOURNAMENT + TOURNAMENT, + BANKROLL("bankroll.id"), + GAME("game.id"), + LIMIT("limit"), + TABLE_SIZE("tableSize"), + LOCATION("location.id"), + NUMBEROFTABLE("numberOfTable"), + COMMENT("comment"), + TOURNAMENT_TYPE("tournamentType"), + TOURNAMENT_NAME("tournamentName.id"), + TOURNAMENT_FEATURES("tournamentFeature.id"), + TOURNAMENT_NUMBER_OF_PLAYER("tournamentNumberOfPlayers"), + TOURNAMENT_ENTRY_FEE("tournamentEntryFee"), + RESULT_BUYIN("result.buyin"), + RESULT_CASHED_OUT("result.cashout"), + RESULT_NET("result.ratedNet"), + RESULT_TIPS("result.tips"), + STARTED_FROM_DATE, + STARTED_TO_DATE, + ENDED_FROM_DATE, + ENDED_TO_DATE, + BLINDS, ; + private enum class Field(var fieldName:String? = null) { + START_DATE("startDate"), + END_DATE("endDate"), + CURRENCY("bankroll.currency.code"), + BIG_BLIND("cgBigBlind"), + SMALL_BLIND("cgSmallBlind"); + } + + var valueMap : Map? = null + override fun filter(realmQuery: RealmQuery<*>): RealmQuery { return when (this) { - LIVE -> realmQuery.equalTo(this.fieldName, true) as RealmQuery - CASH -> realmQuery.equalTo(this.fieldName, Session.Type.CASH_GAME.ordinal) as RealmQuery + LIVE -> realmQuery.equalTo(this.fieldName, true) + CASH -> realmQuery.equalTo(this.fieldName, Session.Type.CASH_GAME.ordinal) ONLINE -> LIVE.filter(realmQuery.not()) TOURNAMENT -> CASH.filter(realmQuery.not()) - } + BANKROLL -> { + val ids : Array by valueMap + realmQuery.`in`(this.fieldName, ids) + } + STARTED_FROM_DATE -> { + val date : Date by valueMap + this.filter(realmQuery.greaterThanOrEqualTo(Field.START_DATE.fieldName, date)) + } + STARTED_TO_DATE -> { + val date : Date by valueMap + this.filter(realmQuery.lessThanOrEqualTo(Field.START_DATE.fieldName, date)) + } + ENDED_FROM_DATE -> { + val date : Date by valueMap + this.filter(realmQuery.greaterThanOrEqualTo(Field.END_DATE.fieldName, date)) + } + ENDED_TO_DATE -> { + val date : Date by valueMap + this.filter(realmQuery.lessThanOrEqualTo(Field.END_DATE.fieldName, date)) + } + + BLINDS -> { + val map : Array> by valueMap + var finalQuery = realmQuery + map.forEach { + val sb : Double by it + val bb : Double by it + val code : String by it + + finalQuery = finalQuery + .beginGroup() + .equalTo(Field.SMALL_BLIND.fieldName, sb) + .and() + .equalTo(Field.BIG_BLIND.fieldName, bb) + .and() + .equalTo(Field.CURRENCY.fieldName, code) + .endGroup() + + if (map.last() != it) { + finalQuery = finalQuery.or() + } + } + finalQuery + } + else -> realmQuery + } as RealmQuery } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt index 5ea620d6..1af59a04 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HistoryFragment.kt @@ -5,6 +5,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.core.view.isVisible +import androidx.lifecycle.LiveData import androidx.recyclerview.widget.DiffUtil import io.realm.RealmResults import io.realm.Sort @@ -17,6 +18,7 @@ import net.pokeranalytics.android.model.filter.FilterManager import net.pokeranalytics.android.model.filter.Filterable import net.pokeranalytics.android.model.filter.SessionFilterable import net.pokeranalytics.android.model.interfaces.Manageable +import net.pokeranalytics.android.model.realm.Bankroll import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.ui.activity.SessionActivity import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource @@ -95,8 +97,20 @@ class HistoryFragment : PokerAnalyticsFragment(), LiveRowRepresentableDataSource * Init data */ private fun initData() { - //realmSessions = FilterManager().filter(getRealm(), Session::class.java, arrayListOf(SessionFilterable.ONLINE, SessionFilterable.CASH)).sort("creationDate", Sort.DESCENDING) as RealmResults - realmSessions = getRealm().where().findAll().sort("creationDate", Sort.DESCENDING) + var brs = (net.pokeranalytics.android.model.LiveData.BANKROLL.items(getRealm()) as RealmResults).toArray().map{ + (it as Bankroll).id + } + + var br = SessionFilterable.BANKROLL + br.ids = arrayOf(brs.last()) + + println(br.ids) + + realmSessions = FilterManager().filter(getRealm(), Session::class.java, arrayListOf(br)) + .sort("creationDate", Sort.DESCENDING) as RealmResults + +// realmSessions = FilterManager().filter(getRealm(), Session::class.java, arrayListOf(SessionFilterable.ONLINE, SessionFilterable.CASH)).sort("creationDate", Sort.DESCENDING) as RealmResults + //realmSessions = getRealm().where().findAll().sort("creationDate", Sort.DESCENDING) val viewManager = SmoothScrollLinearLayoutManager(requireContext()) historyAdapter = RowRepresentableAdapter(this, this)