Adds CSV export first bricks

od
Laurent 6 years ago
parent 594f7d5522
commit 294b30e86d
  1. 3
      app/src/main/java/net/pokeranalytics/android/ui/fragment/SettingsFragment.kt
  2. 7
      app/src/main/java/net/pokeranalytics/android/ui/view/rowrepresentable/SettingRow.kt
  3. 22
      app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt
  4. 8
      app/src/main/java/net/pokeranalytics/android/util/csv/CSVField.kt

@ -128,6 +128,9 @@ class SettingsFragment : BaseFragment(), RowRepresentableDelegate, StaticRowRepr
SettingRow.CONTACT_US -> parentActivity?.openContactMail(R.string.contact) SettingRow.CONTACT_US -> parentActivity?.openContactMail(R.string.contact)
SettingRow.BUG_REPORT -> parentActivity?.openContactMail(R.string.bug_report_subject, Realm.getDefaultInstance().path) SettingRow.BUG_REPORT -> parentActivity?.openContactMail(R.string.bug_report_subject, Realm.getDefaultInstance().path)
SettingRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@SettingsFragment, RequestCode.CURRENCY.value) SettingRow.CURRENCY -> CurrenciesActivity.newInstanceForResult(this@SettingsFragment, RequestCode.CURRENCY.value)
SettingRow.EXPORT_CSV -> {
}
SettingRow.FOLLOW_US -> { SettingRow.FOLLOW_US -> {
when (position) { when (position) {
0 -> parentActivity?.openUrl(URL.BLOG.value) 0 -> parentActivity?.openUrl(URL.BLOG.value)

@ -29,6 +29,9 @@ enum class SettingRow : RowRepresentable {
LANGUAGE, LANGUAGE,
CURRENCY, CURRENCY,
// Export
EXPORT_CSV,
// Data management // Data management
CUSTOM_FIELD, CUSTOM_FIELD,
BANKROLL, BANKROLL,
@ -64,6 +67,9 @@ enum class SettingRow : RowRepresentable {
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.preferences)) rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.preferences))
rows.addAll(arrayListOf(CURRENCY)) rows.addAll(arrayListOf(CURRENCY))
rows.add(CustomizableRowRepresentable(customViewType = RowViewType.HEADER_TITLE, resId = R.string.export))
rows.addAll(arrayListOf(EXPORT_CSV))
rows.add( rows.add(
CustomizableRowRepresentable( CustomizableRowRepresentable(
customViewType = RowViewType.HEADER_TITLE, customViewType = RowViewType.HEADER_TITLE,
@ -99,6 +105,7 @@ enum class SettingRow : RowRepresentable {
FOLLOW_US -> R.string.follow_us FOLLOW_US -> R.string.follow_us
LANGUAGE -> R.string.language LANGUAGE -> R.string.language
CURRENCY -> R.string.currency CURRENCY -> R.string.currency
EXPORT_CSV -> R.string.csv
GDPR -> R.string.gdpr GDPR -> R.string.gdpr
POKER_RUMBLE -> R.string.poker_rumble POKER_RUMBLE -> R.string.poker_rumble
DISCORD -> R.string.join_discord DISCORD -> R.string.join_discord

@ -28,7 +28,7 @@ abstract class DataCSVDescriptor<T : Identifiable>(source: DataSource, vararg el
/** /**
* List of Realm object identificators * List of Realm object identificators
*/ */
val realmModelIds = mutableListOf<ObjectIdentifier>() private val realmModelIds = mutableListOf<ObjectIdentifier>()
abstract fun parseData(realm: Realm, record: CSVRecord): T? abstract fun parseData(realm: Realm, record: CSVRecord): T?
@ -75,6 +75,24 @@ abstract class DataCSVDescriptor<T : Identifiable>(source: DataSource, vararg el
this.realmModelIds.clear() this.realmModelIds.clear()
} }
val csvHeaders: String
get() {
val headers = mutableListOf<String>()
this.fields.forEach {
headers.add(it.header)
}
return headers.joinToString(",")
}
fun toCSV(data: T): String {
val fields = mutableListOf<String>()
this.fields.forEach {
// fields.add(it.toCSV(data))
}
return fields.joinToString(",")
}
} }
/** /**
@ -92,7 +110,7 @@ abstract class CSVDescriptor(var source: DataSource, vararg elements: CSVField)
protected var fieldMapping: MutableMap<CSVField, Int> = mutableMapOf() protected var fieldMapping: MutableMap<CSVField, Int> = mutableMapOf()
init { init {
if (elements.size > 0) { if (elements.isNotEmpty()) {
this.fields = elements.toList() this.fields = elements.toList()
} }
} }

@ -48,7 +48,7 @@ interface NumberCSVField: TypedCSVField<Double> {
return try { return try {
formatter.parse(value).toDouble() formatter.parse(value).toDouble()
} catch (e: ParseException) { } catch (e: ParseException) {
Timber.d("Field ${header} > Unparseable number: $value") Timber.d("Field $header > Unparseable number: $value")
null null
} }
} }
@ -65,7 +65,7 @@ interface IntCSVField: TypedCSVField<Int> {
return try { return try {
NumberFormat.getInstance().parse(value).toInt() NumberFormat.getInstance().parse(value).toInt()
} catch (e: ParseException) { } catch (e: ParseException) {
Timber.d("Field ${header} > Unparseable number: $value") Timber.d("Field $header > Unparseable number: $value")
null null
} }
} }
@ -135,9 +135,11 @@ interface TypedCSVField<T> : CSVField {
} }
interface CSVField { interface CSVField {
val header: String val header: String
val optional: Boolean val optional: Boolean
get() { get() {
return false return false
} }
}
}

Loading…
Cancel
Save