Skip to content

Commit 1e343ba

Browse files
committed
chore: add back thread invalidation for database until a proper solution is worked out
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 358008c commit 1e343ba

File tree

8 files changed

+67
-35
lines changed

8 files changed

+67
-35
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ class ConversationViewModel @Inject constructor(
909909
profileImage = member?.imageUri.takeIf { it.orEmpty().isNotEmpty() },
910910
displayName = member?.memberName ?: "Deleted",
911911
isSelf = contents.isFromSelf,
912-
isHost = member?.isHost ?: false,
912+
isHost = message.senderId == currentState.hostId,
913913
isBlocked = member?.isBlocked == true,
914914
),
915915
originalMessage = anchor,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ private fun ChatListScreenContent(
122122
) {
123123
items(
124124
count = chats.itemCount,
125-
key = chats.itemKey { it.id },
125+
// key = chats.itemKey { it.id },
126126
contentType = chats.itemContentType { "chat" }
127127
) { index ->
128128
chats[index]?.let {

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

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package xyz.flipchat.services.internal.db
22

3+
import androidx.paging.PagingSource
34
import androidx.room.Dao
45
import androidx.room.Delete
56
import androidx.room.Insert
@@ -54,22 +55,19 @@ interface ConversationDao {
5455

5556
@Query(
5657
"""
57-
SELECT * FROM (
58-
SELECT *
59-
FROM messages
60-
WHERE conversationIdBase58 = :id AND type IN (1, 8)
61-
ORDER BY dateMillis DESC
62-
LIMIT 1
63-
)
64-
UNION ALL
65-
SELECT * FROM (
66-
SELECT *
67-
FROM messages
68-
WHERE conversationIdBase58 = :id
69-
ORDER BY dateMillis DESC
70-
LIMIT 1
71-
)
72-
LIMIT 1
58+
WITH prioritized_messages AS (
59+
SELECT *,
60+
CASE
61+
WHEN type IN (1, 8) THEN 1
62+
ELSE 2
63+
END AS priority
64+
FROM messages
65+
WHERE conversationIdBase58 = :id
66+
)
67+
SELECT *
68+
FROM prioritized_messages
69+
ORDER BY priority, dateMillis DESC
70+
LIMIT 1;
7371
"""
7472
)
7573
suspend fun getLatestMessage(id: String): ConversationMessage?

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

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import androidx.paging.PagingConfig
99
import androidx.paging.PagingSource
1010
import androidx.paging.PagingState
1111
import androidx.paging.RemoteMediator
12+
import androidx.room.paging.util.ThreadSafeInvalidationObserver
1213
import androidx.room.withTransaction
1314
import com.getcode.model.ID
1415
import com.getcode.model.KinAmount
@@ -197,7 +198,7 @@ class RoomController @Inject constructor(
197198
}
198199

199200
private val pagingConfig =
200-
PagingConfig(pageSize = 25, initialLoadSize = 25, prefetchDistance = 10) // TODO: decrease once this pager stops auto paging
201+
PagingConfig(pageSize = 25, initialLoadSize = 25, prefetchDistance = 10)
201202

202203
@OptIn(ExperimentalPagingApi::class)
203204
fun messages(conversationId: ID): Pager<Int, ConversationMessageWithMemberAndContentAndReplyAndTips> =
@@ -342,21 +343,20 @@ private class MessagingPagingSource(
342343
private val userId: () -> ID?,
343344
private val db: FcAppDatabase
344345
) : PagingSource<Int, ConversationMessageWithMemberAndContentAndReplyAndTips>() {
345-
//
346-
// @SuppressLint("RestrictedApi")
347-
// private val observer =
348-
// ThreadSafeInvalidationObserver(arrayOf("conversations", "messages", "members")) {
349-
// println("ROOM -- PagingSource invalidated")
350-
// invalidate()
351-
// }
346+
347+
@SuppressLint("RestrictedApi")
348+
private val observer =
349+
ThreadSafeInvalidationObserver(arrayOf("conversations", "messages", "members")) {
350+
invalidate()
351+
}
352352

353353
override fun getRefreshKey(state: PagingState<Int, ConversationMessageWithMemberAndContentAndReplyAndTips>): Int? {
354354
return null
355355
}
356356

357357
@SuppressLint("RestrictedApi")
358358
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, ConversationMessageWithMemberAndContentAndReplyAndTips> {
359-
// observer.registerIfNecessary(db)
359+
observer.registerIfNecessary(db)
360360
val currentPage = params.key ?: 0
361361
val pageSize = params.loadSize
362362
val offset = currentPage * pageSize

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.paging.PagingConfig
88
import androidx.paging.PagingSource
99
import androidx.paging.PagingState
1010
import androidx.paging.RemoteMediator
11+
import androidx.room.paging.util.ThreadSafeInvalidationObserver
1112
import androidx.room.withTransaction
1213
import com.getcode.model.ID
1314
import com.getcode.model.chat.MessageContent
@@ -352,6 +353,12 @@ private class ChatsPagingSource(
352353
private val db: FcAppDatabase
353354
) : PagingSource<Int, ConversationWithMembersAndLastMessage>() {
354355

356+
@SuppressLint("RestrictedApi")
357+
private val observer =
358+
ThreadSafeInvalidationObserver(arrayOf("conversations", "messages", "members")) {
359+
invalidate()
360+
}
361+
355362
override fun getRefreshKey(state: PagingState<Int, ConversationWithMembersAndLastMessage>): Int? {
356363
return state.anchorPosition?.let { anchorPosition ->
357364
val anchorPage = state.closestPageToPosition(anchorPosition)
@@ -361,6 +368,7 @@ private class ChatsPagingSource(
361368

362369
@SuppressLint("RestrictedApi")
363370
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, ConversationWithMembersAndLastMessage> {
371+
observer.registerIfNecessary(db)
364372
val currentPage = params.key ?: 0
365373
val pageSize = params.loadSize
366374
val offset = currentPage * pageSize

ui/components/src/main/kotlin/com/getcode/ui/components/chat/messagecontents/DateWithStatus.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.wrapContentWidth
1111
import androidx.compose.material.Icon
1212
import androidx.compose.material.Text
1313
import androidx.compose.runtime.Composable
14+
import androidx.compose.ui.Alignment
1415
import androidx.compose.ui.Modifier
1516
import androidx.compose.ui.graphics.Color
1617
import androidx.compose.ui.res.painterResource
@@ -46,7 +47,7 @@ internal fun DateWithStatus(
4647
) {
4748
Row(
4849
modifier = modifier,
49-
horizontalArrangement = Arrangement.spacedBy(DateWithStatusDefaults.Spacing),
50+
horizontalArrangement = Arrangement.spacedBy(DateWithStatusDefaults.Spacing, Alignment.End),
5051
) {
5152
if (showTimestamp) {
5253
Text(

ui/components/src/main/kotlin/com/getcode/ui/components/chat/messagecontents/MessageReplyContent.kt

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,13 +118,33 @@ internal fun MessageNodeScope.MessageReplyContent(
118118
// Determine the final width based on the longer of the two components
119119
val finalWidth = maxOf(messageContentPlaceable.width, replyPreviewPlaceable.width)
120120

121+
// Remeasure MessageContent with the updated width
122+
val remeasuredMessageContentPlaceable = subcompose("MessageContentRemeasured") {
123+
MessageContent(
124+
maxWidth = finalWidth,
125+
minWidth = finalWidth,
126+
message = content,
127+
date = date,
128+
status = status,
129+
isFromSelf = isFromSelf,
130+
isFromBlockedMember = isFromBlockedMember,
131+
options = options,
132+
tips = tips,
133+
openTipModal = showTips,
134+
onLongPress = showControls,
135+
onDoubleClick = showTipSelection,
136+
)
137+
}.first().measure(
138+
constraints.copy(minWidth = finalWidth, maxWidth = finalWidth)
139+
)
140+
121141
// Calculate the total height
122-
val totalHeight = replyPreviewPlaceable.height + spacing + messageContentPlaceable.height
142+
val totalHeight = replyPreviewPlaceable.height + spacing + remeasuredMessageContentPlaceable.height
123143

124144
// Layout the components
125145
layout(finalWidth, totalHeight) {
126146
replyPreviewPlaceable.place(0, 0)
127-
messageContentPlaceable.place(0, replyPreviewPlaceable.height + spacing)
147+
remeasuredMessageContentPlaceable.place(0, replyPreviewPlaceable.height + spacing)
128148
}
129149
}
130150
}

ui/components/src/main/kotlin/com/getcode/ui/components/chat/messagecontents/MessageTextContent.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ import com.getcode.ui.components.chat.utils.MessageTip
6565
import com.getcode.ui.components.text.markup.Markup
6666
import com.getcode.ui.components.text.markup.MarkupTextHelper
6767
import com.getcode.ui.utils.addIf
68+
import com.getcode.ui.utils.debugBounds
6869
import com.getcode.ui.utils.rememberedLongClickable
6970
import kotlinx.datetime.Instant
7071

@@ -266,7 +267,7 @@ internal fun MessageContent(
266267
when (alignmentRule) {
267268
AlignmentRule.Column -> {
268269
Column(
269-
modifier = modifier,
270+
modifier = modifier.width(IntrinsicSize.Max),
270271
verticalArrangement = Arrangement.spacedBy(CodeTheme.dimens.grid.x1)
271272
) {
272273
MarkupTextHandler(
@@ -278,13 +279,16 @@ internal fun MessageContent(
278279
)
279280

280281
Row(
281-
modifier = Modifier.width(IntrinsicSize.Max),
282+
modifier = Modifier.fillMaxWidth(),
282283
horizontalArrangement = Arrangement.spacedBy(CodeTheme.dimens.grid.x2)
283284
) {
284-
Tips(tips) { openTipModal() }
285+
if (tips.isNotEmpty()) {
286+
Tips(tips) { openTipModal() }
287+
}
285288
Spacer(Modifier.weight(1f))
286289
DateWithStatus(
287290
modifier = Modifier
291+
.weight(1f)
288292
.align(Alignment.Bottom)
289293
.pointerInput(Unit) {
290294
detectTapGestures(
@@ -307,7 +311,7 @@ internal fun MessageContent(
307311

308312
AlignmentRule.ParagraphLastLine -> {
309313
Column(
310-
modifier = modifier.padding(CodeTheme.dimens.grid.x1)
314+
modifier = modifier.padding(CodeTheme.dimens.grid.x1),
311315
) {
312316
MarkupTextHandler(
313317
text = annotatedMessage,
@@ -337,7 +341,7 @@ internal fun MessageContent(
337341

338342
AlignmentRule.SingleLineEnd -> {
339343
Row(
340-
modifier = modifier,
344+
modifier = modifier.width(IntrinsicSize.Max),
341345
horizontalArrangement = Arrangement.spacedBy(CodeTheme.dimens.grid.x1)
342346
) {
343347
MarkupTextHandler(
@@ -347,6 +351,7 @@ internal fun MessageContent(
347351
isFromBlockedMember = isFromBlockedMember,
348352
onDoubleClick = onDoubleClick,
349353
)
354+
Spacer(Modifier.weight(1f))
350355
DateWithStatus(
351356
modifier = Modifier
352357
.padding(top = CodeTheme.dimens.grid.x1 + 2.dp)

0 commit comments

Comments
 (0)