11package com.getcode.model.intents
22
3- import android.content.Context
3+ import com.codeinc.gen.chat.v2.ChatService
44import com.codeinc.gen.transaction.v2.TransactionService
5- import com.codeinc.gen.transaction.v2.TransactionService.TippedUser.Platform
6- import com.getcode.model.TipMetadata
75import com.getcode.model.Fee
6+ import com.getcode.model.ID
87import com.getcode.model.Kin
98import com.getcode.model.KinAmount
9+ import com.getcode.model.SocialUser
10+ import com.getcode.model.chat.ChatIdV2
11+ import com.getcode.model.chat.Platform
1012import com.getcode.model.intents.actions.ActionFeePayment
1113import com.getcode.model.intents.actions.ActionOpenAccount
1214import com.getcode.model.intents.actions.ActionTransfer
1315import com.getcode.model.intents.actions.ActionWithdraw
16+ import com.getcode.network.repository.toByteString
1417import com.getcode.network.repository.toPublicKey
1518import com.getcode.network.repository.toSolanaAccount
16- import com.getcode.solana.keys.*
19+ import com.getcode.solana.keys.PublicKey
1720import com.getcode.solana.organizer.AccountType
1821import com.getcode.solana.organizer.Organizer
1922import com.getcode.solana.organizer.Tray
2023import timber.log.Timber
2124
25+ sealed interface PrivateTransferMetadata {
26+ data class Tip (val socialUser : SocialUser ): PrivateTransferMetadata
27+ data class Chat (val socialUser : SocialUser ): PrivateTransferMetadata
28+ }
29+
2230class IntentPrivateTransfer (
2331 override val id : PublicKey ,
2432 private val organizer : Organizer ,
@@ -30,7 +38,7 @@ class IntentPrivateTransfer(
3038 private val fee : Kin ,
3139 private val additionalFees : List <Fee >,
3240 private val isWithdrawal : Boolean ,
33- private val tipMetadata : TipMetadata ? ,
41+ private val metadata : PrivateTransferMetadata ? ,
3442 val resultTray : Tray ,
3543
3644 override val actionGroup : ActionGroup ,
@@ -49,12 +57,24 @@ class IntentPrivateTransfer(
4957 .setNativeAmount(grossAmount.fiat)
5058 )
5159
52- if (tipMetadata != null ) {
53- setIsTip(true )
54- setTippedUser(TransactionService .TippedUser .newBuilder()
55- .setPlatformValue(Platform .TWITTER_VALUE )
56- .setUsername(tipMetadata.username)
57- )
60+ when (metadata) {
61+ is PrivateTransferMetadata .Chat -> {
62+ setIsChat(true )
63+ setChatId(ChatIdV2 .newBuilder()
64+ .setValue(metadata.socialUser.chatId.toByteString())
65+ )
66+ }
67+ is PrivateTransferMetadata .Tip -> {
68+ setIsTip(true )
69+ setTippedUser(TransactionService .TippedUser .newBuilder()
70+ .setPlatformValue(when (Platform .named(metadata.socialUser.platform)) {
71+ Platform .Unknown -> ChatService .Platform .UNKNOWN_PLATFORM_VALUE
72+ Platform .Twitter -> ChatService .Platform .TWITTER_VALUE
73+ })
74+ .setUsername(metadata.socialUser.username)
75+ )
76+ }
77+ null -> Unit
5878 }
5979 }
6080 )
@@ -63,15 +83,14 @@ class IntentPrivateTransfer(
6383
6484 companion object {
6585 fun newInstance (
66- context : Context ,
6786 rendezvousKey : PublicKey ,
6887 organizer : Organizer ,
6988 destination : PublicKey ,
7089 amount : KinAmount ,
7190 fee : Kin ,
7291 additionalFees : List <Fee >,
7392 isWithdrawal : Boolean ,
74- tipMetadata : TipMetadata ?
93+ metadata : PrivateTransferMetadata ? ,
7594 ): IntentPrivateTransfer {
7695 if (fee > amount.kin) {
7796 throw IntentPrivateTransferException .InvalidFeeException ()
@@ -153,7 +172,7 @@ class IntentPrivateTransfer(
153172 kind = ActionWithdraw .Kind .NoPrivacyWithdraw (netAmount.kin),
154173 cluster = currentTray.outgoing.getCluster(),
155174 destination = destination,
156- tipMetadata = tipMetadata
175+ metadata = metadata
157176 )
158177
159178 // 3. Redistribute the funds to optimize for a
@@ -217,7 +236,7 @@ class IntentPrivateTransfer(
217236 fee = fee,
218237 additionalFees = additionalFees,
219238 isWithdrawal = isWithdrawal,
220- tipMetadata = tipMetadata ,
239+ metadata = metadata ,
221240 actionGroup = group,
222241 resultTray = currentTray,
223242 )
0 commit comments