|
|
|
|
@ -39,6 +39,7 @@ import net.pokeranalytics.android.ui.view.rowrepresentable.SessionRow |
|
|
|
|
import net.pokeranalytics.android.util.NULL_TEXT |
|
|
|
|
import net.pokeranalytics.android.util.UserDefaults |
|
|
|
|
import net.pokeranalytics.android.util.extensions.* |
|
|
|
|
import timber.log.Timber |
|
|
|
|
import java.text.DateFormat |
|
|
|
|
import java.util.* |
|
|
|
|
import java.util.Currency |
|
|
|
|
@ -67,34 +68,34 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
return realm.copyToRealm(session) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fun fieldNameForQueryType(queryCondition: Class < out QueryCondition >): String? { |
|
|
|
|
return when (queryCondition) { |
|
|
|
|
fun fieldNameForQueryType(queryCondition: Class<out QueryCondition>): String? { |
|
|
|
|
return when (queryCondition) { |
|
|
|
|
IsLive::class.java, IsOnline::class.java -> "bankroll.live" |
|
|
|
|
IsCash::class.java, IsTournament::class.java -> "type" |
|
|
|
|
AnyBankroll::class.java -> "bankroll.id" |
|
|
|
|
AnyGame::class.java -> "game.id" |
|
|
|
|
AnyTournamentName::class.java -> "tournamentName.id" |
|
|
|
|
AnyTournamentFeature::class.java, AllTournamentFeature::class.java -> "tournamentFeatures.id" |
|
|
|
|
AnyLocation::class.java -> "location.id" |
|
|
|
|
AnyLimit::class.java -> "limit" |
|
|
|
|
AnyTableSize::class.java -> "tableSize" |
|
|
|
|
AnyTournamentType::class.java -> "tournamentType" |
|
|
|
|
AnyBlind::class.java -> "blinds" |
|
|
|
|
NumberOfTable::class.java -> "numberOfTable" |
|
|
|
|
NetAmountWon::class.java, NetAmountLost::class.java -> "computableResults.ratedNet" |
|
|
|
|
NumberOfRebuy::class.java -> "result.numberOfRebuy" |
|
|
|
|
TournamentNumberOfPlayer::class.java -> "result.tournamentNumberOfPlayers" |
|
|
|
|
TournamentFinalPosition::class.java -> "result.tournamentFinalPosition" |
|
|
|
|
TournamentFee::class.java -> "tournamentEntryFee" |
|
|
|
|
StartedFromDate::class.java, StartedToDate::class.java -> "startDate" |
|
|
|
|
EndedFromDate::class.java, EndedToDate::class.java -> "endDate" |
|
|
|
|
AnyDayOfWeek::class.java, IsWeekEnd::class.java, IsWeekDay::class.java -> "dayOfWeek" |
|
|
|
|
AnyMonthOfYear::class.java -> "month" |
|
|
|
|
AnyYear::class.java -> "year" |
|
|
|
|
AnyGame::class.java -> "game.id" |
|
|
|
|
AnyTournamentName::class.java -> "tournamentName.id" |
|
|
|
|
AnyTournamentFeature::class.java, AllTournamentFeature::class.java -> "tournamentFeatures.id" |
|
|
|
|
AnyLocation::class.java -> "location.id" |
|
|
|
|
AnyLimit::class.java -> "limit" |
|
|
|
|
AnyTableSize::class.java -> "tableSize" |
|
|
|
|
AnyTournamentType::class.java -> "tournamentType" |
|
|
|
|
AnyBlind::class.java -> "blinds" |
|
|
|
|
NumberOfTable::class.java -> "numberOfTable" |
|
|
|
|
NetAmountWon::class.java, NetAmountLost::class.java -> "computableResults.ratedNet" |
|
|
|
|
NumberOfRebuy::class.java -> "result.numberOfRebuy" |
|
|
|
|
TournamentNumberOfPlayer::class.java -> "result.tournamentNumberOfPlayers" |
|
|
|
|
TournamentFinalPosition::class.java -> "result.tournamentFinalPosition" |
|
|
|
|
TournamentFee::class.java -> "tournamentEntryFee" |
|
|
|
|
StartedFromDate::class.java, StartedToDate::class.java -> "startDate" |
|
|
|
|
EndedFromDate::class.java, EndedToDate::class.java -> "endDate" |
|
|
|
|
AnyDayOfWeek::class.java, IsWeekEnd::class.java, IsWeekDay::class.java -> "dayOfWeek" |
|
|
|
|
AnyMonthOfYear::class.java -> "month" |
|
|
|
|
AnyYear::class.java -> "year" |
|
|
|
|
IsToday::class.java, WasYesterday::class.java, WasTodayAndYesterday::class.java, DuringThisYear::class.java, DuringThisMonth::class.java, DuringThisWeek::class.java -> "startDate" |
|
|
|
|
StartedFromTime::class.java -> "startDateHourMinuteComponent" |
|
|
|
|
EndedToTime::class.java -> "endDateHourMinuteComponent" |
|
|
|
|
Duration::class.java -> "netDuration" |
|
|
|
|
StartedFromTime::class.java -> "startDateHourMinuteComponent" |
|
|
|
|
EndedToTime::class.java -> "endDateHourMinuteComponent" |
|
|
|
|
Duration::class.java -> "netDuration" |
|
|
|
|
else -> null |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -125,25 +126,25 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
override var year: Int? = null |
|
|
|
|
override var dayOfMonth: Int? = null |
|
|
|
|
|
|
|
|
|
private var startDateHourMinuteComponent: Double? = null |
|
|
|
|
get() { |
|
|
|
|
if (field == null && startDate != null) { |
|
|
|
|
val cal = Calendar.getInstance() |
|
|
|
|
cal.time = startDate |
|
|
|
|
field = cal.hourMinute() |
|
|
|
|
} |
|
|
|
|
return field |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private var endDateHourMinuteComponent: Double? = null |
|
|
|
|
get() { |
|
|
|
|
if (field == null && endDate != null) { |
|
|
|
|
val cal = Calendar.getInstance() |
|
|
|
|
cal.time = endDate |
|
|
|
|
field = cal.hourMinute() |
|
|
|
|
} |
|
|
|
|
return field |
|
|
|
|
} |
|
|
|
|
private var startDateHourMinuteComponent: Double? = null |
|
|
|
|
get() { |
|
|
|
|
if (field == null && startDate != null) { |
|
|
|
|
val cal = Calendar.getInstance() |
|
|
|
|
cal.time = startDate |
|
|
|
|
field = cal.hourMinute() |
|
|
|
|
} |
|
|
|
|
return field |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private var endDateHourMinuteComponent: Double? = null |
|
|
|
|
get() { |
|
|
|
|
if (field == null && endDate != null) { |
|
|
|
|
val cal = Calendar.getInstance() |
|
|
|
|
cal.time = endDate |
|
|
|
|
field = cal.hourMinute() |
|
|
|
|
} |
|
|
|
|
return field |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* The start date of the session |
|
|
|
|
@ -151,13 +152,13 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
var startDate: Date? = null |
|
|
|
|
set(value) { |
|
|
|
|
field = value |
|
|
|
|
if (field == null) { |
|
|
|
|
startDateHourMinuteComponent = null |
|
|
|
|
} else { |
|
|
|
|
val cal = Calendar.getInstance() |
|
|
|
|
cal.time = field |
|
|
|
|
startDateHourMinuteComponent = cal.hourMinute() |
|
|
|
|
} |
|
|
|
|
if (field == null) { |
|
|
|
|
startDateHourMinuteComponent = null |
|
|
|
|
} else { |
|
|
|
|
val cal = Calendar.getInstance() |
|
|
|
|
cal.time = field |
|
|
|
|
startDateHourMinuteComponent = cal.hourMinute() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.updateTimeParameter(field) |
|
|
|
|
this.computeNetDuration() |
|
|
|
|
@ -176,15 +177,15 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
var endDate: Date? = null |
|
|
|
|
set(value) { |
|
|
|
|
field = value |
|
|
|
|
if (field == null) { |
|
|
|
|
endDateHourMinuteComponent = null |
|
|
|
|
} else { |
|
|
|
|
val cal = Calendar.getInstance() |
|
|
|
|
cal.time = field |
|
|
|
|
endDateHourMinuteComponent = cal.hourMinute() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.computeNetDuration() |
|
|
|
|
if (field == null) { |
|
|
|
|
endDateHourMinuteComponent = null |
|
|
|
|
} else { |
|
|
|
|
val cal = Calendar.getInstance() |
|
|
|
|
cal.time = field |
|
|
|
|
endDateHourMinuteComponent = cal.hourMinute() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
this.computeNetDuration() |
|
|
|
|
this.dateChanged() |
|
|
|
|
this.defineDefaultTournamentBuyinIfNecessary() |
|
|
|
|
this.computeStats() |
|
|
|
|
@ -266,7 +267,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
field = value |
|
|
|
|
this.computeStats() |
|
|
|
|
formatBlinds() |
|
|
|
|
this.result?.computeNumberOfRebuy() |
|
|
|
|
this.result?.computeNumberOfRebuy() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var blinds: String? = null |
|
|
|
|
@ -276,10 +277,10 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
|
|
|
|
|
// The entry fee of the tournament |
|
|
|
|
var tournamentEntryFee: Double? = null |
|
|
|
|
set(value) { |
|
|
|
|
field = value |
|
|
|
|
this.result?.computeNumberOfRebuy() |
|
|
|
|
} |
|
|
|
|
set(value) { |
|
|
|
|
field = value |
|
|
|
|
this.result?.computeNumberOfRebuy() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// The total number of players who participated in the tournament |
|
|
|
|
var tournamentNumberOfPlayers: Int? = null |
|
|
|
|
@ -293,6 +294,9 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
// The features of the tournament, like Knockout, Shootout, Turbo... |
|
|
|
|
var tournamentFeatures: RealmList<TournamentFeature> = RealmList() |
|
|
|
|
|
|
|
|
|
// The custom fields values |
|
|
|
|
var customFieldEntries: RealmList<CustomFieldEntry> = RealmList() |
|
|
|
|
|
|
|
|
|
fun bankrollHasBeenUpdated() { |
|
|
|
|
formatBlinds() |
|
|
|
|
} |
|
|
|
|
@ -574,7 +578,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
return blinds ?: NULL_TEXT |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fun formatBlinds() { |
|
|
|
|
fun formatBlinds() { |
|
|
|
|
blinds = null |
|
|
|
|
if (cgBigBlind == null) return |
|
|
|
|
cgBigBlind?.let { bb -> |
|
|
|
|
@ -589,9 +593,11 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
* Delete the object from realm |
|
|
|
|
*/ |
|
|
|
|
fun delete() { |
|
|
|
|
realm.executeTransaction { |
|
|
|
|
cleanup() |
|
|
|
|
deleteFromRealm() |
|
|
|
|
if (isValid) { |
|
|
|
|
realm.executeTransaction { |
|
|
|
|
cleanup() |
|
|
|
|
deleteFromRealm() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -613,6 +619,16 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
@Ignore |
|
|
|
|
override val viewType: Int = RowViewType.ROW_SESSION.ordinal |
|
|
|
|
|
|
|
|
|
// Override to surcharge custom field viewType |
|
|
|
|
override fun viewTypeForPosition(position: Int): Int { |
|
|
|
|
rowRepresentationForCurrentState[position].let { |
|
|
|
|
if (it is CustomField) { |
|
|
|
|
return RowViewType.TITLE_VALUE.ordinal |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return super.viewTypeForPosition(position) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
override fun getDisplayName(context: Context): String { |
|
|
|
|
return "Session ${this.creationDate}" |
|
|
|
|
} |
|
|
|
|
@ -678,6 +694,13 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
|
|
|
|
|
// Rows |
|
|
|
|
rows.addAll(SessionRow.getRows(this)) |
|
|
|
|
|
|
|
|
|
// Add custom fields |
|
|
|
|
realm?.let { |
|
|
|
|
rows.add(SeparatorRow()) |
|
|
|
|
rows.addAll(LiveData.CUSTOM_FIELD.itemsArray(it) as ArrayList<RowRepresentable>) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return rows |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -711,10 +734,12 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
SessionRow.START_DATE -> this.startDate?.shortDateTime() ?: NULL_TEXT |
|
|
|
|
SessionRow.TABLE_SIZE -> this.tableSize?.let { TableSize(it).localizedTitle(context) } ?: NULL_TEXT |
|
|
|
|
SessionRow.TIPS -> result?.tips?.toCurrency(currency) ?: NULL_TEXT |
|
|
|
|
SessionRow.TOURNAMENT_TYPE -> this.tournamentType?.let { |
|
|
|
|
TournamentType.values()[it].localizedTitle(context) |
|
|
|
|
} ?: run { |
|
|
|
|
NULL_TEXT |
|
|
|
|
SessionRow.TOURNAMENT_TYPE -> { |
|
|
|
|
this.tournamentType?.let { |
|
|
|
|
TournamentType.values()[it].localizedTitle(context) |
|
|
|
|
} ?: run { |
|
|
|
|
NULL_TEXT |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
SessionRow.TOURNAMENT_FEATURE -> { |
|
|
|
|
if (tournamentFeatures.size > 2) { |
|
|
|
|
@ -730,6 +755,12 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
SessionRow.TOURNAMENT_NAME -> tournamentName?.name ?: NULL_TEXT |
|
|
|
|
is CustomField -> { |
|
|
|
|
customFieldEntries.find { it.customField?.id == row.id }?.let { customFieldEntry -> |
|
|
|
|
return customFieldEntry.getFormattedValue(currency) |
|
|
|
|
} |
|
|
|
|
return NULL_TEXT |
|
|
|
|
} |
|
|
|
|
else -> throw UnmanagedRowRepresentableException("Unmanaged row = ${row}") |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -837,6 +868,19 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
"tips" to result?.tips |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
is CustomField -> { |
|
|
|
|
row.editingDescriptors( |
|
|
|
|
when (row.type) { |
|
|
|
|
CustomField.Type.LIST.uniqueIdentifier -> mapOf( |
|
|
|
|
"defaultValue" to customFieldEntries.find { it.customField?.id == row.id }?.value, |
|
|
|
|
"data" to row.entries |
|
|
|
|
) |
|
|
|
|
else -> mapOf( |
|
|
|
|
"defaultValue" to customFieldEntries.find { it.customField?.id == row.id }?.value |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
) |
|
|
|
|
} |
|
|
|
|
else -> null |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -946,7 +990,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
result = localResult |
|
|
|
|
} |
|
|
|
|
SessionRow.TOURNAMENT_NAME -> tournamentName = value as TournamentName? |
|
|
|
|
SessionRow.TOURNAMENT_TYPE -> tournamentType = value as Int? |
|
|
|
|
SessionRow.TOURNAMENT_TYPE -> tournamentType = (value as TournamentType?)?.ordinal |
|
|
|
|
SessionRow.TOURNAMENT_FEATURE -> { |
|
|
|
|
|
|
|
|
|
value?.let { |
|
|
|
|
@ -956,6 +1000,33 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
tournamentFeatures.removeAll(this.tournamentFeatures) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
is CustomField -> { |
|
|
|
|
customFieldEntries.filter { it.customField?.id == row.id }.let { |
|
|
|
|
customFieldEntries.removeAll(it) |
|
|
|
|
} |
|
|
|
|
when (row.type) { |
|
|
|
|
CustomField.Type.AMOUNT.uniqueIdentifier, |
|
|
|
|
CustomField.Type.NUMBER.uniqueIdentifier -> { |
|
|
|
|
Timber.d("AMOUNT or NUMBER: ${value}") |
|
|
|
|
if (value != null) { |
|
|
|
|
val customFieldEntry = CustomFieldEntry() |
|
|
|
|
customFieldEntry.customField = row |
|
|
|
|
customFieldEntry.value = value.toString() |
|
|
|
|
Timber.d("customFieldEntry: ${customFieldEntry.id}") |
|
|
|
|
Timber.d("customFieldEntry: ${customFieldEntry.customField}") |
|
|
|
|
Timber.d("customFieldEntry: ${customFieldEntry.value}") |
|
|
|
|
customFieldEntries.add(customFieldEntry) |
|
|
|
|
} |
|
|
|
|
Timber.d("customFieldEntries: ${customFieldEntries.size}") |
|
|
|
|
} |
|
|
|
|
CustomField.Type.LIST.uniqueIdentifier -> { |
|
|
|
|
if (value != null && value is CustomFieldEntry) { |
|
|
|
|
customFieldEntries.add(value) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1013,7 +1084,7 @@ open class Session : RealmObject(), Savable, Editable, StaticRowRepresentableDat |
|
|
|
|
style: GraphFragment.Style, |
|
|
|
|
groupName: String, |
|
|
|
|
context: Context |
|
|
|
|
) : LegendContent { |
|
|
|
|
): LegendContent { |
|
|
|
|
|
|
|
|
|
when (style) { |
|
|
|
|
GraphFragment.Style.MULTILINE -> { |
|
|
|
|
|