diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt index 98266561..c9eb0dcf 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/CustomField.kt @@ -251,7 +251,7 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa /** * Add an entry */ - fun addEntry(): CustomFieldEntry { + fun addEmptyEntry(): CustomFieldEntry { val entry = CustomFieldEntry() this.entries.add(entry) sortEntries() @@ -314,4 +314,16 @@ open class CustomField : RealmObject(), NameManageable, StaticRowRepresentableDa } } + fun getOrCreateListEntry(name: String) : CustomFieldEntry { + + this.entries.firstOrNull { it.name == name }?.let { + return it + } + + val entry = this.realm.copyToRealm(CustomFieldEntry()) + entry.name = name + this.entries.add(entry) + return entry + } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt index 53fae129..944bf18b 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/data/CustomFieldDataFragment.kt @@ -216,7 +216,7 @@ class CustomFieldDataFragment : EditableDataFragment(), StaticRowRepresentableDa } addItem.setOnClickListener { - val customFieldEntry = customField.addEntry() + val customFieldEntry = customField.addEmptyEntry() rowRepresentableAdapter.notifyDataSetChanged() onRowSelected(-1, customFieldEntry) } diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVField.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVField.kt index 46d4ba61..a2597622 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/CSVField.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/CSVField.kt @@ -86,10 +86,35 @@ interface BlindCSVField : TypedCSVField> { interface CustomEntryCSVField : TypedCSVField, CustomCSVField { + override fun parse(value: String): CustomFieldEntry? { + return if (value.isNotEmpty()) { + this.customField.getOrCreateListEntry(value) + } else { + null + } + } + } -interface CustomNumberCSVField : NumberCSVField, CustomCSVField { +interface CustomNumberCSVField : TypedCSVField, CustomCSVField { + val numberFormat: String? + + override fun parse(value: String): CustomFieldEntry? { + + val formatter = NumberFormat.getInstance() + + return try { + val number = formatter.parse(value).toDouble() + val entry = this.customField.realm.copyToRealm(CustomFieldEntry()) + entry.numericValue = number + this.customField.entries.add(entry) + entry + } catch (e: ParseException) { + Timber.d("Field ${header} > Unparseable number: $value") + null + } + } } interface CustomCSVField { diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt index 5b76f362..a6dba2da 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/SessionCSVDescriptor.kt @@ -220,6 +220,16 @@ class SessionCSVDescriptor(source: DataSource, private var isTournament: Boolean is SessionField.StackingOut -> { stackingOut = field.parse(value) } + is MappedCustomCVSField.Number -> { + field.parse(value)?.let { + session.customFieldEntries.add(it) + } + } + is MappedCustomCVSField.List -> { + field.parse(value)?.let { + session.customFieldEntries.add(it) + } + } else -> { } } diff --git a/app/src/main/java/net/pokeranalytics/android/util/csv/SessionField.kt b/app/src/main/java/net/pokeranalytics/android/util/csv/SessionField.kt index d9cce18e..d57af082 100644 --- a/app/src/main/java/net/pokeranalytics/android/util/csv/SessionField.kt +++ b/app/src/main/java/net/pokeranalytics/android/util/csv/SessionField.kt @@ -8,20 +8,15 @@ sealed class MappedCustomCVSField { data class Number( override var header: String, - override var callback: ((String) -> Double?)? = null, + override var callback: ((String) -> CustomFieldEntry?)? = null, override val numberFormat: String?, override var customField: CustomField) : CustomNumberCSVField data class List( override var header: String, override var callback: ((String) -> CustomFieldEntry?)? = null, - override var customField: CustomField) : CustomEntryCSVField { - - override fun parse(value: String): CustomFieldEntry? { - TODO("not implemented") //To change body of created functions use File | Settings | File Templates. - } - - } + override var customField: CustomField) : CustomEntryCSVField + } sealed class TransactionField { @@ -160,4 +155,5 @@ sealed class SessionField { override var callback: ((String) -> Double?)? = null, override val numberFormat: String? = null ) : NumberCSVField + }