Skip to content

Commit 711f386

Browse files
committed
chore(flipcash/pools): update share link strategy
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent bb4fcbf commit 711f386

4 files changed

Lines changed: 44 additions & 2 deletions

File tree

apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/Linkify.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.getcode.utils.urlEncode
44

55
object Linkify {
66
fun cashLink(entropy: String): String = "https://send.flipcash.com/c/#/e=${entropy}"
7-
fun pool(entropy: String): String = "https://fun.flipcash.com/pool/#/e=${entropy}"
7+
fun pool(data: String, entropy: String): String = "https://fun.flipcash.com/p/$data/#/e=${entropy}"
88
fun download(shareRef: String): String = "https://flipcash.com/download?r=${shareRef}"
99
fun tweet(message: String): String = "https://www.twitter.com/intent/tweet?text=${message.urlEncode()}"
1010
}

apps/flipcash/shared/shareable/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ plugins {
66
id(Plugins.kotlin_ksp)
77
id(Plugins.hilt)
88
id(Plugins.kotlin_parcelize)
9+
id(Plugins.kotlin_serialization)
910
id(Plugins.jetbrains_compose_compiler)
1011
}
1112

@@ -42,6 +43,8 @@ dependencies {
4243
ksp(Libs.hilt_android_compiler)
4344
ksp(Libs.hilt_compiler)
4445

46+
implementation(Libs.kotlinx_serialization_json)
47+
4548
implementation(platform(Libs.compose_bom))
4649
implementation(Libs.compose_ui)
4750

apps/flipcash/shared/shareable/src/main/kotlin/com/flipcash/app/shareable/internal/InternalShareSheetController.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import android.content.ClipboardManager
66
import android.content.Context
77
import android.content.Intent
88
import android.content.IntentFilter
9+
import androidx.core.net.toUri
910
import androidx.localbroadcastmanager.content.LocalBroadcastManager
1011
import com.flipcash.app.core.money.formatted
1112
import com.flipcash.app.core.pools.Pool
@@ -16,17 +17,21 @@ import com.flipcash.app.shareable.ShareSheetController.Companion.ACTION_CASH_LIN
1617
import com.flipcash.app.shareable.ShareSheetController.Companion.ACTION_SHARE_CASH_LINK
1718
import com.flipcash.app.shareable.Shareable
1819
import com.flipcash.app.shareable.ShareablePendingData.CashLink
20+
import com.flipcash.app.shareable.internal.packaging.PoolShareLinkData
1921
import com.flipcash.shared.shareable.R
2022
import com.getcode.ed25519.Ed25519
2123
import com.getcode.opencode.model.accounts.GiftCardAccount
2224
import com.getcode.opencode.model.accounts.entropy
2325
import com.getcode.opencode.model.financial.Fiat
2426
import com.getcode.opencode.model.financial.LocalFiat
27+
import com.getcode.opencode.utils.base64
2528
import com.getcode.util.resources.ResourceHelper
2629
import com.getcode.utils.base58
2730
import com.getcode.utils.decodeBase64
2831
import dagger.hilt.android.qualifiers.ApplicationContext
2932
import kotlinx.coroutines.delay
33+
import kotlinx.serialization.encodeToString
34+
import kotlinx.serialization.json.Json
3035
import java.security.SecureRandom
3136
import java.util.Timer
3237
import java.util.TimerTask
@@ -212,7 +217,9 @@ internal class InternalShareSheetController(
212217

213218
private fun sharePool(pool: Pool, rendezvous: Ed25519.KeyPair) {
214219
val decodedSeed = rendezvous.seed.decodeBase64()
215-
val url = Linkify.pool(decodedSeed.base58)
220+
val data = PoolShareLinkData(pool)
221+
val encodedData = Json.encodeToString(data).base64.toUri().toString()
222+
val url = Linkify.pool(data = encodedData,decodedSeed.base58)
216223
val intent = Intent().apply {
217224
action = Intent.ACTION_SEND
218225
putExtra(
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.flipcash.app.shareable.internal.packaging
2+
3+
import com.flipcash.app.core.pools.Pool
4+
import com.flipcash.app.core.pools.PoolBetSummary
5+
import kotlinx.serialization.SerialName
6+
import kotlinx.serialization.Serializable
7+
8+
9+
@Serializable
10+
internal data class PoolShareLinkData(
11+
@SerialName("p")
12+
val title: String,
13+
@SerialName("a")
14+
val buyIn: String,
15+
@SerialName("y")
16+
val yesVotes: Int,
17+
@SerialName("n")
18+
val noVotes: Int,
19+
) {
20+
constructor(pool: Pool): this(
21+
title = pool.name,
22+
buyIn = pool.buyIn.formatted(),
23+
yesVotes = when (val summary = pool.betSummary) {
24+
is PoolBetSummary.Boolean -> summary.numYes
25+
PoolBetSummary.NotSet -> 0
26+
},
27+
noVotes = when (val summary = pool.betSummary) {
28+
is PoolBetSummary.Boolean -> summary.numNo
29+
PoolBetSummary.NotSet -> 0
30+
},
31+
)
32+
}

0 commit comments

Comments
 (0)