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