diff --git a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt index 49256174..7803b4f1 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/interfaces/Timed.kt @@ -10,8 +10,11 @@ interface Timed { var breakDuration: Long + var pauseDate: Date? + var netDuration: Long + /** * Computes the net netDuration of the session */ diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt index 92b3b8ba..c872c102 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt @@ -106,7 +106,7 @@ open class Session : RealmObject(), SessionInterface, Savable, StaticRowRepresen /** * The start date of the break */ - var pauseDate: Date? = null + override var pauseDate: Date? = null // The time frame of the Session, i.e. the start & end date // var timeFrame: TimeFrame? = null @@ -288,14 +288,14 @@ open class Session : RealmObject(), SessionInterface, Savable, StaticRowRepresen if (this.tournamentEntryFee != null) { this.result?.buyin = this.tournamentEntryFee } - -// val sessionTimeFrame = this.timeFrame ?: realm.createObject(TimeFrame::class.java) -// sessionTimeFrame.setStart(Date()) -// sessionTimeFrame.setDate(Date(), null) -// this.timeFrame = sessionTimeFrame } SessionState.PAUSED -> { -// this.timeFrame?.paused = false + val pauseDate = this.pauseDate + if (pauseDate != null) { + this.breakDuration += Date().time - pauseDate.time + } else { + throw IllegalStateException("When resuming, the pause date must be set") + } this.pauseDate = null } else -> { @@ -312,10 +312,9 @@ open class Session : RealmObject(), SessionInterface, Savable, StaticRowRepresen realm.executeTransaction { when (getState()) { SessionState.STARTED -> { -// this.?.paused = true this.pauseDate = Date() } - else -> throw IllegalStateException("unmanaged state") + else -> throw IllegalStateException("Pausing a session in an unmanaged state") } } } @@ -328,10 +327,6 @@ open class Session : RealmObject(), SessionInterface, Savable, StaticRowRepresen when (getState()) { SessionState.STARTED, SessionState.PAUSED -> { this.end() -// this.timeFrame?.paused = false -// this.pauseDate = null -// this.endDate = Date() -// this.timeFrame?.setDate(null, Date()) } else -> throw Exception("Stopping session in unmanaged state") } diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt index 2ef8ca93..b2bed1e7 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt @@ -37,6 +37,14 @@ open class SessionSet : RealmObject(), Timed { this.computeNetDuration() } + /** + * The start date of the break + */ + override var pauseDate: Date? = null + + /** + * the net duration of the set + */ override var netDuration: Long = 0L companion object { diff --git a/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt b/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt index c3faaaf1..f68ccccf 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt @@ -4,11 +4,19 @@ import io.realm.RealmQuery import io.realm.RealmResults import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.SessionSet +import kotlin.math.max +/** + * The manager is in charge of updating the abstract concept of timeline, + * representing the sequenced time frames where the user plays. + */ class SessionSetManager { companion object { + /** + * Updates the global timeline using the updated [session] + */ fun updateTimeline(session: Session) { if (!session.realm.isInTransaction) { @@ -42,7 +50,7 @@ class SessionSetManager { } /** - * Update Time frames from sets + * Update the global timeline using the impacted [sessionSets] and the updated [session] */ private fun updateTimeFrames(sessionSets: RealmResults, session: Session) { @@ -53,6 +61,9 @@ class SessionSetManager { } + /** + * Creates or update the session set for the [session] + */ private fun createOrUpdateSessionSet(session: Session) { val set = session.sessionSet @@ -65,10 +76,14 @@ class SessionSetManager { } + /** + * Create a set and affect it to the [session] + */ private fun createSessionSet(session: Session) { val set: SessionSet = SessionSet.newInstance(session.realm) set.startDate = session.startDate!! set.endDate = session.endDate!! + set.breakDuration = session.breakDuration session.sessionSet = set } @@ -109,11 +124,17 @@ class SessionSetManager { session.sessionSet = set // Add all orphan endedSessions - sessions.forEach { it.sessionSet = set } + sessions.forEach { session -> + session.sessionSet = set + set.breakDuration = max(set.breakDuration, session.breakDuration) + } // Timber.d("netDuration 3 = : ${set.timeFrame?.netDuration}") } + /** + * Removes the [session] from the timeline + */ fun removeFromTimeline(session: Session) { if (!session.realm.isInTransaction) {