Added SessionGroup creation + refactoring

dev_raz_wip
Laurent 7 years ago
parent 1403ba7667
commit 9e45ef4b5f
  1. 58
      app/src/main/java/net/pokeranalytics/android/model/realm/TimeFrame.kt

@ -34,16 +34,18 @@ open class TimeFrame : RealmObject() {
// indicates a state of pause // indicates a state of pause
var paused: Boolean = false var paused: Boolean = false
// Session
@LinkingObjects("timeFrame") @LinkingObjects("timeFrame")
private val sessions: RealmResults<Session>? = null private val sessions: RealmResults<Session>? = null // we should have only one session
@LinkingObjects("timeFrame")
private val groups: RealmResults<SessionGroup>? = null
@Ignore @Ignore
var session: Session? = null var session: Session? = null
get() = this.sessions?.first() get() = this.sessions?.first()
// Group
@LinkingObjects("timeFrame")
private val groups: RealmResults<SessionGroup>? = null // we should have only one group
@Ignore @Ignore
var group: SessionGroup? = null var group: SessionGroup? = null
get() = this.groups?.first() get() = this.groups?.first()
@ -60,13 +62,7 @@ open class TimeFrame : RealmObject() {
} }
private fun computeDuration() { private fun computeDuration() {
var endDate: Date = this.endDate ?: Date()
var endDate: Date
if (this.endDate != null) {
endDate = this.endDate!!
} else {
endDate = Date()
}
this.duration = endDate.time - startDate.time - this.breakDuration this.duration = endDate.time - startDate.time - this.breakDuration
} }
@ -102,11 +98,32 @@ open class TimeFrame : RealmObject() {
*/ */
private fun updateTimeFrames(sessionGroups: RealmResults<SessionGroup>) { private fun updateTimeFrames(sessionGroups: RealmResults<SessionGroup>) {
// update when (sessionGroups.size) {
if (sessionGroups.size == 1) { 0 -> this.createSessionGroup()
1 -> this.updateSingleSessionGroup(sessionGroups.first()?.timeFrame!!)
else -> this.mergeSessionGroups(sessionGroups)
}
}
private fun createSessionGroup() {
val group: SessionGroup = SessionGroup.newInstance()
group.timeFrame?.let {
it.startDate = this.startDate
it.endDate = this.endDate
} ?: run {
throw ModelException("TimeFrame should never be null here")
}
}
/**
* Single session group update
* Changes the group timeframe using the current timeframe dates
*/
private fun updateSingleSessionGroup(groupTimeFrame: TimeFrame) {
// we are sure that the timeframe is not null from the realm query
val groupTimeFrame: TimeFrame = sessionGroups.first()?.timeFrame!!
if (this.startDate.before(groupTimeFrame.startDate)) { if (this.startDate.before(groupTimeFrame.startDate)) {
groupTimeFrame.startDate = this.startDate groupTimeFrame.startDate = this.startDate
} }
@ -123,7 +140,13 @@ open class TimeFrame : RealmObject() {
realm.copyToRealmOrUpdate(groupTimeFrame) realm.copyToRealmOrUpdate(groupTimeFrame)
realm.commitTransaction() realm.commitTransaction()
} else if (sessionGroups.size > 1) { }
/**
* Multiple session groups update:
* Merges all groups into one (delete all then create a new one)
*/
private fun mergeSessionGroups(sessionGroups: RealmResults<SessionGroup>) {
var startDate: Date = this.startDate var startDate: Date = this.startDate
var endDate: Date? = this.endDate var endDate: Date? = this.endDate
@ -176,9 +199,6 @@ open class TimeFrame : RealmObject() {
group.sessions.addAll(sessions) group.sessions.addAll(sessions)
realm.commitTransaction() realm.commitTransaction()
}
} }
} }

Loading…
Cancel
Save