parent
a0baeb61f1
commit
6398989dc4
@ -0,0 +1,76 @@ |
|||||||
|
package net.pokeranalytics.android.model.dao |
||||||
|
|
||||||
|
import io.realm.Realm |
||||||
|
import io.realm.RealmResults |
||||||
|
import io.realm.Sort |
||||||
|
import net.pokeranalytics.android.model.realm.Session |
||||||
|
import net.pokeranalytics.android.util.data.sessionDao |
||||||
|
|
||||||
|
/** |
||||||
|
* Session Dao |
||||||
|
*/ |
||||||
|
class SessionDao(realmDb: Realm) { |
||||||
|
|
||||||
|
var realm: Realm = realmDb |
||||||
|
|
||||||
|
/** |
||||||
|
* Create or update session |
||||||
|
*/ |
||||||
|
fun createOrUpdateSession(session: Session): Session { |
||||||
|
realm.beginTransaction() |
||||||
|
val sessionToSave = realm.copyToRealmOrUpdate(session) |
||||||
|
realm.commitTransaction() |
||||||
|
return realm.copyFromRealm(sessionToSave) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Create or update sessions |
||||||
|
*/ |
||||||
|
fun createOrUpdateSessions(sessions: List<Session>): List<Session> { |
||||||
|
|
||||||
|
realm.beginTransaction() |
||||||
|
|
||||||
|
// Update |
||||||
|
val sessionsToSave = realm.copyToRealmOrUpdate(sessions) |
||||||
|
// Remove sessions not updated |
||||||
|
realm.where(Session::class.java).equalTo("isUpdating", true).findAll().deleteAllFromRealm() |
||||||
|
|
||||||
|
realm.commitTransaction() |
||||||
|
|
||||||
|
return realm.copyFromRealm(sessionsToSave) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Find all sessions |
||||||
|
*/ |
||||||
|
fun findAllSessions(): RealmResults<Session> { |
||||||
|
return realm.where(Session::class.java).findAll().sort("updatedAt", Sort.DESCENDING) |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Find session by id |
||||||
|
*/ |
||||||
|
fun findSessionById(sessionId: Int): Session? { |
||||||
|
return realm.where(Session::class.java).equalTo("id", sessionId).findFirst() |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Delete session |
||||||
|
*/ |
||||||
|
fun deleteSession(sessionId: Int) { |
||||||
|
realm.beginTransaction() |
||||||
|
realm.sessionDao().findSessionById(sessionId)?.deleteFromRealm() |
||||||
|
realm.commitTransaction() |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Delete all sessions |
||||||
|
*/ |
||||||
|
fun deleteAllSessions() { |
||||||
|
realm.beginTransaction() |
||||||
|
realm.sessionDao().findAllSessions().deleteAllFromRealm() |
||||||
|
realm.commitTransaction() |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,77 @@ |
|||||||
|
package net.pokeranalytics.android.util.data |
||||||
|
|
||||||
|
import android.app.Application |
||||||
|
import androidx.lifecycle.AndroidViewModel |
||||||
|
import androidx.lifecycle.LiveData |
||||||
|
import androidx.lifecycle.MutableLiveData |
||||||
|
import io.realm.OrderedRealmCollectionChangeListener |
||||||
|
import io.realm.Realm |
||||||
|
import io.realm.RealmResults |
||||||
|
import net.pokeranalytics.android.model.realm.Session |
||||||
|
import net.pokeranalytics.android.util.data.sessionDao |
||||||
|
|
||||||
|
/** |
||||||
|
* Session View Model |
||||||
|
*/ |
||||||
|
class SessionViewModel(application: Application) : AndroidViewModel(application) { |
||||||
|
|
||||||
|
private var realm = Realm.getDefaultInstance() |
||||||
|
private var results: RealmResults<Session> |
||||||
|
private val observablePlaces = MutableLiveData<List<Session>>() |
||||||
|
|
||||||
|
private var realmChangeListener = OrderedRealmCollectionChangeListener<RealmResults<Session>> { t, changeSet -> |
||||||
|
observablePlaces.value = realm.copyFromRealm(t) |
||||||
|
} |
||||||
|
|
||||||
|
init { |
||||||
|
results = realm.sessionDao().findAllSessions() |
||||||
|
} |
||||||
|
|
||||||
|
override fun onCleared() { |
||||||
|
super.onCleared() |
||||||
|
results.removeChangeListener(realmChangeListener) |
||||||
|
realm.close() |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Get all sessions |
||||||
|
*/ |
||||||
|
fun getAllSessions(): LiveData<List<Session>> { |
||||||
|
results.addChangeListener(realmChangeListener) |
||||||
|
observablePlaces.value = realm.copyFromRealm(results) |
||||||
|
return observablePlaces |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Get session by id |
||||||
|
*/ |
||||||
|
fun getSessionById(id: Int): Session? { |
||||||
|
if (!realm.isClosed) { |
||||||
|
val session = realm.sessionDao().findSessionById(id) |
||||||
|
if (session != null) { |
||||||
|
return realm.copyFromRealm(session) |
||||||
|
} |
||||||
|
} |
||||||
|
return null |
||||||
|
} |
||||||
|
/** |
||||||
|
* Create or update a session |
||||||
|
*/ |
||||||
|
fun createOrUpdateSession(session: Session): Session? { |
||||||
|
if (!realm.isClosed) { |
||||||
|
return realm.sessionDao().createOrUpdateSession(session) |
||||||
|
} |
||||||
|
|
||||||
|
return null |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Delete a session |
||||||
|
*/ |
||||||
|
fun deleteSession(sessionId: Int) { |
||||||
|
if (!realm.isClosed) { |
||||||
|
realm.sessionDao().deleteSession(sessionId) |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
package net.pokeranalytics.android.util.data |
||||||
|
|
||||||
|
import androidx.lifecycle.LiveData |
||||||
|
import io.realm.RealmChangeListener |
||||||
|
import io.realm.RealmModel |
||||||
|
import io.realm.RealmResults |
||||||
|
|
||||||
|
|
||||||
|
class LiveRealmData<T : RealmModel>(private val results: RealmResults<T>) : LiveData<RealmResults<T>>() { |
||||||
|
private val listener = RealmChangeListener<RealmResults<T>> { results -> value = results } |
||||||
|
|
||||||
|
override fun onActive() { |
||||||
|
results.addChangeListener(listener) |
||||||
|
value = results |
||||||
|
} |
||||||
|
|
||||||
|
override fun onInactive() { |
||||||
|
results.removeChangeListener(listener) |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,12 @@ |
|||||||
|
@file:JvmName("RealmUtils") // pretty name for utils class if called from |
||||||
|
package net.pokeranalytics.android.util.data |
||||||
|
|
||||||
|
import io.realm.Realm |
||||||
|
import io.realm.RealmModel |
||||||
|
import io.realm.RealmResults |
||||||
|
import net.pokeranalytics.android.model.dao.SessionDao |
||||||
|
import net.pokeranalytics.android.util.data.LiveRealmData |
||||||
|
|
||||||
|
fun Realm.sessionDao(): SessionDao = SessionDao(this) |
||||||
|
|
||||||
|
fun <T:RealmModel> RealmResults<T>.asLiveData() = LiveRealmData(this) |
||||||
Loading…
Reference in new issue