Skip to content

Commit f63e3b8

Browse files
committed
chore(fc): handle room name changes more efficiently
Signed-off-by: Brandon McAnsh <[email protected]>
1 parent 220ac09 commit f63e3b8

File tree

4 files changed

+46
-6
lines changed

4 files changed

+46
-6
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package xyz.flipchat.services.extensions
2+
3+
import com.getcode.util.resources.ResourceHelper
4+
import xyz.flipchat.services.chat.R
5+
import xyz.flipchat.services.domain.model.chat.Conversation
6+
7+
fun Conversation.titleOrFallback(resources: ResourceHelper): String {
8+
if (title.startsWith("Room")) {
9+
return title
10+
}
11+
12+
if (title.startsWith("#")) {
13+
return title
14+
}
15+
16+
return if (title.isEmpty()) {
17+
resources.getString(
18+
R.string.title_implicitRoomTitle,
19+
roomNumber
20+
)
21+
} else {
22+
resources.getString(
23+
R.string.title_explicitRoomTitle,
24+
roomNumber,
25+
title
26+
)
27+
}
28+
}

services/flipchat/chat/src/main/kotlin/xyz/flipchat/services/internal/db/ConversationDao.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,7 @@ interface ConversationDao {
113113

114114
suspend fun setDisplayName(id: String, displayName: String) {
115115
val conversation = findConversation(id)?.conversation ?: return
116-
val roomNumber = conversation.roomNumber
117-
val name = "#$roomNumber: $displayName"
118-
upsertConversations(conversation.copy(title = name))
116+
upsertConversations(conversation.copy(title = displayName))
119117
}
120118

121119
suspend fun setDisplayName(id: ID, displayName: String) {

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import com.getcode.model.chat.MessageContent
1717
import com.getcode.model.chat.MessageStatus
1818
import com.getcode.model.uuid
1919
import com.getcode.services.model.chat.OutgoingMessageContent
20+
import com.getcode.util.resources.ResourceHelper
2021
import com.getcode.utils.base58
2122
import com.getcode.utils.timestamp
2223
import kotlinx.coroutines.CoroutineScope
@@ -29,10 +30,10 @@ import xyz.flipchat.notifications.getRoomNotifications
2930
import xyz.flipchat.services.data.ChatIdentifier
3031
import xyz.flipchat.services.domain.mapper.ConversationMessageMapper
3132
import xyz.flipchat.services.domain.model.chat.ConversationMember
32-
import xyz.flipchat.services.domain.model.chat.ConversationMessage
3333
import xyz.flipchat.services.domain.model.chat.ConversationMessageWithMemberAndContent
3434
import xyz.flipchat.services.domain.model.chat.ConversationWithMembersAndLastPointers
3535
import xyz.flipchat.services.domain.model.query.QueryOptions
36+
import xyz.flipchat.services.extensions.titleOrFallback
3637
import xyz.flipchat.services.internal.data.mapper.ConversationMemberMapper
3738
import xyz.flipchat.services.internal.network.repository.chat.ChatRepository
3839
import xyz.flipchat.services.internal.network.repository.messaging.MessagingRepository
@@ -46,6 +47,7 @@ class RoomController @Inject constructor(
4647
private val conversationMessageMapper: ConversationMessageMapper,
4748
private val notificationManager: NotificationManagerCompat,
4849
private val userManager: UserManager,
50+
private val resources: ResourceHelper,
4951
) {
5052
private val db: FcAppDatabase
5153
get() = FcAppDatabase.requireInstance()
@@ -213,7 +215,11 @@ class RoomController @Inject constructor(
213215
suspend fun setDisplayName(conversationId: ID, displayName: String): Result<Unit> {
214216
return chatRepository.setDisplayName(conversationId, displayName)
215217
.onSuccess {
216-
db.conversationDao().setDisplayName(conversationId, displayName)
218+
val conversation = db.conversationDao().findConversation(conversationId)?.conversation?.copy(title = displayName)
219+
if (conversation != null) {
220+
val title = conversation.titleOrFallback(resources)
221+
db.conversationDao().setDisplayName(conversationId, title)
222+
}
217223
}
218224
}
219225

services/flipchat/sdk/src/main/kotlin/xyz/flipchat/controllers/ChatsController.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import androidx.room.paging.util.ThreadSafeInvalidationObserver
1212
import androidx.room.withTransaction
1313
import com.getcode.model.ID
1414
import com.getcode.model.Kin
15+
import com.getcode.util.resources.ResourceHelper
1516
import com.getcode.utils.TraceType
1617
import com.getcode.utils.base58
1718
import com.getcode.utils.trace
@@ -32,6 +33,7 @@ import xyz.flipchat.services.domain.model.chat.ConversationWithMembersAndLastMes
3233
import xyz.flipchat.services.domain.model.chat.db.ConversationMemberUpdate
3334
import xyz.flipchat.services.domain.model.chat.db.ConversationUpdate
3435
import xyz.flipchat.services.domain.model.query.QueryOptions
36+
import xyz.flipchat.services.extensions.titleOrFallback
3537
import xyz.flipchat.services.internal.data.mapper.ConversationMemberMapper
3638
import xyz.flipchat.services.internal.network.repository.chat.ChatRepository
3739
import xyz.flipchat.services.internal.network.repository.messaging.MessagingRepository
@@ -47,6 +49,7 @@ class ChatsController @Inject constructor(
4749
private val chatRepository: ChatRepository,
4850
private val messagingRepository: MessagingRepository,
4951
private val userManager: UserManager,
52+
private val resources: ResourceHelper,
5053
) {
5154
private val db: FcAppDatabase
5255
get() = FcAppDatabase.requireInstance()
@@ -101,7 +104,12 @@ class ChatsController @Inject constructor(
101104
db.conversationDao().updateCoverCharge(update.roomId, update.amount)
102105
}
103106
is ConversationUpdate.DisplayName -> {
104-
db.conversationDao().setDisplayName(update.roomId, update.name)
107+
val conversation = db.conversationDao().findConversationRaw(update.roomId)?.copy(title = update.name)
108+
if (conversation != null) {
109+
val newTitle = conversation.titleOrFallback(resources = resources)
110+
db.conversationDao()
111+
.setDisplayName(update.roomId, newTitle)
112+
}
105113
}
106114
is ConversationUpdate.LastActivity -> {
107115
val conversation = db.conversationDao().findConversationRaw(update.roomId)

0 commit comments

Comments
 (0)