diff --git a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt index 027dc856..6cf7c826 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/LiveData.kt @@ -5,10 +5,14 @@ import io.realm.Realm import io.realm.RealmObject import io.realm.RealmResults import io.realm.Sort +import io.realm.kotlin.where import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.Manageable +import net.pokeranalytics.android.model.interfaces.Timed import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.ui.view.Localizable +import timber.log.Timber /** * An enum managing the business objects related to a realm results @@ -22,8 +26,26 @@ enum class LiveData : Localizable { TRANSACTION_TYPE; fun items(realm: Realm, fieldName: String? = null, sortOrder: Sort? = null): RealmResults<*> { - return realm.where(this.relatedEntity).findAll() - .sort(fieldName ?: this.sortingFieldName, sortOrder ?: this.sorting) + var results = realm.where(this.relatedEntity).findAll().sort(fieldName ?: this.sortingFieldName, sortOrder ?: this.sorting) + + if (results.size > 0) { + if (results.first() is CountableUsage) { + this.setUseCount(realm, results) + return results.sort("useCount", Sort.DESCENDING) + } + } + return results + } + + fun setUseCount(realm: Realm, realmResults: RealmResults<*>) { + realm.executeTransaction { + realmResults.forEach { countableUsage -> + (countableUsage as CountableUsage).useCount = it.where().equalTo( + "${relatedEntity.simpleName.toLowerCase()}.id", + countableUsage.uniqueIdentifier() + ).count().toInt() + } + } } /** diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt new file mode 100644 index 00000000..b6e1e820 --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/CountableUsage.kt @@ -0,0 +1,7 @@ +package net.pokeranalytics.android.model.interfaces + +interface CountableUsage : Identifiable { + var useCount: Int + get() { return 0 } + set(newValue) {} +} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt index 24ca10e7..fa848ab3 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Manageable.kt @@ -17,7 +17,6 @@ interface Identifiable { * A unique identifier getter */ fun uniqueIdentifier(): String - } /** diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt index b74c2d50..1bd28aa7 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Game.kt @@ -1,18 +1,24 @@ package net.pokeranalytics.android.model.realm +import io.realm.Realm import io.realm.RealmObject +import io.realm.RealmResults +import io.realm.Sort import io.realm.annotations.PrimaryKey +import io.realm.kotlin.where import net.pokeranalytics.android.R +import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.Manageable import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowRepresentableEditDescriptor import net.pokeranalytics.android.ui.view.rowrepresentable.GameRow import net.pokeranalytics.android.ui.view.rowrepresentable.SimpleRow +import timber.log.Timber import java.util.* import kotlin.collections.ArrayList -open class Game : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable { +open class Game : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable, CountableUsage { @PrimaryKey var id = UUID.randomUUID().toString() @@ -23,6 +29,9 @@ open class Game : RealmObject(), Manageable, StaticRowRepresentableDataSource, R // A shorter name for the game var shortName: String? = null + // CountableUsage + override var useCount: Int = 0 + override fun getDisplayName(): String { return this.name } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 42d91b9d..5902c670 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -5,6 +5,7 @@ import android.text.InputType import io.realm.Realm import io.realm.RealmList import io.realm.RealmObject +import io.realm.Sort import io.realm.annotations.Ignore import io.realm.annotations.PrimaryKey import io.realm.kotlin.where diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt index 7373bddd..a21a156e 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/TournamentFeature.kt @@ -3,6 +3,7 @@ package net.pokeranalytics.android.model.realm import android.text.InputType import io.realm.RealmObject import io.realm.annotations.PrimaryKey +import net.pokeranalytics.android.model.interfaces.CountableUsage import net.pokeranalytics.android.model.interfaces.Manageable import net.pokeranalytics.android.ui.adapter.StaticRowRepresentableDataSource import net.pokeranalytics.android.ui.view.RowRepresentable @@ -12,7 +13,8 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.TournamentFeatureRow import java.util.* import kotlin.collections.ArrayList -open class TournamentFeature : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable { +open class TournamentFeature : RealmObject(), Manageable, StaticRowRepresentableDataSource, RowRepresentable, + CountableUsage { @PrimaryKey var id = UUID.randomUUID().toString() @@ -20,6 +22,9 @@ open class TournamentFeature : RealmObject(), Manageable, StaticRowRepresentable // The name of the feature var name: String = "" + // CountableUsage + override var useCount: Int = 0 + override fun getDisplayName(): String { return this.name }