From 4a4943864bb7a17701bc4f917444c45e849d732a Mon Sep 17 00:00:00 2001 From: Laurent Date: Wed, 20 Jul 2022 15:04:02 +0200 Subject: [PATCH] Fixes import issues --- .../android/model/realm/Session.kt | 2 +- .../android/model/utils/DataUtils.kt | 15 +++++++------ .../android/ui/fragment/ImportFragment.kt | 21 ++++++++++--------- .../android/util/csv/CSVDescriptor.kt | 1 + .../android/util/csv/CSVImporter.kt | 20 +++++++++++------- .../android/util/csv/PACSVDescriptor.kt | 10 +++++---- .../android/util/csv/ProductCSVDescriptors.kt | 2 +- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 9 files changed, 44 insertions(+), 29 deletions(-) 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 dc0b18bd..c2bdcd05 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 @@ -789,7 +789,7 @@ open class Session : RealmObject(), Savable, RowUpdatable, RowRepresentable, Tim // } // } } else if (value == null) { - this.cgBiggestBet = null + this.cgBlinds = null this.cgAnte = null } SessionPropertiesRow.BREAK_TIME -> { diff --git a/app/src/main/java/net/pokeranalytics/android/model/utils/DataUtils.kt b/app/src/main/java/net/pokeranalytics/android/model/utils/DataUtils.kt index 2e0bd3a6..e342d746 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/utils/DataUtils.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/utils/DataUtils.kt @@ -11,15 +11,18 @@ class DataUtils { companion object { /** - * Returns true if the provided parameters doesn't correspond to an existing session + * Returns the number of sessions corresponding to the provided parameters */ - fun sessionCount(realm: Realm, startDate: Date, endDate: Date, net: Double): Int { - val sessions = realm.where(Session::class.java) + fun sessionCount(realm: Realm, startDate: Date, endDate: Date?, net: Double): Int { + var sessionQuery = realm.where(Session::class.java) .equalTo("startDate", startDate) - .equalTo("endDate", endDate) .equalTo("result.net", net) - .findAll() - return sessions.size + + endDate?.let { + sessionQuery = sessionQuery.equalTo("endDate", it) + } + + return sessionQuery.findAll().size } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt index b4c56d5d..a01560de 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/ImportFragment.kt @@ -31,7 +31,9 @@ class ImportFragment : RealmFragment(), ImportDelegate { private var _binding: FragmentImportBinding? = null private val binding get() = _binding!! - // Life Cycle + private val exceptions: MutableList = mutableListOf() + + // Life Cycle override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { super.onCreateView(inflater, container, savedInstanceState) @@ -44,7 +46,6 @@ class ImportFragment : RealmFragment(), ImportDelegate { _binding = null } - fun setData(path: String) { this.filePath = path } @@ -90,7 +91,6 @@ class ImportFragment : RealmFragment(), ImportDelegate { this.importer = CSVImporter(inputStream) this.importer.delegate = this - var exception: Exception? = null GlobalScope.launch(coroutineContext) { @@ -98,11 +98,8 @@ class ImportFragment : RealmFragment(), ImportDelegate { val s = Date() Timber.d(">>> Start Import...") - try { - importer.start() - } catch (e: Exception) { - exception = e - } + importer.start() + val e = Date() val duration = (e.time - s.time) / 1000.0 Timber.d(">>> Import ended in $duration seconds") @@ -110,9 +107,9 @@ class ImportFragment : RealmFragment(), ImportDelegate { } test.await() - val exceptionMessage = exception?.message + val exceptionMessage = exceptions.firstOrNull()?.message if (exceptionMessage != null && view != null) { - val message = exceptionMessage + ". " + requireContext().getString(R.string.import_error) + val message = "${exceptions.size} " + requireContext().getString(R.string.errors) + ":\n" + exceptionMessage + ".\n" + requireContext().getString(R.string.import_error) val snackBar = Snackbar.make(view!!, message, Snackbar.LENGTH_INDEFINITE) snackBar.setAction(R.string.ok) { snackBar.dismiss() @@ -160,4 +157,8 @@ class ImportFragment : RealmFragment(), ImportDelegate { binding.totalCounter.text = this.numberFormatter.format(totalCount) } + override fun exceptionCaught(e: Exception) { + this.exceptions.add(e) + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt index e5e6b070..774cc807 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt @@ -14,6 +14,7 @@ import timber.log.Timber */ enum class DataSource { POKER_ANALYTICS, + POKER_ANALYTICS_6, POKER_INCOME, POKER_BANKROLL_TRACKER, RUN_GOOD, diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt index 38998792..ef022876 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVImporter.kt @@ -3,8 +3,6 @@ package net.pokeranalytics.android.util.csv import android.os.Handler import android.os.Looper import io.realm.Realm -import net.pokeranalytics.android.model.realm.Session -import net.pokeranalytics.android.util.extensions.count import org.apache.commons.csv.CSVFormat import org.apache.commons.csv.CSVParser import org.apache.commons.csv.CSVRecord @@ -18,6 +16,7 @@ class ImportException(message: String) : Exception(message) interface ImportDelegate { fun parsingCountUpdate(importedCount: Int, totalCount: Int) + fun exceptionCaught(e: Exception) } /** @@ -107,7 +106,7 @@ open class CSVImporter(istream: InputStream) { realm.beginTransaction() - parser.forEachIndexed { index, record -> + this.parser.forEachIndexed { index, record -> // Timber.d("line $index") this.notifyDelegate() @@ -146,12 +145,19 @@ open class CSVImporter(istream: InputStream) { null // reset descriptor when encountering an empty line (multiple descriptors can be found in a single file) this.descriptorFindingAttempts = 0 } else { - val count = it.parse(realm, record) - this.importedRecords += count - this.totalParsedRecords++ + try { + val count = it.parse(realm, record) + + this.importedRecords += count + this.totalParsedRecords++ + + this.notifyDelegate() + + } catch (e: Exception) { + this.delegate?.exceptionCaught(e) + } - this.notifyDelegate() } } ?: run { realm.cancelTransaction() diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt index dcb1b3c3..3feb96e6 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt @@ -1,11 +1,11 @@ package net.pokeranalytics.android.util.csv -import net.pokeranalytics.android.model.interfaces.Identifiable import io.realm.Realm import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.Limit import net.pokeranalytics.android.model.TableSize import net.pokeranalytics.android.model.TournamentType +import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.realm.* import net.pokeranalytics.android.model.utils.DataUtils import net.pokeranalytics.android.util.BLIND_SEPARATOR @@ -80,7 +80,9 @@ abstract class PACSVDescriptor(source: DataSource, } else {} } is SessionField.End -> { - endDate = parseDate(field, value) + if (value.isNotEmpty()) { + endDate = parseDate(field, value) + } } is SessionField.StartTime -> { startDate?.setHourMinutes(value) @@ -276,9 +278,9 @@ abstract class PACSVDescriptor(source: DataSource, } val net = session.result?.net - if (startDate != null && endDate != null && net != null) { // valid session + if (startDate != null && net != 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) + val count = DataUtils.sessionCount(realm, startDate!!, endDate, net) if (this.noSessionImport || count == 0) { val managedSession = realm.copyToRealm(session) diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/ProductCSVDescriptors.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/ProductCSVDescriptors.kt index 05bdf663..b5d79fe2 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/ProductCSVDescriptors.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/ProductCSVDescriptors.kt @@ -279,7 +279,7 @@ class ProductCSVDescriptors { val pokerAnalyticsAndroid6Sessions: SessionCSVDescriptor get() { return SessionCSVDescriptor( - DataSource.POKER_ANALYTICS, + DataSource.POKER_ANALYTICS_6, true, SessionField.Start("Start Date", dateFormat = "MM/dd/yy HH:mm:ss"), SessionField.End("End Date", dateFormat = "MM/dd/yy HH:mm:ss"), diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index ab9ff401..e368e28a 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -778,4 +778,5 @@ estimation Vous pouvez changer le nombre de mains distribuées par heure. Cette valeur correspond au nombre total de mains distribuées à tous les joueur d\'une table en une heure. Exemple: Vous jouez 25 mains par heure sur des tables de 10 joueurs, entrez: 10 x 25 = 250. Mains par heure + erreur(s) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aa2a30d9..74a9b5db 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -821,5 +821,6 @@ You need to give a name to the report The hand you\'ve created has suit wildcards. By convenience - sorry! - we\'re currently removing such cards to determine which hand wins, resulting in potentially wrong chip distribution. proceed + error(s)