Fixes in duration calculus

threading
Laurent 3 years ago
parent 929365fc4c
commit 1ec2a438dc
  1. 18
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 6
      app/src/main/java/net/pokeranalytics/android/RealmWriteService.kt
  3. 1
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  4. 23
      app/src/main/java/net/pokeranalytics/android/model/utils/SessionSetManager.kt
  5. 8
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt

@ -18,6 +18,7 @@ import net.pokeranalytics.android.calculus.ReportWhistleBlower
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.migrations.Patcher
import net.pokeranalytics.android.model.migrations.PokerAnalyticsMigration
import net.pokeranalytics.android.model.realm.FlatTimeInterval
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.utils.Seed
import net.pokeranalytics.android.model.utils.SessionSetManager
@ -101,6 +102,23 @@ class PokerAnalyticsApplication : Application() {
val locale = Locale.getDefault()
CrashLogging.log("Country: ${locale.country}, language: ${locale.language}")
// Debugging
val realm = Realm.getDefaultInstance()
val emptyFTI = realm.where(FlatTimeInterval::class.java).isEmpty("sessions").findAll()
if (emptyFTI.isNotEmpty()) {
Timber.w(">>> WARNING: There are ${emptyFTI.size} FTIs without sessions")
Timber.w(">>> DELETING THE EMPTY FTIs")
realm.executeTransactionAsync {
it.where(FlatTimeInterval::class.java).isEmpty("sessions").findAll().deleteAllFromRealm()
}
}
val ftis = realm.where(FlatTimeInterval::class.java).sort("startDate").findAll()
Timber.d(">>> Total FTIs count = ${ftis.size}")
ftis.forEach {
Timber.d("fti > ${it.startDate} / ${it.endDate}")
}
}
/** Defines callbacks for service binding, passed to bindService() */

@ -43,12 +43,12 @@ class RealmWriteService : Service() {
this.realm.executeTransactionAsync({ asyncRealm ->
handler(asyncRealm)
// Timber.d(">> handler done")
Timber.d(">> transaction handler done")
}, {
// Timber.d(">> YEAAAAAAAAAAAH !!!")
Timber.d(">> onSuccess, refreshing...")
this.realm.refresh()
}, {
Timber.d(">> NOOOOO error = $it")
Timber.d(">> transaction failed: $it")
})
}

@ -717,6 +717,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim
SessionSetManager.sessionDateChanged(this)
// cleanup unnecessary related objects
this.flatTimeIntervals.deleteAllFromRealm()
this.result?.deleteFromRealm()
this.computableResult?.deleteFromRealm()

@ -33,15 +33,19 @@ object SessionSetManager {
fun startChanged(session: Session, date: Date?) {
this.start = min(this.start, date)
this.end = max(this.end, session.endDate)
this.sessionIdsToProcess.add(session.id)
}
fun endChanged(session: Session, date: Date?) {
this.end = max(this.end, date)
this.start = min(this.start, session.startDate)
this.sessionIdsToProcess.add(session.id)
}
fun sessionDateChanged(session: Session) {
this.start = min(this.start, session.startDate)
this.end = max(this.end, session.endDate)
this.sessionIdsToProcess.add(session.id)
}
@ -91,9 +95,12 @@ object SessionSetManager {
// FlatTimeIntervals
if (start != null && end != null) {
processFlatTimeInterval(realm, start, end)
processFlatTimeInterval(realm, sessions.toSet(), start, end)
}
val ftis = realm.where(FlatTimeInterval::class.java).findAll()
Timber.d("*** FTIs count = ${ftis.size}")
}
/**
@ -297,10 +304,13 @@ object SessionSetManager {
}
}
private fun processFlatTimeInterval(realm: Realm, start: Date, end: Date) {
private fun processFlatTimeInterval(realm: Realm, changedSessions: Set<Session>, start: Date, end: Date) {
Timber.d("*** processFlatTimeInterval, from: $start, to $end")
val sessions = matchingData<Session>(realm, start, end)
val intervalsStore = IntervalsStore(sessions.toSet())
intervalsStore.processSessions(changedSessions)
intervalsStore.intervals.forEach { it.deleteFromRealm() }
@ -335,7 +345,7 @@ object SessionSetManager {
}
class IntervalsStore(sessions: Set<Session>) {
class IntervalsStore(sessionSet: Set<Session>) {
var start: Date = Date()
var end: Date = Date(0L)
@ -347,10 +357,10 @@ class IntervalsStore(sessions: Set<Session>) {
private val sessionIds: MutableSet<String> = mutableSetOf()
init {
processSessions(sessions)
processSessions(sessionSet)
}
private fun processSessions(sessions: Set<Session>) {
fun processSessions(sessions: Set<Session>) {
this.sessions.addAll(sessions)
for (session in sessions) {
loadIntervals(session)
@ -426,7 +436,8 @@ class SessionInterval(session: Session) {
var currentInterval = SessionInterval(firstSession)
intervals.add(currentInterval)
for (session in sessions.drop(1)) {
val remainingSessions = sessions.drop(1).sortedBy { it.startDate }
for (session in remainingSessions) {
val start = session.startDate!!
val currentEnd = currentInterval.end
if (currentEnd != null && start > currentEnd) {

@ -154,10 +154,14 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc
this.performances = getRealm().where(Performance::class.java).findAllAsync()
this.reportSetups.addChangeListener { _, _ ->
this.updateRows()
if (isAdded) {
this.updateRows()
}
}
this.performances.addChangeListener { _, _ ->
this.updateRows()
if (isAdded) {
this.updateRows()
}
}
}

Loading…
Cancel
Save