Various fixes

realmasync
Laurent 2 years ago
parent b5b0e4fedb
commit 56f21c0876
  1. 10
      app/src/main/java/net/pokeranalytics/android/PokerAnalyticsApplication.kt
  2. 39
      app/src/main/java/net/pokeranalytics/android/calculus/ReportWhistleBlower.kt
  3. 4
      app/src/main/java/net/pokeranalytics/android/calculus/bankroll/BankrollReportManager.kt
  4. 11
      app/src/main/java/net/pokeranalytics/android/calculus/optimalduration/CashGameOptimalDurationCalculator.kt
  5. 1
      app/src/main/java/net/pokeranalytics/android/model/filter/Query.kt
  6. 6
      app/src/main/java/net/pokeranalytics/android/model/migrations/Patcher.kt
  7. 3
      app/src/main/java/net/pokeranalytics/android/model/realm/Currency.kt
  8. 1
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  9. 2
      app/src/main/java/net/pokeranalytics/android/model/realm/Result.kt
  10. 12
      app/src/main/java/net/pokeranalytics/android/model/realm/Session.kt
  11. 16
      app/src/main/java/net/pokeranalytics/android/model/realm/SessionSet.kt
  12. 2
      app/src/main/java/net/pokeranalytics/android/model/utils/DataUtils.kt
  13. 52
      app/src/main/java/net/pokeranalytics/android/model/utils/SessionManager.kt
  14. 7
      app/src/main/java/net/pokeranalytics/android/ui/activity/HomeActivity.kt
  15. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt
  16. 11
      app/src/main/java/net/pokeranalytics/android/ui/fragment/ReportsFragment.kt
  17. 7
      app/src/main/java/net/pokeranalytics/android/ui/fragment/StatisticsFragment.kt
  18. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/Top10Fragment.kt
  19. 3
      app/src/main/java/net/pokeranalytics/android/ui/fragment/components/RealmFragment.kt
  20. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ComposableTableReportFragment.kt
  21. 5
      app/src/main/java/net/pokeranalytics/android/ui/fragment/report/ProgressReportFragment.kt
  22. 9
      app/src/main/java/net/pokeranalytics/android/ui/modules/calendar/CalendarFragment.kt
  23. 6
      app/src/main/java/net/pokeranalytics/android/ui/modules/feed/FeedSessionRowRepresentableAdapter.kt
  24. 6
      app/src/main/java/net/pokeranalytics/android/ui/modules/filter/FilterDetailsFragment.kt
  25. 2
      app/src/main/java/net/pokeranalytics/android/ui/modules/session/SessionFragment.kt
  26. 2
      app/src/main/java/net/pokeranalytics/android/util/BackupOperator.kt
  27. 2
      app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt

@ -10,7 +10,6 @@ import io.realm.kotlin.where
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import net.pokeranalytics.android.calculus.ReportWhistleBlower
import net.pokeranalytics.android.model.migrations.Patcher
import net.pokeranalytics.android.model.migrations.PokerAnalyticsMigration
import net.pokeranalytics.android.model.realm.Session
@ -25,7 +24,6 @@ import java.util.*
class PokerAnalyticsApplication : Application() {
var reportWhistleBlower: ReportWhistleBlower? = null
var backupOperator: BackupOperator? = null
companion object {
@ -81,9 +79,9 @@ class PokerAnalyticsApplication : Application() {
Patcher.patchAll(this)
// Processors
SessionManager.create()
SessionManager.configure(this.applicationContext)
UserConfigObserver.create()
this.reportWhistleBlower = ReportWhistleBlower(this.applicationContext)
// this.reportWhistleBlower = ReportWhistleBlower(this.applicationContext)
// Backups
this.backupOperator = BackupOperator(this.applicationContext)
@ -92,6 +90,10 @@ class PokerAnalyticsApplication : Application() {
val locale = Locale.getDefault()
CrashLogging.log("Country: ${locale.country}, language: ${locale.language}")
// val realm = Realm.getDefaultInstance()
// val v:Int = 0
// val set = realm.where<SessionSet>().equalTo("sessions.type", v).findAll()
// Timber.d("SESSION SET COUNT = ${set.size}")
// Realm.getDefaultInstance().executeTransaction {
// it.delete(Performance::class.java)

@ -4,7 +4,6 @@ import android.content.Context
import android.os.CountDownTimer
import io.realm.Realm
import io.realm.RealmQuery
import io.realm.RealmResults
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@ -13,12 +12,10 @@ import net.pokeranalytics.android.model.LiveOnline
import net.pokeranalytics.android.model.realm.CustomField
import net.pokeranalytics.android.model.realm.Performance
import net.pokeranalytics.android.model.realm.PerformanceKey
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.view.rows.StaticReport
import net.pokeranalytics.android.util.extensions.findById
import net.pokeranalytics.android.util.extensions.formattedHourlyDuration
import net.pokeranalytics.android.util.extensions.writeAsync
import timber.log.Timber
import kotlin.coroutines.CoroutineContext
@ -28,7 +25,7 @@ interface NewPerformanceListener {
class ReportWhistleBlower(var context: Context) {
private var sessions: RealmResults<Session>? = null
// private var sessions: RealmResults<Session>? = null
// private var results: RealmResults<Result>? = null
private var currentTask: ReportTask? = null
@ -43,19 +40,19 @@ class ReportWhistleBlower(var context: Context) {
init {
val realm = Realm.getDefaultInstance()
this.sessions = realm.where(Session::class.java).findAll()
this.sessions?.addChangeListener { _ ->
requestReportLaunch()
}
// this.results = realm.where(Result::class.java).findAll()
// this.results?.addChangeListener { _ ->
// val realm = Realm.getDefaultInstance()
//
// this.sessions = realm.where(Session::class.java).findAll()
// this.sessions?.addChangeListener { _ ->
// requestReportLaunch()
// }
realm.close()
//
//// this.results = realm.where(Result::class.java).findAll()
//// this.results?.addChangeListener { _ ->
//// requestReportLaunch()
//// }
//
// realm.close()
}
fun addListener(newPerformanceListener: NewPerformanceListener) {
@ -67,7 +64,7 @@ class ReportWhistleBlower(var context: Context) {
}
fun requestReportLaunch() {
Timber.d(">>> Launch report")
// Timber.d(">>> Launch report")
if (paused) {
return
@ -176,7 +173,7 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co
private fun launchReport(realm: Realm, report: StaticReport) {
Timber.d(">>> launch report = $report")
// Timber.d(">>> launch report = $report")
when (report) {
StaticReport.OptimalDuration -> launchOptimalDuration(realm, report)
@ -207,7 +204,7 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co
for (stat in result.options.stats) {
Timber.d("analyse stat: $stat for report: $staticReport")
// Timber.d("analyse stat: $stat for report: $staticReport")
// Get current performance
var query = performancesQuery(realm, staticReport, stat)
@ -229,7 +226,7 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co
val performanceQuery = computedResults.group.query
val performanceName = performanceQuery.getName(this.context, nameSeparator)
Timber.d("Best computed = $performanceName, ${computedResults.computedStat(Stat.NET_RESULT)?.value}")
// Timber.d("Best computed = $performanceName, ${computedResults.computedStat(Stat.NET_RESULT)?.value}")
var storePerf = true
currentPerf?.let {
@ -277,10 +274,10 @@ class ReportTask(private var whistleBlower: ReportWhistleBlower, var context: Co
}
} ?: run { // if there is no max but a now irrelevant Performance, we delete it
Timber.d("NO best computed value, current perf = $currentPerf ")
// Timber.d("NO best computed value, current perf = $currentPerf ")
currentPerf?.let { perf ->
realm.writeAsync { asyncRealm ->
Timber.d("Delete perf: stat = ${perf.stat}, report = ${perf.reportId}")
// Timber.d("Delete perf: stat = ${perf.stat}, report = ${perf.reportId}")
asyncRealm.findById<Performance>(perf.id)?.deleteFromRealm()
// perf.deleteFromRealm()
}

@ -73,7 +73,7 @@ object BankrollReportManager {
var report: BankrollReport? = null
val coroutine = CoroutineScope(context = Dispatchers.IO).async {
val s = Date()
Timber.d(">>>>> start computing bankroll...")
// Timber.d(">>>>> start computing bankroll...")
val realm = Realm.getDefaultInstance()
@ -84,7 +84,7 @@ object BankrollReportManager {
val e = Date()
val duration = (e.time - s.time) / 1000.0
Timber.d(">>>>> ended in $duration seconds")
// Timber.d(">>>>> ended in $duration seconds")
}
coroutine.await()

@ -8,7 +8,6 @@ import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Session
import org.apache.commons.math3.fitting.PolynomialCurveFitter
import org.apache.commons.math3.fitting.WeightedObservedPoints
import timber.log.Timber
import java.util.*
import kotlin.math.pow
import kotlin.math.round
@ -65,7 +64,7 @@ class CashGameOptimalDurationCalculator {
var validBuckets = 0
val hkeys = sessionsByDuration.keys.map { it / 3600 / 1000.0 }.sorted()
Timber.d("Stop notif > keys: $hkeys ")
// Timber.d("Stop notif > keys: $hkeys ")
for (key in sessionsByDuration.keys.sorted()) {
val sessionCount = sessionsByDuration[key]?.size ?: 0
if (start == null && sessionCount >= minimumValidityCount) {
@ -76,15 +75,15 @@ class CashGameOptimalDurationCalculator {
validBuckets++
}
}
Timber.d("Stop notif > validBuckets: $validBuckets ")
// Timber.d("Stop notif > validBuckets: $validBuckets ")
if (!(start != null && end != null && (end - start) >= intervalValidity)) {
Timber.d("Stop notif > invalid setup: $start / $end ")
// Timber.d("Stop notif > invalid setup: $start / $end ")
return null
}
// define if we have enough sessions
if (sessions.size < 50) {
Timber.d("Stop notif > not enough sessions: ${sessions.size} ")
// Timber.d("Stop notif > not enough sessions: ${sessions.size} ")
return null
}
@ -134,7 +133,7 @@ class CashGameOptimalDurationCalculator {
return bestDuration
}
Timber.d("Stop notif > not found, best duration: $bestDuration")
// Timber.d("Stop notif > not found, best duration: $bestDuration")
realm.close()
return null
}

@ -108,7 +108,6 @@ class Query {
return Query(this)
}
/*
Returns the first object Id of any QueryCondition
*/

@ -62,7 +62,7 @@ class Patcher {
patchRatedAmounts()
}
patchPerformances(application)
patchPerformances()
}
@ -196,13 +196,13 @@ class Patcher {
realm.close()
}
private fun patchPerformances(application: PokerAnalyticsApplication) {
private fun patchPerformances() {
val realm = Realm.getDefaultInstance()
val sessionCount = realm.where<Session>().findAll().size
val performanceCount = realm.where<Performance>().findAll().size
if (sessionCount > 1 && performanceCount == 0) {
application.reportWhistleBlower?.requestReportLaunch()
SessionManager.reportWhistleBlower?.requestReportLaunch()
}
realm.close()
}

@ -5,7 +5,6 @@ import io.realm.annotations.Ignore
import io.realm.annotations.PrimaryKey
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.util.UserDefaults
import timber.log.Timber
import java.util.*
open class Currency : RealmObject() {
@ -43,7 +42,7 @@ open class Currency : RealmObject() {
fun refreshRelatedRatedValues() {
Timber.d("refreshRelatedRatedValues of $code")
// Timber.d("refreshRelatedRatedValues of $code")
val rate = this.rate ?: DEFAULT_RATE
val query = this.realm.where(ComputableResult::class.java)
query.`in`("session.bankroll.currency.id", arrayOf(this.id))

@ -43,6 +43,7 @@ open class Filter : RealmObject(), RowRepresentable, RowUpdatable, Deletable, Us
inline fun <reified T : Filterable> queryOn(realm: Realm, query: Query, sortField: String? = null): RealmResults<T> {
val rootQuery = realm.where<T>()
var realmQuery = query.queryWith(rootQuery)
// Timber.d("entity = ${realmQuery.typeQueried} > desc = ${realmQuery.description}")
sortField?.let {
realmQuery = realmQuery.sort(it)
}

@ -135,7 +135,7 @@ open class Result : RealmObject(), Filterable {
}
// Computes the number of rebuy
fun computeNumberOfRebuy() {
private fun computeNumberOfRebuy() {
this.session?.let {
if (it.isCashGame()) {
it.cgBiggestBet?.let { bb ->

@ -100,9 +100,9 @@ open class Session : RealmObject(), Savable, RowRepresentable, Timed,
AnyStake::class.java -> "cgStakes"
NumberOfTable::class.java -> "numberOfTables"
NetAmountWon::class.java, NetAmountLost::class.java -> "computableResults.ratedNet"
NumberOfRebuy::class.java -> "result.numberOfRebuy"
NumberOfRebuy::class.java -> "numberOfRebuy"
TournamentNumberOfPlayer::class.java -> "tournamentNumberOfPlayers"
TournamentFinalPosition::class.java -> "result.tournamentFinalPosition"
TournamentFinalPosition::class.java -> "tournamentFinalPosition"
TournamentFee::class.java -> "tournamentEntryFee"
StartedFromDate::class.java, StartedToDate::class.java, EndedFromDate::class.java, EndedToDate::class.java -> "startDate"
AnyDayOfWeek::class.java, IsWeekEnd::class.java, IsWeekDay::class.java -> "dayOfWeek"
@ -444,9 +444,9 @@ open class Session : RealmObject(), Savable, RowRepresentable, Timed,
} else if (buyin != null || cashout != null) {
useBuyin = true
} else {
if (this.isCashGame() && !this.isLive) {
useBuyin = false
}
if (this.isCashGame() && !this.isLive) {
useBuyin = false
}
}
}
@ -461,7 +461,7 @@ open class Session : RealmObject(), Savable, RowRepresentable, Timed,
// Precompute results
this.addToComputeQueue()
this.sessionSet?.computeStats()
}
// Computes the number of rebuy

@ -15,11 +15,12 @@ import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.model.interfaces.Timed
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.TextFormat
import timber.log.Timber
import java.text.DateFormat
import java.util.*
open class SessionSet() : RealmObject(), Timed, Filterable {
open class SessionSet : RealmObject(), Timed, Filterable {
@PrimaryKey
override var id = UUID.randomUUID().toString()
@ -61,6 +62,7 @@ open class SessionSet() : RealmObject(), Timed, Filterable {
override var netDuration: Long = 0L
fun computeStats() {
Timber.d("compute > session count = ${this.sessions?.size}")
this.ratedNet = this.sessions?.sumOf { it.computableResult?.ratedNet ?: 0.0 } ?: 0.0
this.estimatedHands = this.sessions?.sumOf { it.estimatedHands } ?: 0.0
this.bbNet = this.sessions?.sumOf { it.bbNet } ?: 0.0
@ -75,7 +77,7 @@ open class SessionSet() : RealmObject(), Timed, Filterable {
var ratedNet: Double = 0.0
val hourlyRate: Double
private val hourlyRate: Double
get() {
return this.ratedNet / this.hourlyDuration
}
@ -84,7 +86,7 @@ open class SessionSet() : RealmObject(), Timed, Filterable {
var bbNet: BB = 0.0
val bbHourlyRate: BB
private val bbHourlyRate: BB
get() {
return this.bbNet / this.hourlyDuration
}
@ -100,14 +102,14 @@ open class SessionSet() : RealmObject(), Timed, Filterable {
companion object {
fun newInstance(realm: Realm) : SessionSet {
fun newInstance(realm: Realm): SessionSet {
val sessionSet = SessionSet()
return realm.copyToRealm(sessionSet)
}
fun fieldNameForQueryType(queryCondition: Class < out QueryCondition >): String? {
Session.fieldNameForQueryType(queryCondition)?.let {
return "sessions.$it"
fun fieldNameForQueryType(queryCondition: Class <out QueryCondition>): String? {
Session.fieldNameForQueryType(queryCondition)?.let { fieldName ->
return "sessions.$fieldName"
}
return null
}

@ -16,7 +16,7 @@ class DataUtils {
fun sessionCount(realm: Realm, startDate: Date, endDate: Date?, net: Double): Int {
var sessionQuery = realm.where(Session::class.java)
.equalTo("startDate", startDate)
.equalTo("result.net", net)
.equalTo("net", net)
endDate?.let {
sessionQuery = sessionQuery.equalTo("endDate", it)

@ -1,14 +1,17 @@
package net.pokeranalytics.android.model.utils
import android.content.Context
import io.realm.Realm
import io.realm.RealmQuery
import io.realm.RealmResults
import net.pokeranalytics.android.calculus.ReportWhistleBlower
import net.pokeranalytics.android.exceptions.ModelException
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.SessionSet
import net.pokeranalytics.android.util.extensions.findById
import net.pokeranalytics.android.util.extensions.writeAsync
import timber.log.Timber
import kotlin.math.max
class CorruptSessionSetException(message: String) : Exception(message)
@ -26,16 +29,35 @@ object SessionManager {
// private var netModifiedSessionIds: MutableSet<String> = mutableSetOf()
private var statsToComputeSessionIds: MutableSet<String> = mutableSetOf()
var context: Context? = null
private set
var reportWhistleBlower: ReportWhistleBlower? = null
init {
val realm = Realm.getDefaultInstance()
this.sessions = realm.where(Session::class.java).findAllAsync()
this.sessions?.addChangeListener { results, changeSet ->
this.sessions?.addChangeListener { results ->
if (this.statsToComputeSessionIds.isNotEmpty()) {
results.realm.writeAsync { asyncRealm ->
for (sessionId in statsToComputeSessionIds) {
Timber.d("Session Manager > compute stats")
asyncRealm.findById<Session>(sessionId)?.let { session ->
session.computeStats()
session.sessionSet?.computeStats()
}
}
this.statsToComputeSessionIds.clear()
}
}
if (this.dateModifiedSessionIds.isNotEmpty()) {
results.realm.writeAsync { asyncRealm ->
for (sessionId in dateModifiedSessionIds) {
Timber.d("Session Manager > manage dates")
asyncRealm.findById<Session>(sessionId)?.let { session ->
if (session.endDate != null) {
this.updateTimeline(session)
@ -48,6 +70,8 @@ object SessionManager {
}
}
this.reportWhistleBlower?.requestReportLaunch()
// if (this.netModifiedSessionIds.isNotEmpty()) {
// results.realm.writeAsync { asyncRealm ->
// for (sessionId in netModifiedSessionIds) {
@ -57,22 +81,14 @@ object SessionManager {
// }
// }
if (this.statsToComputeSessionIds.isNotEmpty()) {
results.realm.writeAsync { asyncRealm ->
for (sessionId in statsToComputeSessionIds) {
asyncRealm.findById<Session>(sessionId)?.computeStats()
}
this.statsToComputeSessionIds.clear()
}
}
}
realm.close()
}
fun create() {
// empty, juste called to make sure the singleton is initialized
fun configure(context: Context) {
this.context = context
this.reportWhistleBlower = ReportWhistleBlower(context)
}
fun sessionDateChanged(session: Session) {
@ -90,6 +106,8 @@ object SessionManager {
*/
fun updateTimeline(session: Session) {
Timber.d("updateTimeline...")
if (!session.realm.isInTransaction) {
throw PAIllegalStateException("realm should be in transaction at this point")
}
@ -132,6 +150,7 @@ object SessionManager {
* Does that by deleting then recreating
*/
private fun cleanupSessionSets(session: Session, sessionSets: RealmResults<SessionSet>) {
Timber.d("cleanupSessionSets...")
// get all endedSessions from sets
val allImpactedSessions = mutableSetOf<Session>()
@ -152,11 +171,11 @@ object SessionManager {
}
/**
* Update the global timeline using the impacted [sessionSets] and the updated [session]
*/
private fun updateTimeFrames(sessionSets: RealmResults<SessionSet>, session: Session) {
Timber.d("updateTimeFrames...")
when (sessionSets.size) {
0 -> this.createOrUpdateSessionSet(session)
@ -169,6 +188,7 @@ object SessionManager {
* Creates or update the session set for the [session]
*/
private fun createOrUpdateSessionSet(session: Session) {
Timber.d("createOrUpdateSessionSet...")
val set = session.sessionSet
if (set != null) {
@ -184,6 +204,8 @@ object SessionManager {
* Create a set and affect it to the [session]
*/
private fun createSessionSet(session: Session) {
Timber.d("createSessionSet...")
val set: SessionSet = SessionSet.newInstance(session.realm)
set.startDate = session.startDate!!
set.endDate = session.endDate!!
@ -198,6 +220,8 @@ object SessionManager {
*/
private fun mergeSessionGroups(session: Session, sessionSets: RealmResults<SessionSet>) {
Timber.d("mergeSessionGroups")
var startDate = session.startDate!!
var endDate = session.endDate!!
@ -251,6 +275,8 @@ object SessionManager {
*/
fun removeFromTimeline(session: Session) {
Timber.d("removeFromTimeline")
if (!session.realm.isInTransaction) {
throw PAIllegalStateException("realm should be in transaction at this point")
}

@ -15,6 +15,7 @@ import net.pokeranalytics.android.model.filter.Query
import net.pokeranalytics.android.model.filter.QueryCondition
import net.pokeranalytics.android.model.realm.Currency
import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.utils.SessionManager
import net.pokeranalytics.android.ui.activity.components.BaseActivity
import net.pokeranalytics.android.ui.adapter.HomePagerAdapter
import net.pokeranalytics.android.util.Preferences
@ -48,7 +49,7 @@ class HomeActivity : BaseActivity(), NewPerformanceListener {
private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
if (binding.viewPager.currentItem == Tab.REPORTS.identifier) {
this.paApplication.reportWhistleBlower?.clearNotifications()
SessionManager.reportWhistleBlower?.clearNotifications()
}
when (item.itemId) {
@ -100,13 +101,13 @@ class HomeActivity : BaseActivity(), NewPerformanceListener {
initUI()
checkFirstLaunch()
this.paApplication.reportWhistleBlower?.addListener(this)
SessionManager.reportWhistleBlower?.addListener(this)
}
override fun onDestroy() {
super.onDestroy()
this.paApplication.reportWhistleBlower?.removeListener(this)
SessionManager.reportWhistleBlower?.removeListener(this)
}
private fun observeRealmObjects() {

@ -13,6 +13,7 @@ import kotlinx.coroutines.async
import kotlinx.coroutines.launch
import net.pokeranalytics.android.R
import net.pokeranalytics.android.databinding.FragmentImportBinding
import net.pokeranalytics.android.model.utils.SessionManager
import net.pokeranalytics.android.ui.fragment.components.RealmFragment
import net.pokeranalytics.android.util.csv.CSVImporter
import net.pokeranalytics.android.util.csv.ImportDelegate
@ -91,7 +92,7 @@ class ImportFragment : RealmFragment(), ImportDelegate {
private fun startImport() {
this.parentActivity?.paApplication?.reportWhistleBlower?.pause()
SessionManager.reportWhistleBlower?.pause()
this.importer = CSVImporter(uri, requireContext())
this.importer.delegate = this
@ -142,7 +143,7 @@ class ImportFragment : RealmFragment(), ImportDelegate {
}
private fun end() {
this.parentActivity?.paApplication?.reportWhistleBlower?.resume()
SessionManager.reportWhistleBlower?.resume()
activity?.finish()
}

@ -26,6 +26,7 @@ import net.pokeranalytics.android.model.combined
import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.realm.Performance
import net.pokeranalytics.android.model.realm.ReportSetup
import net.pokeranalytics.android.model.utils.SessionManager
import net.pokeranalytics.android.ui.activity.ReportCreationActivity
import net.pokeranalytics.android.ui.activity.components.ReportActivity
import net.pokeranalytics.android.ui.activity.components.RequestCode
@ -186,13 +187,13 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc
ReportCreationActivity.newInstanceForResult(this, requireContext())
}
this.paApplication?.reportWhistleBlower?.addListener(this)
SessionManager.reportWhistleBlower?.addListener(this)
}
override fun onDestroy() {
super.onDestroy()
this.paApplication?.reportWhistleBlower?.removeListener(this)
SessionManager.reportWhistleBlower?.removeListener(this)
}
// Rows
@ -265,7 +266,7 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc
override fun boolForRow(row: RowRepresentable): Boolean {
val reportRow = row as PerformanceRow
return Preferences.showInAppBadges(requireContext())
&& (this.paApplication?.reportWhistleBlower?.has(reportRow.performance.id) ?: false)
&& (SessionManager.reportWhistleBlower?.has(reportRow.performance.id) ?: false)
}
override fun onRowSelected(position: Int, row: RowRepresentable, tag: Int) {
@ -321,7 +322,7 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc
val report = Calculator.computeStats(realm, options = options)
Timber.d("launchComputation: ${System.currentTimeMillis() - startDate.time}ms")
// Timber.d("launchComputation: ${System.currentTimeMillis() - startDate.time}ms")
launch(Dispatchers.Main) {
if (!isDetached) {
@ -334,7 +335,7 @@ class ReportsFragment : DeletableItemFragment(), StaticRowRepresentableDataSourc
}
override fun newBestPerformanceHandler() {
Timber.d("newBestPerformanceHandler called")
// Timber.d("newBestPerformanceHandler called")
activity?.runOnUiThread {
this.dataListAdapter.notifyDataSetChanged()

@ -29,7 +29,6 @@ import net.pokeranalytics.android.ui.modules.filter.FilterActivityRequestCode
import net.pokeranalytics.android.ui.modules.filter.FilterableType
import net.pokeranalytics.android.ui.modules.filter.FiltersActivity
import net.pokeranalytics.android.ui.modules.settings.TransactionFilterActivity
import timber.log.Timber
import java.util.*
class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
@ -162,7 +161,7 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
val async = CoroutineScope(context = Dispatchers.IO).async {
val s = Date()
Timber.d(">>> start...")
// Timber.d(">>> start...")
val realm = Realm.getDefaultInstance()
realm.refresh()
@ -174,7 +173,7 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
val e = Date()
val duration = (e.time - s.time) / 1000.0
Timber.d(">>> ended in $duration seconds")
// Timber.d(">>> ended in $duration seconds")
}
async.await()
@ -241,7 +240,7 @@ class StatisticsFragment : FilterableFragment(), RealmAsyncListener {
val tSessionGroup = ComputableGroup(Query(QueryCondition.IsTournament).merge(query), tStats)
Timber.d(">>>>> Start computations...")
// Timber.d(">>>>> Start computations...")
val options = Calculator.Options()
val computedStats = mutableListOf<Stat>()

@ -114,7 +114,7 @@ class Top10Fragment : RealmFragment(), RowRepresentableDataSource, RowRepresenta
this.positiveSessions = getRealm().where<Session>()
.isNotNull("startDate")
.isNotNull("endDate")
.greaterThan("result.net", 0.0)
.greaterThan("net", 0.0)
.findAll()
updateTop10()

@ -9,7 +9,6 @@ import io.realm.RealmModel
import io.realm.RealmResults
import kotlinx.coroutines.Dispatchers
import net.pokeranalytics.android.exceptions.PAIllegalStateException
import timber.log.Timber
import kotlin.coroutines.CoroutineContext
interface RealmAsyncListener {
@ -70,7 +69,7 @@ open class RealmFragment : BaseFragment() {
this.changeListener = listener
val results = this.realm.where(clazz).findAllAsync()
results.addChangeListener { t, _ ->
Timber.d("Realm changes: ${realmResults?.size}, $this")
// Timber.d("Realm changes: ${realmResults?.size}, $this")
this.changeListener?.asyncListenedEntityChange(t.realm)
}
this.observedRealmResults.add(results)

@ -30,7 +30,6 @@ import net.pokeranalytics.android.ui.view.rows.CustomizableRowRepresentable
import net.pokeranalytics.android.ui.view.rows.StatRow
import net.pokeranalytics.android.util.NULL_TEXT
import net.pokeranalytics.android.util.TextFormat
import timber.log.Timber
import java.util.*
open class ComposableTableReportFragment : RealmFragment(), StaticRowRepresentableDataSource, CoroutineScope,
@ -208,7 +207,7 @@ open class ComposableTableReportFragment : RealmFragment(), StaticRowRepresentab
var report: Report? = null
val test = CoroutineScope(context = Dispatchers.IO).async {
val s = Date()
Timber.d(">>> start...")
// Timber.d(">>> start...")
val realm = Realm.getDefaultInstance()
realm.refresh()
@ -221,7 +220,7 @@ open class ComposableTableReportFragment : RealmFragment(), StaticRowRepresentab
val e = Date()
val duration = (e.time - s.time) / 1000.0
Timber.d(">>> ended in $duration seconds")
// Timber.d(">>> ended in $duration seconds")
}
test.await()

@ -30,7 +30,6 @@ import net.pokeranalytics.android.ui.extensions.showWithAnimation
import net.pokeranalytics.android.ui.fragment.GraphFragment
import net.pokeranalytics.android.ui.graph.Graph
import net.pokeranalytics.android.ui.helpers.AppReviewManager
import timber.log.Timber
import java.util.*
@ -166,7 +165,7 @@ class ProgressReportFragment : AbstractReportFragment() {
CoroutineScope(context = Dispatchers.IO).launch {
val s = Date()
Timber.d(">>> start...")
// Timber.d(">>> start...")
val realm = Realm.getDefaultInstance()
@ -178,7 +177,7 @@ class ProgressReportFragment : AbstractReportFragment() {
val e = Date()
val duration = (e.time - s.time) / 1000.0
Timber.d(">>> ended in $duration seconds")
// Timber.d(">>> ended in $duration seconds")
launch(Dispatchers.Main) {
setGraphData(report, aggregationType)

@ -38,7 +38,6 @@ import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rows.CustomizableRowRepresentable
import net.pokeranalytics.android.util.extensions.*
import timber.log.Timber
import java.util.*
import kotlin.collections.set
@ -489,7 +488,7 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
sortedMonthlyReports = monthlyReports.toSortedMap(compareByDescending { it })
sortedYearlyReports = yearlyReports.toSortedMap(compareByDescending { it })
Timber.d("Computation: ${System.currentTimeMillis() - startDate.time}ms")
// Timber.d("Computation: ${System.currentTimeMillis() - startDate.time}ms")
}
@ -497,7 +496,7 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
* Display data
*/
private fun displayData() {
Timber.d("displayData")
// Timber.d("displayData")
if (context == null) { return } // required because of launchAsyncStatComputation
@ -593,8 +592,8 @@ class CalendarFragment : RealmFragment(), CoroutineScope, StaticRowRepresentable
}
}
Timber.d("Display data: ${System.currentTimeMillis() - startDate.time}ms")
Timber.d("Rows: ${rows.size}")
// Timber.d("Display data: ${System.currentTimeMillis() - startDate.time}ms")
// Timber.d("Rows: ${rows.size}")
this.calendarAdapter.notifyDataSetChanged()

@ -20,9 +20,7 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.SessionRowView
import net.pokeranalytics.android.util.extensions.getMonthAndYear
import timber.log.Timber
import java.util.*
import kotlin.collections.HashMap
/**
@ -182,7 +180,7 @@ class FeedSessionRowRepresentableAdapter(
allSessions.clear()
allSessions.addAll(this.pendingSessions)
allSessions.addAll(this.startedSessions)
Timber.d("Update session list, total count = ${allSessions.size}")
// Timber.d("Update session list, total count = ${allSessions.size}")
val headersPositions = HashMap<Int, Date?>()
@ -210,7 +208,7 @@ class FeedSessionRowRepresentableAdapter(
}
sortedHeaders = headersPositions.toSortedMap()
Timber.d("Create viewTypesPositions in: ${System.currentTimeMillis() - start}ms")
// Timber.d("Create viewTypesPositions in: ${System.currentTimeMillis() - start}ms")
}
/**

@ -234,9 +234,9 @@ open class FilterDetailsFragment : RealmFragment(), RowRepresentableDelegate {
//TODO: Save currentFilter details data
Timber.d("Save data for queryWith: ${currentFilter?.id}")
this.model.selectedRows.forEach {
Timber.d("Selected rows: $it")
}
// this.model.selectedRows.forEach {
// Timber.d("Selected rows: $it")
// }
this.activityModel.selectedCategoryRow?.let { category ->

@ -443,7 +443,7 @@ class SessionFragment : RealmFragment(), RowRepresentableDelegate, StaticRowRepr
currentSession.scheduleStopNotification(requireContext(), delay)
val formattedDuration = (it / 3600 / 1000).formattedHourlyDuration()
Timber.d("Setting stop notification in: $formattedDuration")
// Timber.d("Setting stop notification in: $formattedDuration")
val message = requireContext().getString(R.string.stop_notification_in_, formattedDuration)
Toast.makeText(requireContext(), message, Toast.LENGTH_LONG).show()
}

@ -40,7 +40,7 @@ class BackupOperator(var context: Context) {
fun backupIfNecessary() {
Timber.d(">>> backupIfNecessary")
// Timber.d(">>> backupIfNecessary")
Preferences.getBackupEmail(context)?.let { email ->
this.backupSessionsIfNecessary(email)

@ -261,7 +261,7 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
}
val net = session.net
if (startDate != null && net != null) { // valid session
if (startDate != null) { // valid session
// session already in realm, we'd love not put it in Realm before doing the check
val count = DataUtils.sessionCount(realm, startDate!!, endDate, net)
if (this.noSessionImport || count == 0) {

Loading…
Cancel
Save