From fc43bc75c2d334937167b99f22de49a420e1d781 Mon Sep 17 00:00:00 2001 From: Laurent Date: Tue, 25 Feb 2020 19:23:26 +0100 Subject: [PATCH] Adds compacting for text export --- .../android/model/realm/handhistory/Action.kt | 24 +++++++++++++++++++ .../android/model/realm/handhistory/Card.kt | 4 ++-- .../model/realm/handhistory/HandHistory.kt | 22 +++++++++++------ 3 files changed, 41 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Action.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Action.kt index d34607a5..7969fdaf 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Action.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Action.kt @@ -3,11 +3,35 @@ package net.pokeranalytics.android.model.realm.handhistory import io.realm.RealmObject import net.pokeranalytics.android.R import net.pokeranalytics.android.exceptions.PAIllegalStateException +import net.pokeranalytics.android.model.handhistory.Position import net.pokeranalytics.android.model.handhistory.Street +import net.pokeranalytics.android.ui.modules.handhistory.model.ActionReadRow import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.RowViewType import net.pokeranalytics.android.util.extensions.formatted + +/*** + * An extension to transform a list of ComputedAction into + * a more compact and read-friendly list of ActionReadRow + */ +fun List.compact(positions: LinkedHashSet): List { + val rows = mutableListOf() + this.forEach { + if (it.type == Action.Type.FOLD && rows.lastOrNull()?.action == Action.Type.FOLD) { + rows.lastOrNull()?.positions?.add(positions.elementAt(it.position)) + } else { + rows.add(it.toReadRow(positions)) + } + } + return rows +} + +fun Action.toReadRow(positions: LinkedHashSet): ActionReadRow { + val pos = positions.elementAt(this.position) + return ActionReadRow(mutableListOf(pos), this.type, this.amount) +} + open class Action : RealmObject() { enum class Type(override var resId: Int) : RowRepresentable { diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt index a4cdcf13..ae242505 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/Card.kt @@ -39,8 +39,8 @@ fun List.formatted(context: Context) : CharSequence? { open class Card : RealmObject() { companion object { - fun newInstance(realm: Realm, value: Int? = null, suit: Suit? = null, index: Int = 0) : Card { - val card = realm.createObject(Card::class.java) + fun newInstance(realm: Realm?, value: Int? = null, suit: Suit? = null, index: Int = 0) : Card { + val card = if (realm != null) realm.createObject(Card::class.java) else Card() value?.let { card.value = it } suit?.let { card.suit = it} card.index = index diff --git a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt index ac67473f..312f43f6 100644 --- a/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt +++ b/app/src/main/java/net/pokeranalytics/android/model/realm/handhistory/HandHistory.kt @@ -17,6 +17,7 @@ import net.pokeranalytics.android.model.handhistory.Street import net.pokeranalytics.android.model.interfaces.Identifiable import net.pokeranalytics.android.model.interfaces.TimeFilterable import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.ui.modules.handhistory.model.ActionReadRow import net.pokeranalytics.android.ui.modules.handhistory.model.CardHolder import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.util.extensions.addLineReturn @@ -207,7 +208,13 @@ open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterab } fun createPlayerSetup(positionIndex: Int): PlayerSetup { - val playerSetup = this.realm.createObject(PlayerSetup::class.java) + + val playerSetup = if (this.realm != null) { + this.realm.createObject(PlayerSetup::class.java) } + else { + PlayerSetup() + } + playerSetup.position = positionIndex this.playerSetups.add(playerSetup) return playerSetup @@ -262,7 +269,7 @@ open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterab string = string.addLineReturn(2) - val streetActions = sortedActions.filter { it.street == street } + val streetActions = sortedActions.filter { it.street == street }.compact(positions) if (streetActions.isNotEmpty()) { val streetItems = mutableListOf(context.getString(street.resId)) @@ -280,7 +287,7 @@ open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterab string = string.addLineReturn() streetActions.forEach { action -> - string = string.plus(localizedAction(action, positions, context)) + string = string.plus(localizedAction(action, context)) string = string.addLineReturn() } } @@ -299,12 +306,13 @@ open class HandHistory : RealmObject(), RowRepresentable, Identifiable, Filterab return playerItems.joinToString(" ") } - private fun localizedAction(action: Action, positions: LinkedHashSet, context: Context): String { - val actionItems = mutableListOf(positions.elementAt(action.position).value) - action.type?.let { type -> + private fun localizedAction(actionReadRow: ActionReadRow, context: Context): String { + val formattedPositions = actionReadRow.positions.map { it.value }.joinToString(", ") + val actionItems = mutableListOf(formattedPositions) + actionReadRow.action?.let { type -> actionItems.add(context.getString(type.resId)) } - action.amount?.let { amount -> + actionReadRow.amount?.let { amount -> actionItems.add(amount.formatted()) } return actionItems.joinToString(" ")