|
|
|
|
@ -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") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |