Timeframes update on date change

dev_raz_wip
Laurent 7 years ago
parent 5db614a4ef
commit 480be48e6d
  1. 69
      app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt

@ -4,6 +4,7 @@ import io.realm.Realm
import io.realm.RealmObject import io.realm.RealmObject
import io.realm.RealmQuery import io.realm.RealmQuery
import io.realm.RealmResults import io.realm.RealmResults
import io.realm.annotations.Ignore
import io.realm.annotations.LinkingObjects import io.realm.annotations.LinkingObjects
import net.pokeranalytics.android.exceptions.ModelException import net.pokeranalytics.android.exceptions.ModelException
import java.util.* import java.util.*
@ -13,23 +14,11 @@ open class TimeFrame : RealmObject() {
// A start date // A start date
var startDate: Date = Date() var startDate: Date = Date()
set(value) { private set
field = value
this.computeDuration()
if (this.session != null) {
this.notifySessionDateChange()
}
}
// An end date // An end date
var endDate: Date? = null var endDate: Date? = null
set(value) { private set
field = value
this.computeDuration()
if (this.session != null) {
this.notifySessionDateChange()
}
}
// The break duration // The break duration
var breakDuration: Long = 0L var breakDuration: Long = 0L
@ -46,10 +35,29 @@ open class TimeFrame : RealmObject() {
var paused: Boolean = false var paused: Boolean = false
@LinkingObjects("timeFrame") @LinkingObjects("timeFrame")
private val session: RealmResults<Session>? = null private val sessions: RealmResults<Session>? = null
@LinkingObjects("timeFrame") @LinkingObjects("timeFrame")
private val group: RealmResults<SessionGroup>? = null private val groups: RealmResults<SessionGroup>? = null
@Ignore
var session: Session? = null
get() = this.sessions?.first()
@Ignore
var group: SessionGroup? = null
get() = this.groups?.first()
fun setDate(startDate: Date, endDate: Date?) {
this.startDate = startDate
this.endDate = endDate
this.computeDuration()
if (this.sessions != null) {
this.notifySessionDateChange()
}
}
private fun computeDuration() { private fun computeDuration() {
@ -96,6 +104,7 @@ open class TimeFrame : RealmObject() {
// update // update
if (sessionGroups.size == 1) { if (sessionGroups.size == 1) {
// we are sure that the timeframe is not null from the realm query // we are sure that the timeframe is not null from the realm query
val groupTimeFrame: TimeFrame = sessionGroups.first()?.timeFrame!! val groupTimeFrame: TimeFrame = sessionGroups.first()?.timeFrame!!
if (this.startDate.before(groupTimeFrame.startDate)) { if (this.startDate.before(groupTimeFrame.startDate)) {
@ -108,6 +117,12 @@ open class TimeFrame : RealmObject() {
groupTimeFrame.endDate = null groupTimeFrame.endDate = null
} }
// Realm Update
val realm = Realm.getDefaultInstance()
realm.beginTransaction()
realm.copyToRealmOrUpdate(groupTimeFrame)
realm.commitTransaction()
} else if (sessionGroups.size > 1) { } else if (sessionGroups.size > 1) {
var startDate: Date = this.startDate var startDate: Date = this.startDate
@ -132,14 +147,16 @@ open class TimeFrame : RealmObject() {
} }
// get all sessions from groups // get all sessions from groups
val sessions = sessionGroups.flatMap { it.sessions } var sessions = sessionGroups.flatMap { it.sessions }
// delete all groups // Start Realm updates
val realm = Realm.getDefaultInstance() val realm = Realm.getDefaultInstance()
realm.executeTransaction { realm.beginTransaction()
sessionGroups.deleteAllFromRealm()
} // delete all groups
sessionGroups.deleteAllFromRealm()
// Create a new groups
val group: SessionGroup = SessionGroup.newInstance() val group: SessionGroup = SessionGroup.newInstance()
group.timeFrame?.let { group.timeFrame?.let {
it.startDate = startDate it.startDate = startDate
@ -148,17 +165,17 @@ open class TimeFrame : RealmObject() {
throw ModelException("TimeFrame should never be null here") throw ModelException("TimeFrame should never be null here")
} }
this.session?.first()?.let { // Add the session linked to this timeframe to the new group
this.sessions?.first()?.let {
group.sessions.add(it) group.sessions.add(it)
} ?: run { } ?: run {
throw ModelException("TimeFrame should never be null here") throw ModelException("TimeFrame should never be null here")
} }
// Add all orphan sessions
group.sessions.addAll(sessions)
realm.commitTransaction()
//@todo delete all timeframes, create a new one
} }

Loading…
Cancel
Save