|
|
|
|
@ -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<Session>().equalTo( |
|
|
|
|
"${relatedEntity.simpleName.toLowerCase()}.id", |
|
|
|
|
countableUsage.uniqueIdentifier() |
|
|
|
|
).count().toInt() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|