Refactoring + cleanup

feature/top10
Laurent 7 years ago
parent aa3e94f30e
commit 6394472a96
  1. 9
      app/src/main/java/net/pokeranalytics/android/calculus/Calculator.kt
  2. 58
      app/src/main/java/net/pokeranalytics/android/model/extensions/SessionExtensions.kt
  3. 55
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt

@ -4,12 +4,12 @@ import io.realm.Realm
import net.pokeranalytics.android.calculus.Stat.*
import net.pokeranalytics.android.model.comparison.Comparator
import net.pokeranalytics.android.model.comparison.combined
import net.pokeranalytics.android.model.extensions.hourlyDuration
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.filter.filter
import net.pokeranalytics.android.model.filter.name
import net.pokeranalytics.android.model.realm.ComputableResult
import net.pokeranalytics.android.model.realm.SessionSet
import net.pokeranalytics.android.model.realm.hourlyDuration
import net.pokeranalytics.android.util.extensions.startOfDay
import timber.log.Timber
import java.util.*
@ -309,7 +309,7 @@ class Calculator {
sessionSets.forEach { sessionSet ->
tIndex++
val setStats = SSStats(realm, sessionSet, computableGroup.conditions)
val setStats = SSStats(sessionSet, computableGroup.conditions)
tRatedNetSum += setStats.ratedNet
tBBSum += setStats.bbSum
@ -473,7 +473,7 @@ class Calculator {
if (gHourlyDuration != null) {
var hourlyStdSum = 0.0
sessionSets.forEach { set ->
val ssStats = SSStats(realm, set, computableGroup.conditions)
val ssStats = SSStats(set, computableGroup.conditions)
val sHourlyRate = ssStats.hourlyRate
hourlyStdSum += Math.pow(sHourlyRate - hourlyRate, 2.0)
}
@ -492,9 +492,8 @@ class Calculator {
}
class SSStats(realm: Realm, sessionSet: SessionSet, conditions: List<QueryCondition>) { // Session Set Stats
class SSStats(sessionSet: SessionSet, conditions: List<QueryCondition>) { // Session Set Stats
private var realm = realm
private var sessionSet = sessionSet
private var conditions = conditions

@ -25,9 +25,6 @@ enum class SessionState {
*/
fun Session.getState(): SessionState {
// if (timeFrame == null) {
// return SessionState.PENDING
// }
val start = this.startDate
if (start == null) {
return SessionState.PENDING
@ -43,4 +40,59 @@ fun Session.getState(): SessionState {
}
}
}
val AbstractList<Session>.hourlyDuration: Double
get() {
val intervals = mutableListOf<TimeInterval>()
this.forEach {
val interval = TimeInterval(it.startDate!!, it.endDate!!, it.breakDuration)
intervals.update(interval)
}
return intervals.sumByDouble { it.hourlyDuration }
}
class TimeInterval(var start: Date, var end: Date, var breakDuration: Long) {
val hourlyDuration: Double
get() {
val netDuration = end.time - start.time - breakDuration
return (netDuration / 3600000).toDouble()
}
}
fun MutableList<TimeInterval>.update(timeInterval: TimeInterval): MutableList<TimeInterval> {
val overlapped = this.filter {
(it.start.before(timeInterval.start) && it.end.after(timeInterval.start)) ||
(it.start.before(timeInterval.end) && it.end.after(timeInterval.end)) ||
(it.start.after(timeInterval.start) && it.end.before(timeInterval.end))
}
if (overlapped.size == 0) { // add
this.add(timeInterval)
} else { // update
var start = timeInterval.start
var end = timeInterval.end
var breakDuration = timeInterval.breakDuration
overlapped.forEach {
if (it.start.before(start)) {
start = it.start
}
if (it.end.after(end)) {
end = it.end
}
breakDuration = kotlin.math.max(it.breakDuration, breakDuration)
}
this.removeAll(overlapped)
this.add(TimeInterval(start, end, breakDuration))
}
return this
}

@ -968,58 +968,3 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat
}
val AbstractList<Session>.hourlyDuration: Double
get() {
val intervals = mutableListOf<TimeInterval>()
this.forEach {
val interval = TimeInterval(it.startDate!!, it.endDate!!, it.breakDuration)
intervals.update(interval)
}
return intervals.sumByDouble { it.hourlyDuration }
}
class TimeInterval(var start: Date, var end: Date, var breakDuration: Long) {
val hourlyDuration: Double
get() {
val netDuration = end.time - start.time - breakDuration
return (netDuration / 3600000).toDouble()
}
}
fun MutableList<TimeInterval>.update(timeInterval: TimeInterval): MutableList<TimeInterval> {
val overlapped = this.filter {
(it.start.before(timeInterval.start) && it.end.after(timeInterval.start)) ||
(it.start.before(timeInterval.end) && it.end.after(timeInterval.end)) ||
(it.start.after(timeInterval.start) && it.end.before(timeInterval.end))
}
if (overlapped.size == 0) { // add
this.add(timeInterval)
} else { // update
var start = timeInterval.start
var end = timeInterval.end
var breakDuration = timeInterval.breakDuration
overlapped.forEach {
if (it.start.before(start)) {
start = it.start
}
if (it.end.after(end)) {
end = it.end
}
breakDuration = kotlin.math.max(it.breakDuration, breakDuration)
}
this.removeAll(overlapped)
this.add(TimeInterval(start, end, breakDuration))
}
return this
}
Loading…
Cancel
Save