diff --git a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt index 8ec3a204..da13bd7e 100644 --- a/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt +++ b/app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt @@ -61,7 +61,7 @@ class PokerAnalyticsApplication : Application() { if (BuildConfig.DEBUG) { Timber.d("UserPreferences.defaultCurrency: ${UserDefaults.currency.symbol}") -// this.createFakeSessions() + this.createFakeSessions() } 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 9b2aac56..2f1726cb 100644 --- a/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt +++ b/app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt @@ -34,13 +34,23 @@ class Calculator { progressValues: ProgressValues = ProgressValues.NONE, var stats: List = listOf(), var criterias: List = listOf(), - query: Query = Query(), - var filter: Filter? = null, + var query: Query = Query(), + var filterId: String? = null, private var aggregationType: AggregationType? = null, var userGenerated: Boolean = false, var reportSetupId: String? = null ) { + constructor(display: Display = Display.TABLE, + progressValues: ProgressValues = ProgressValues.NONE, + stats: List = listOf(), + criterias: List = listOf(), + filter: Filter? = null, + aggregationType: AggregationType? = null, + userGenerated: Boolean = false, + reportSetupId: String? = null) : + this(display, progressValues, stats, criterias, filter?.query ?: Query(), filter?.id, aggregationType, userGenerated, reportSetupId) + /** * Specifies whether progress values should be added and their kind */ @@ -52,32 +62,12 @@ class Calculator { return field } - /** - * The query used to filter data - */ - private var _query: Query = query - init { - if (this._query.conditions.isNotEmpty() && this.filter != null) { - throw IllegalStateException("Can't specify a query with conditions AND a filter") - } - this.aggregationType?.let { this.criterias = it.criterias } } - /** - * The query used, either filter query or the provided query - */ - val query: Query - get() { - this.filter?.let { - return it.query - } - return this._query - } - /** * The way the computed stats are going to be displayed */ diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt index 8cfaa841..d89dafc6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/report/AbstractReportFragment.kt @@ -10,6 +10,7 @@ import net.pokeranalytics.android.calculus.Report import net.pokeranalytics.android.model.LiveData import net.pokeranalytics.android.model.realm.ReportSetup import net.pokeranalytics.android.ui.fragment.data.DataManagerFragment +import net.pokeranalytics.android.util.extensions.findById abstract class AbstractReportFragment : DataManagerFragment() { @@ -72,6 +73,7 @@ abstract class AbstractReportFragment : DataManagerFragment() { } private fun saveReport(name: String) { + getRealm().executeTransaction { realm -> val rs = this.item as ReportSetup @@ -85,7 +87,10 @@ abstract class AbstractReportFragment : DataManagerFragment() { options.criterias.forEach { rs.criteriaIds.add(it.uniqueIdentifier) } - rs.filter = options.filter + + options.filterId?.let { id -> String + rs.filter = realm.findById(id) + } this.item = rs diff --git a/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt b/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt index 15b84375..ed97ac0f 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/extensions/RealmExtensions.kt @@ -6,12 +6,21 @@ import io.realm.RealmResults import io.realm.Sort import io.realm.kotlin.where import net.pokeranalytics.android.model.interfaces.CountableUsage +import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.NameManageable import net.pokeranalytics.android.model.realm.Filter import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.TournamentFeature import net.pokeranalytics.android.model.realm.Transaction +fun Realm.findById(clazz: Class, id: String) : T? { + return this.where(clazz).equalTo("id", id).findFirst() +} + +inline fun Realm.findById(id: String) : T? { + return this.findById(T::class.java, id) +} + fun Realm.getOrCreate(clazz: Class, name: String) : T { val instance = this.where(clazz).equalTo("name", name).findFirst() return if (instance != null) {