11package com.getcode.model.chat
22
3- import com.codeinc.gen.chat.v2.ChatService
4- import com.codeinc.gen.chat.v2.ChatService.ExchangeDataContent
5- import com.codeinc.gen.chat.v2.ChatService.ExchangeDataContent.ReferenceCase
63import com.getcode.model.Cursor
74import com.getcode.model.ID
8- import com.getcode.solana.keys.Signature as SolanaKeysSignature
95
106/* *
117 * Chat domain model for On-Chain messaging. This serves as a reference to a collection of messages.
@@ -24,20 +20,29 @@ import com.getcode.solana.keys.Signature as SolanaKeysSignature
2420data class Chat (
2521 val id : ID ,
2622 val type : ChatType ,
27- val title : String ,
28- val members : List <ChatMember >,
23+ val title : Title ? ,
24+ val members : List <ChatMember > = emptyList(),
25+ private val _unreadCount : Int = 0 ,
26+ private val _isMuted : Boolean = false ,
2927 val canMute : Boolean ,
28+ private val _isSubscribed : Boolean = false ,
3029 val canUnsubscribe : Boolean ,
3130 val cursor : Cursor ,
3231 val messages : List <ChatMessage >
3332) {
3433 val unreadCount: Int
3534 get() {
35+ if (! isV2) return _unreadCount
36+
3637 val self = members.firstOrNull { it.isSelf } ? : return 0
3738 return self.numUnread
3839 }
3940
4041 fun resetUnreadCount (): Chat {
42+ if (! isV2) {
43+ return copy(_unreadCount = 0 )
44+ }
45+
4146 val self = members.firstOrNull { it.isSelf } ? : return this
4247 val updatedSelf = self.copy(numUnread = 0 )
4348 val updatedMembers = members.map {
@@ -52,11 +57,17 @@ data class Chat(
5257
5358 val isMuted: Boolean
5459 get() {
60+ if (! isV2) return _isMuted
61+
5562 val self = members.firstOrNull { it.isSelf } ? : return false
5663 return self.isMuted
5764 }
5865
5966 fun setMuteState (muted : Boolean ): Chat {
67+ if (! isV2) {
68+ return copy(_isMuted = muted)
69+ }
70+
6071 val self = members.firstOrNull { it.isSelf } ? : return this
6172 val updatedSelf = self.copy(isMuted = muted)
6273 val updatedMembers = members.map {
@@ -71,11 +82,17 @@ data class Chat(
7182
7283 val isSubscribed: Boolean
7384 get() {
85+ if (! isV2) return _isSubscribed
86+
7487 val self = members.firstOrNull { it.isSelf } ? : return false
7588 return self.isSubscribed
7689 }
7790
7891 fun setSubscriptionState (subscribed : Boolean ): Chat {
92+ if (! isV2) {
93+ return copy(_isSubscribed = subscribed)
94+ }
95+
7996 val self = members.firstOrNull { it.isSelf } ? : return this
8097 val updatedSelf = self.copy(isSubscribed = subscribed)
8198 val updatedMembers = members.map {
@@ -95,43 +112,5 @@ data class Chat(
95112 get() = newestMessage?.dateMillis
96113}
97114
98-
99-
100-
101- enum class ChatType {
102- Unknown ,
103- Notification ,
104- TwoWay ;
105-
106- companion object {
107- operator fun invoke (proto : ChatService .ChatType ): ChatType {
108- return runCatching { entries[proto.ordinal] }.getOrNull() ? : Unknown
109- }
110- }
111- }
112-
113- sealed interface ConversationType {
114- data object TipChat : ConversationType
115- }
116-
117- /* *
118- * An ID that can be referenced to the source of the exchange of Kin
119- */
120- sealed interface Reference {
121- data object NoneSet : Reference
122- data class IntentId (val id : ID ): Reference
123- data class Signature (val signature : SolanaKeysSignature ): Reference
124-
125- companion object {
126- operator fun invoke (proto : ExchangeDataContent ): Reference {
127- return when (proto.referenceCase) {
128- ReferenceCase .INTENT -> IntentId (proto.intent.toByteArray().toList())
129- ReferenceCase .SIGNATURE -> Signature (SolanaKeysSignature (proto.signature.toByteArray().toList()))
130- ReferenceCase .REFERENCE_NOT_SET -> NoneSet
131- null -> NoneSet
132- }
133- }
134- }
135- }
136-
137-
115+ val Chat .isV2: Boolean
116+ get() = members.isNotEmpty()
0 commit comments