PBT import fix

blinds
Laurent 5 years ago
parent 6c6cf9a60f
commit 2e3d00ce41
  1. 13
      app/src/main/java/net/pokeranalytics/android/util/csv/CSVDescriptor.kt
  2. 45
      app/src/main/java/net/pokeranalytics/android/util/csv/PACSVDescriptor.kt
  3. 2
      app/src/main/java/net/pokeranalytics/android/util/csv/ProductCSVDescriptors.kt
  4. 10
      app/src/main/java/net/pokeranalytics/android/util/csv/SessionField.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/util/csv/SessionTransactionCSVDescriptor.kt

@ -17,7 +17,16 @@ enum class DataSource {
POKER_INCOME,
POKER_BANKROLL_TRACKER,
RUN_GOOD,
POKER_AGENT
POKER_AGENT;
val availableDateFormats: List<String>
get() {
return when(this) {
POKER_BANKROLL_TRACKER -> listOf("MM/dd/yy HH:mm", "yyyy-MM-dd HH:mm:ss")
else -> listOf()
}
}
}
/**
@ -102,8 +111,6 @@ abstract class DataCSVDescriptor<T : Identifiable>(source: DataSource, vararg el
return null
}
// abstract fun
}
/**

@ -12,6 +12,9 @@ import net.pokeranalytics.android.util.extensions.getOrCreate
import net.pokeranalytics.android.util.extensions.setHourMinutes
import org.apache.commons.csv.CSVRecord
import timber.log.Timber
import java.text.DateFormat
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
@ -23,6 +26,8 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
private var currentDay: String = ""
private var startInSeconds: Double = 20 * 3600.0
private var dateFormat: DateFormat? = null
/**
* Parses a [record] and return an optional Session
*/
@ -35,7 +40,7 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
var endDate: Date? = null
var isLive = true
var bankrollName = ""
var bankrollName = "Import"
var currencyCode: String? = null
var currencyRate: Double? = null
var additionalBuyins = 0.0 // rebuy + addon
@ -50,7 +55,7 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
val value = record.get(index)
when (field) {
is SessionField.Start -> {
startDate = field.parse(value)
startDate = parseDate(field, value)
if (source == DataSource.POKER_AGENT) {
if (currentDay == value) {
sameDaySessionCount++
@ -61,7 +66,7 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
} else {}
}
is SessionField.End -> {
endDate = field.parse(value)
endDate = parseDate(field, value)
}
is SessionField.StartTime -> {
startDate?.setHourMinutes(value)
@ -226,10 +231,6 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
}
if (bankrollName.isEmpty()) {
bankrollName = "Import"
}
val bankroll = Bankroll.getOrCreate(realm, bankrollName, isLive, currencyCode, currencyRate)
session.bankroll = bankroll
@ -270,4 +271,34 @@ abstract class PACSVDescriptor<T : Identifiable>(source: DataSource,
return null
}
private fun parseDate(field: DateCSVField, value: String): Date {
try {
this.dateFormat?.parse(value)?.let { date ->
return date
}
} catch (e: ParseException) {
}
// if date null or exception
// try to find another valid dateformat
val formats = this.source.availableDateFormats.toMutableList()
field.dateFormat?.let { dateFormat ->
formats.add(0, dateFormat)
}
for (dateFormat in formats) {
val df = SimpleDateFormat(dateFormat)
try {
df.parse(value)?.let { date ->
this.dateFormat = df
return date
}
} catch (e: ParseException) {
}
}
throw PAIllegalStateException("No date format found to parse date: $value")
}
}

@ -157,7 +157,7 @@ class ProductCSVDescriptors {
)
}
val pokerAnalyticsiOS: SessionCSVDescriptor
private val pokerAnalyticsiOS: SessionCSVDescriptor
get() {
return SessionCSVDescriptor(
DataSource.POKER_ANALYTICS,

@ -10,7 +10,7 @@ sealed class TrField {
data class TransactionDate(
override var header: String,
override var callback: ((String) -> Date?)? = null,
override val dateFormat: String? = null
override val dateFormat: String? = null,
) : DateCSVField
data class Amount(
@ -45,25 +45,25 @@ sealed class SessionField {
data class Start(
override var header: String,
override var callback: ((String) -> Date?)? = null,
override val dateFormat: String? = null
override val dateFormat: String? = null,
) : DateCSVField
data class StartTime(
override var header: String,
override var callback: ((String) -> Date?)? = null,
override val dateFormat: String? = null
override val dateFormat: String? = null,
) : DateCSVField
data class End(
override var header: String,
override var callback: ((String) -> Date?)? = null,
override val dateFormat: String? = null
override val dateFormat: String? = null,
) : DateCSVField
data class EndTime(
override var header: String,
override var callback: ((String) -> Date?)? = null,
override val dateFormat: String? = null
override val dateFormat: String? = null,
) : DateCSVField
data class Duration(

@ -13,7 +13,7 @@ import java.util.*
/**
* A SessionCSVDescriptor is a CSVDescriptor specialized in parsing Session objects
*/
class SessionTransactionCSVDescriptor(source: DataSource, private var isTournament: Boolean?, vararg elements: CSVField) :
class SessionTransactionCSVDescriptor(source: DataSource, isTournament: Boolean?, vararg elements: CSVField) :
PACSVDescriptor<Identifiable>(source, isTournament, *elements) {
private enum class DataType {

Loading…
Cancel
Save