Skip to content

Commit 3e73e1a

Browse files
committed
chore(fc): only store custom room titles; derive titles when needed
Signed-off-by: Brandon McAnsh <[email protected]>
1 parent 8766602 commit 3e73e1a

File tree

10 files changed

+72
-66
lines changed

10 files changed

+72
-66
lines changed

flipchatApp/src/main/kotlin/xyz/flipchat/app/features/chat/conversation/ConversationViewModel.kt

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package xyz.flipchat.app.features.chat.conversation
22

33
import android.content.ClipData
44
import android.content.ClipboardManager
5-
import android.provider.CalendarContract.EventDays
65
import androidx.compose.foundation.text.input.TextFieldState
76
import androidx.compose.foundation.text.input.clearText
87
import androidx.compose.runtime.snapshotFlow
@@ -163,6 +162,7 @@ class ConversationViewModel @Inject constructor(
163162
Event
164163

165164
data class OnInitialUnreadCountDetermined(val count: Int) : Event
165+
data class OnTitlesChanged(val title: String, val roomCardTitle: String): Event
166166
data class OnUserActivity(val activity: Instant) : Event
167167
data object SendCash : Event
168168
data object SendMessage : Event
@@ -321,6 +321,18 @@ class ConversationViewModel @Inject constructor(
321321
}
322322
.launchIn(viewModelScope)
323323

324+
eventFlow
325+
.filterIsInstance<Event.OnConversationChanged>()
326+
.map { it.conversationWithPointers.conversation }
327+
.distinctUntilChanged()
328+
.map {
329+
val title = it.titleOrFallback(resources, includePrefix = true)
330+
val roomCardTitle = it.titleOrFallback(resources, includePrefix = false)
331+
title to roomCardTitle
332+
}.distinctUntilChanged()
333+
.onEach { dispatchEvent(Event.OnTitlesChanged(it.first, it.second)) }
334+
.launchIn(viewModelScope)
335+
324336
eventFlow
325337
.filterIsInstance<Event.MarkRead>()
326338
.onEach { delay(300) }
@@ -637,10 +649,7 @@ class ConversationViewModel @Inject constructor(
637649
val roomInfo = RoomInfoArgs(
638650
roomId = room.id,
639651
roomNumber = room.roomNumber,
640-
roomTitle = room.titleOrFallback(
641-
resources,
642-
includeRoomPrefix = false
643-
),
652+
roomTitle = room.titleOrFallback(resources),
644653
memberCount = members.count(),
645654
ownerId = room.ownerId,
646655
hostName = moderator?.identity?.displayName,
@@ -1105,21 +1114,23 @@ class ConversationViewModel @Inject constructor(
11051114

11061115
is Event.OnInitialUnreadCountDetermined -> { state -> state.copy(unreadCount = event.count) }
11071116

1117+
is Event.OnTitlesChanged -> { state ->
1118+
state.copy(
1119+
title = event.title,
1120+
roomInfoArgs = state.roomInfoArgs.copy(
1121+
roomTitle = event.roomCardTitle
1122+
)
1123+
)
1124+
}
1125+
11081126
is Event.OnConversationChanged -> { state ->
11091127
val (conversation, _, _) = event.conversationWithPointers
11101128
val members = event.conversationWithPointers.members
11111129
val host = members.firstOrNull { it.isHost }
11121130

1113-
// val cardTitle = if (conversation.title.startsWith("Room")) {
1114-
// "#${conversation.roomNumber}"
1115-
// } else {
1116-
// conversation.title
1117-
// }
1118-
11191131
state.copy(
11201132
conversationId = conversation.id,
11211133
imageUri = conversation.imageUri.orEmpty().takeIf { it.isNotEmpty() },
1122-
title = conversation.title,
11231134
pointers = event.conversationWithPointers.pointers,
11241135
lastReadMessage = state.lastReadMessage
11251136
?: findLastReadMessage(event.conversationWithPointers.pointers),
@@ -1135,7 +1146,6 @@ class ConversationViewModel @Inject constructor(
11351146
roomInfoArgs = RoomInfoArgs(
11361147
roomId = conversation.id,
11371148
roomNumber = conversation.roomNumber,
1138-
roomTitle = conversation.title,
11391149
ownerId = conversation.ownerId,
11401150
hostName = host?.memberName,
11411151
memberCount = members.count(),

flipchatApp/src/main/kotlin/xyz/flipchat/app/features/chat/info/ChatInfoViewModel.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import xyz.flipchat.app.beta.Labs
2323
import xyz.flipchat.chat.RoomController
2424
import xyz.flipchat.app.data.RoomInfo
2525
import xyz.flipchat.app.util.IntentUtils
26+
import xyz.flipchat.services.extensions.titleOrFallback
2627
import xyz.flipchat.services.user.UserManager
2728
import javax.inject.Inject
2829

@@ -79,9 +80,9 @@ class ChatInfoViewModel @Inject constructor(
7980
.mapNotNull { it.args.roomId }
8081
.flatMapLatest { roomController.observeConversation(it) }
8182
.mapNotNull { it }
82-
.map { Triple(it.conversation.title, it.members.count(), it.conversation.coverCharge) }
83-
.onEach { (name, members, cover) ->
84-
dispatchEvent(Event.OnNameChanged(name))
83+
.map { Triple(it.conversation, it.members.count(), it.conversation.coverCharge) }
84+
.onEach { (conversation, members, cover) ->
85+
dispatchEvent(Event.OnNameChanged(conversation.titleOrFallback(resources)))
8586
dispatchEvent(Event.OnMembersUpdated(members))
8687
dispatchEvent(Event.OnCoverChanged(cover))
8788
}.launchIn(viewModelScope)

flipchatApp/src/main/kotlin/xyz/flipchat/app/features/chat/list/ChatListViewModel.kt

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package xyz.flipchat.app.features.chat.list
33
import androidx.lifecycle.viewModelScope
44
import androidx.paging.PagingData
55
import androidx.paging.cachedIn
6+
import androidx.paging.map
67
import com.getcode.manager.TopBarManager
78
import com.getcode.model.ID
89
import com.getcode.model.KinAmount
@@ -25,7 +26,6 @@ import kotlinx.coroutines.flow.mapNotNull
2526
import kotlinx.coroutines.flow.onEach
2627
import kotlinx.coroutines.flow.take
2728
import xyz.flipchat.app.R
28-
import xyz.flipchat.app.features.chat.conversation.ConversationViewModel.Event
2929
import xyz.flipchat.app.features.login.register.onError
3030
import xyz.flipchat.controllers.ChatsController
3131
import xyz.flipchat.controllers.ProfileController
@@ -35,6 +35,7 @@ import xyz.flipchat.services.data.StartGroupChatPaymentMetadata
3535
import xyz.flipchat.services.data.erased
3636
import xyz.flipchat.services.data.typeUrl
3737
import xyz.flipchat.services.domain.model.chat.ConversationWithMembersAndLastMessage
38+
import xyz.flipchat.services.extensions.titleOrFallback
3839
import xyz.flipchat.services.user.AuthState
3940
import xyz.flipchat.services.user.UserManager
4041
import javax.inject.Inject
@@ -63,7 +64,7 @@ class ChatListViewModel @Inject constructor(
6364

6465
sealed interface Event {
6566
data class OnSelfIdChanged(val id: ID?) : Event
66-
data class OnLoggedInStateChanged(val loggedIn: Boolean): Event
67+
data class OnLoggedInStateChanged(val loggedIn: Boolean) : Event
6768
data class ShowFullScreenSpinner(
6869
val showScrim: Boolean = true,
6970
val showSpinner: Boolean = true
@@ -224,6 +225,17 @@ class ChatListViewModel @Inject constructor(
224225
} else {
225226
flowOf(PagingData.empty())
226227
}
228+
}.map { page ->
229+
page.map {
230+
it.copy(
231+
conversation = it.conversation.copy(
232+
title = it.conversation.titleOrFallback(
233+
resources = resources,
234+
includePrefix = true
235+
)
236+
)
237+
)
238+
}
227239
}
228240
.cachedIn(viewModelScope)
229241

flipchatApp/src/main/kotlin/xyz/flipchat/app/features/chat/lookup/LookupRoomViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ class LookupRoomViewModel @Inject constructor(
120120

121121
val confirmJoinArgs = RoomInfoArgs(
122122
roomId = it.room.id,
123-
roomTitle = it.room.titleOrFallback(resources, includeRoomPrefix = false),
123+
roomTitle = it.room.titleOrFallback(resources),
124124
roomNumber = it.room.roomNumber,
125125
memberCount = it.members.count(),
126126
ownerId = it.room.ownerId,

flipchatApp/src/main/kotlin/xyz/flipchat/app/util/Router.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,7 @@ class RouterImpl(
116116
val args = RoomInfoArgs(
117117
roomId = room.id,
118118
roomNumber = room.roomNumber,
119-
roomTitle = room.titleOrFallback(
120-
resources,
121-
includeRoomPrefix = false
122-
),
119+
roomTitle = room.titleOrFallback(resources,),
123120
memberCount = members.count(),
124121
ownerId = room.ownerId,
125122
hostName = moderator?.identity?.displayName,

services/code/src/main/java/com/getcode/model/extensions/ChatMessage.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ fun ChatMessage.decryptingUsing(keyPair: Ed25519.KeyPair): ChatMessage {
2929
is MessageContent.Reaction -> it
3030
is MessageContent.Reply -> it
3131
is MessageContent.DeletedMessage -> it
32+
is MessageContent.Unknown -> it
3233
}
3334
}
3435
)

services/flipchat/chat/src/main/kotlin/xyz/flipchat/services/domain/mapper/RoomConversationMapper.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@ import com.getcode.util.resources.ResourceHelper
88
import com.getcode.utils.base58
99
import javax.inject.Inject
1010

11-
class RoomConversationMapper @Inject constructor(
12-
private val resources: ResourceHelper,
13-
) : Mapper<Room, Conversation> {
11+
class RoomConversationMapper @Inject constructor() : Mapper<Room, Conversation> {
1412
override fun map(from: Room): Conversation {
1513
return Conversation(
1614
idBase58 = from.id.base58,
1715
ownerIdBase58 = from.ownerId.base58,
18-
title = from.titleOrFallback(resources),
16+
title = from.title.orEmpty(),
1917
imageUri = from.imageData,
2018
unreadCount = from.unreadCount,
2119
hasMoreUnread = from.hasMoreUnread,

services/flipchat/chat/src/main/kotlin/xyz/flipchat/services/extensions/Conversation.kt

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,42 @@ package xyz.flipchat.services.extensions
22

33
import com.getcode.util.resources.ResourceHelper
44
import xyz.flipchat.services.chat.R
5+
import xyz.flipchat.services.data.Room
56
import xyz.flipchat.services.domain.model.chat.Conversation
67

7-
fun Conversation.titleOrFallback(resources: ResourceHelper): String {
8-
if (title.startsWith("Room")) {
9-
return title
10-
}
11-
12-
if (title.startsWith("#")) {
13-
return title
8+
fun Conversation.titleOrFallback(resources: ResourceHelper, includePrefix: Boolean = false): String {
9+
return if (title.isEmpty()) {
10+
if (includePrefix) {
11+
resources.getString(
12+
R.string.title_implicitRoomTitle,
13+
roomNumber
14+
)
15+
} else {
16+
resources.getString(
17+
R.string.title_implicitRoomTitleWithoutPrefix,
18+
roomNumber
19+
)
20+
}
21+
} else {
22+
resources.getString(
23+
R.string.title_explicitRoomTitle,
24+
roomNumber,
25+
title
26+
)
1427
}
28+
}
1529

16-
return if (title.isEmpty()) {
30+
fun Room.titleOrFallback(resources: ResourceHelper): String {
31+
return if (title == null) {
1732
resources.getString(
18-
R.string.title_implicitRoomTitle,
33+
R.string.title_implicitRoomTitleWithoutPrefix,
1934
roomNumber
2035
)
2136
} else {
2237
resources.getString(
2338
R.string.title_explicitRoomTitle,
2439
roomNumber,
25-
title
40+
title!!
2641
)
2742
}
2843
}

services/flipchat/chat/src/main/kotlin/xyz/flipchat/services/extensions/Room.kt

Lines changed: 0 additions & 27 deletions
This file was deleted.

services/flipchat/sdk/src/main/kotlin/xyz/flipchat/chat/RoomController.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,8 +221,7 @@ class RoomController @Inject constructor(
221221
.onSuccess {
222222
val conversation = db.conversationDao().findConversation(conversationId)?.conversation?.copy(title = displayName)
223223
if (conversation != null) {
224-
val title = conversation.titleOrFallback(resources)
225-
db.conversationDao().setDisplayName(conversationId, title)
224+
db.conversationDao().setDisplayName(conversationId, displayName)
226225
}
227226
}
228227
}

0 commit comments

Comments
 (0)