|
|
|
|
@ -6,67 +6,129 @@ import net.pokeranalytics.android.util.NULL_TEXT |
|
|
|
|
import net.pokeranalytics.android.util.UserDefaults |
|
|
|
|
import net.pokeranalytics.android.util.extensions.formatted |
|
|
|
|
import net.pokeranalytics.android.util.extensions.toCurrency |
|
|
|
|
import java.lang.Integer.min |
|
|
|
|
import java.text.NumberFormat |
|
|
|
|
import java.text.ParseException |
|
|
|
|
import java.util.* |
|
|
|
|
|
|
|
|
|
interface StakesHolder { |
|
|
|
|
data class CodedStake(var stakes: String) : Comparable<CodedStake> { |
|
|
|
|
|
|
|
|
|
companion object { |
|
|
|
|
var ante: Double? = null |
|
|
|
|
var blinds: String? = null |
|
|
|
|
var currency: Currency |
|
|
|
|
|
|
|
|
|
private const val cbSeparator = ";" |
|
|
|
|
private const val cbAnte = "A=" |
|
|
|
|
private const val cbBlinds = "B=" |
|
|
|
|
private const val cbCode = "C=" |
|
|
|
|
init { |
|
|
|
|
|
|
|
|
|
fun readableStakes(value: String): String { |
|
|
|
|
var currencyCode: String? = null |
|
|
|
|
|
|
|
|
|
var ante: Double? = null; var blinds: String? = null; var currencyCode: String? = null |
|
|
|
|
|
|
|
|
|
val parameters = value.split(cbSeparator) |
|
|
|
|
parameters.forEach { param -> |
|
|
|
|
when { |
|
|
|
|
param.contains(cbAnte) -> ante = param.removePrefix(cbAnte).let { NumberFormat.getInstance().parse(it)?.toDouble() } |
|
|
|
|
param.contains(cbBlinds) -> blinds = param.removePrefix(cbBlinds) |
|
|
|
|
param.contains(cbCode) -> currencyCode = param.removePrefix(cbCode) |
|
|
|
|
} |
|
|
|
|
val parameters = this.stakes.split(StakesHolder.cbSeparator) |
|
|
|
|
parameters.forEach { param -> |
|
|
|
|
when { |
|
|
|
|
param.contains(StakesHolder.cbAnte) -> ante = param.removePrefix(StakesHolder.cbAnte).let { NumberFormat.getInstance().parse(it)?.toDouble() } |
|
|
|
|
param.contains(StakesHolder.cbBlinds) -> blinds = param.removePrefix(StakesHolder.cbBlinds) |
|
|
|
|
param.contains(StakesHolder.cbCode) -> currencyCode = param.removePrefix( |
|
|
|
|
StakesHolder.cbCode |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
val currency = currencyCode?.let { Currency.getInstance(it) } |
|
|
|
|
?: run { UserDefaults.currency } |
|
|
|
|
this.currency = currencyCode?.let { Currency.getInstance(it) } |
|
|
|
|
?: run { UserDefaults.currency } |
|
|
|
|
|
|
|
|
|
val formattedBlinds = formattedBlinds(blinds, currency) |
|
|
|
|
val formattedAnte = formattedAnte(ante, currency) |
|
|
|
|
return formattedStakes(formattedBlinds, formattedAnte) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun compareTo(other: CodedStake): Int { |
|
|
|
|
|
|
|
|
|
if (this.currency == other.currency) { |
|
|
|
|
|
|
|
|
|
this.blinds?.let { b1 -> |
|
|
|
|
other.blinds?.let { b2 -> |
|
|
|
|
if (b1 == b2) { |
|
|
|
|
return this.compareAnte(other) |
|
|
|
|
} else { |
|
|
|
|
val bv1 = this.reversedBlindsArray(b1) |
|
|
|
|
val bv2 = this.reversedBlindsArray(b2) |
|
|
|
|
|
|
|
|
|
for (i in 0 until min(bv1.size, bv2.size)) { |
|
|
|
|
if (bv1[i] != bv2[i]) { |
|
|
|
|
return bv1[i].compareTo(bv2[i]) |
|
|
|
|
} else { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return bv1.size.compareTo(bv2.size) |
|
|
|
|
} |
|
|
|
|
} ?: run { |
|
|
|
|
return 1 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} ?: run { |
|
|
|
|
return this.compareAnte(other) |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
return this.currency.currencyCode.compareTo(other.currency.currencyCode) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun formattedStakes(formattedBlinds: String?, formattedAnte: String?): String { |
|
|
|
|
val components = arrayListOf<String>() |
|
|
|
|
formattedBlinds?.let { components.add(it) } |
|
|
|
|
formattedAnte?.let { components.add("($it)") } |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return if (components.isNotEmpty()) { |
|
|
|
|
components.joinToString(" ") |
|
|
|
|
} else { |
|
|
|
|
NULL_TEXT |
|
|
|
|
private fun compareAnte(other: CodedStake): Int { |
|
|
|
|
this.ante?.let { a1 -> |
|
|
|
|
other.ante?.let { a2 -> |
|
|
|
|
return a1.compareTo(a2) |
|
|
|
|
} ?: run { |
|
|
|
|
return 1 |
|
|
|
|
} |
|
|
|
|
} ?: run { |
|
|
|
|
return -1 |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun formattedBlinds(blinds: String?, currency: Currency): String? { |
|
|
|
|
blinds?.let { |
|
|
|
|
val placeholder = 1.0 |
|
|
|
|
val regex = Regex("-?\\d+(\\.\\d+)?") |
|
|
|
|
return placeholder.toCurrency(currency).replace(regex, blinds) |
|
|
|
|
} |
|
|
|
|
return null |
|
|
|
|
private fun reversedBlindsArray(blinds: String): List<Double> { |
|
|
|
|
return blinds.split(BLIND_SEPARATOR).mapNotNull { NumberFormat.getInstance().parse(it)?.toDouble() }.reversed() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fun formattedStakes(): String { |
|
|
|
|
val components = arrayListOf<String>() |
|
|
|
|
this.formattedBlinds()?.let { components.add(it) } |
|
|
|
|
this.formattedAnte()?.let { components.add("($it)") } |
|
|
|
|
|
|
|
|
|
return if (components.isNotEmpty()) { |
|
|
|
|
components.joinToString(" ") |
|
|
|
|
} else { |
|
|
|
|
NULL_TEXT |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun formattedAnte(antes: Double?, currency: Currency): String? { |
|
|
|
|
antes?.let { |
|
|
|
|
return it.toCurrency(currency) |
|
|
|
|
} |
|
|
|
|
return null |
|
|
|
|
private fun formattedBlinds(): String? { |
|
|
|
|
this.blinds?.let { |
|
|
|
|
val placeholder = 1.0 |
|
|
|
|
val regex = Regex("-?\\d+(\\.\\d+)?") |
|
|
|
|
return placeholder.toCurrency(currency).replace(regex, it) |
|
|
|
|
} |
|
|
|
|
return null |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private fun formattedAnte(): String? { |
|
|
|
|
this.ante?.let { |
|
|
|
|
return it.toCurrency(this.currency) |
|
|
|
|
} |
|
|
|
|
return null |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interface StakesHolder { |
|
|
|
|
|
|
|
|
|
companion object { |
|
|
|
|
|
|
|
|
|
const val cbSeparator = ";" |
|
|
|
|
const val cbAnte = "A=" |
|
|
|
|
const val cbBlinds = "B=" |
|
|
|
|
const val cbCode = "C=" |
|
|
|
|
|
|
|
|
|
fun readableStakes(value: String): String { |
|
|
|
|
return CodedStake(value).formattedStakes() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
@ -98,7 +160,7 @@ interface StakesHolder { |
|
|
|
|
|
|
|
|
|
fun generateStakes() { |
|
|
|
|
|
|
|
|
|
if (this.ante == null && this.ante == null) { |
|
|
|
|
if (this.ante == null && this.blinds == null) { |
|
|
|
|
setHolderStakes(null) |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|