|
|
|
|
@ -34,16 +34,18 @@ open class TimeFrame : RealmObject() { |
|
|
|
|
// indicates a state of pause |
|
|
|
|
var paused: Boolean = false |
|
|
|
|
|
|
|
|
|
// Session |
|
|
|
|
@LinkingObjects("timeFrame") |
|
|
|
|
private val sessions: RealmResults<Session>? = null |
|
|
|
|
|
|
|
|
|
@LinkingObjects("timeFrame") |
|
|
|
|
private val groups: RealmResults<SessionGroup>? = null |
|
|
|
|
private val sessions: RealmResults<Session>? = null // we should have only one session |
|
|
|
|
|
|
|
|
|
@Ignore |
|
|
|
|
var session: Session? = null |
|
|
|
|
get() = this.sessions?.first() |
|
|
|
|
|
|
|
|
|
// Group |
|
|
|
|
@LinkingObjects("timeFrame") |
|
|
|
|
private val groups: RealmResults<SessionGroup>? = null // we should have only one group |
|
|
|
|
|
|
|
|
|
@Ignore |
|
|
|
|
var group: SessionGroup? = null |
|
|
|
|
get() = this.groups?.first() |
|
|
|
|
@ -60,13 +62,7 @@ open class TimeFrame : RealmObject() { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun computeDuration() { |
|
|
|
|
|
|
|
|
|
var endDate: Date |
|
|
|
|
if (this.endDate != null) { |
|
|
|
|
endDate = this.endDate!! |
|
|
|
|
} else { |
|
|
|
|
endDate = Date() |
|
|
|
|
} |
|
|
|
|
var endDate: Date = this.endDate ?: Date() |
|
|
|
|
this.duration = endDate.time - startDate.time - this.breakDuration |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -102,11 +98,32 @@ open class TimeFrame : RealmObject() { |
|
|
|
|
*/ |
|
|
|
|
private fun updateTimeFrames(sessionGroups: RealmResults<SessionGroup>) { |
|
|
|
|
|
|
|
|
|
// update |
|
|
|
|
if (sessionGroups.size == 1) { |
|
|
|
|
when (sessionGroups.size) { |
|
|
|
|
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)) { |
|
|
|
|
groupTimeFrame.startDate = this.startDate |
|
|
|
|
} |
|
|
|
|
@ -123,7 +140,13 @@ open class TimeFrame : RealmObject() { |
|
|
|
|
realm.copyToRealmOrUpdate(groupTimeFrame) |
|
|
|
|
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 endDate: Date? = this.endDate |
|
|
|
|
@ -176,9 +199,6 @@ open class TimeFrame : RealmObject() { |
|
|
|
|
group.sessions.addAll(sessions) |
|
|
|
|
|
|
|
|
|
realm.commitTransaction() |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|