mirror of
https://github.com/LiveFastEatTrashRaccoon/RaccoonForLemmy.git
synced 2025-02-02 23:47:54 +01:00
fix(inbox): several fixes (#178)
* fix: chat fonts * fix: chat loading * fix: count messages in inbox unread
This commit is contained in:
parent
f52c4682bf
commit
7aecc6d741
@ -93,12 +93,18 @@ internal fun getTypography(
|
||||
fontSize = 14.sp,
|
||||
letterSpacing = (0.25).sp,
|
||||
),
|
||||
labelMedium = TextStyle(
|
||||
fontFamily = fontFamily,
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 12.sp,
|
||||
letterSpacing = (0.5).sp,
|
||||
),
|
||||
// button
|
||||
labelLarge = TextStyle(
|
||||
fontFamily = fontFamily,
|
||||
fontWeight = FontWeight.Medium,
|
||||
fontSize = 14.sp,
|
||||
letterSpacing = (0.15).sp, // original: 1.25
|
||||
letterSpacing = (0.1).sp,
|
||||
),
|
||||
// caption
|
||||
bodySmall = TextStyle(
|
||||
@ -111,7 +117,7 @@ internal fun getTypography(
|
||||
labelSmall = TextStyle(
|
||||
fontFamily = fontFamily,
|
||||
fontWeight = FontWeight.Normal,
|
||||
fontSize = 10.sp,
|
||||
fontSize = 11.sp,
|
||||
letterSpacing = (0.5).sp, // original: 1.5
|
||||
),
|
||||
)
|
||||
|
@ -10,4 +10,10 @@ data class PrivateMessageModel(
|
||||
val publishDate: String? = null,
|
||||
val updateDate: String? = null,
|
||||
val read: Boolean = false,
|
||||
) : JavaSerializable
|
||||
) : JavaSerializable
|
||||
|
||||
fun PrivateMessageModel.otherUser(currentUserId: Int): UserModel? = when (currentUserId) {
|
||||
creator?.id -> recipient
|
||||
recipient?.id -> creator
|
||||
else -> null
|
||||
}
|
@ -32,6 +32,7 @@ val inboxTabModule = module {
|
||||
identityRepository = get(),
|
||||
siteRepository = get(),
|
||||
commentRepository = get(),
|
||||
messageRepository = get(),
|
||||
themeRepository = get(),
|
||||
settingsRepository = get(),
|
||||
hapticFeedback = get(),
|
||||
@ -45,6 +46,7 @@ val inboxTabModule = module {
|
||||
userRepository = get(),
|
||||
identityRepository = get(),
|
||||
commentRepository = get(),
|
||||
messageRepository = get(),
|
||||
themeRepository = get(),
|
||||
settingsRepository = get(),
|
||||
hapticFeedback = get(),
|
||||
|
@ -11,6 +11,7 @@ import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.Ident
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PersonMentionModel
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.CommentRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PrivateMessageRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.UserRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.InboxCoordinator
|
||||
import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.main.InboxMviModel
|
||||
@ -27,6 +28,7 @@ class InboxMentionsViewModel(
|
||||
private val commentRepository: CommentRepository,
|
||||
private val themeRepository: ThemeRepository,
|
||||
private val settingsRepository: SettingsRepository,
|
||||
private val messageRepository: PrivateMessageRepository,
|
||||
private val hapticFeedback: HapticFeedback,
|
||||
private val coordinator: InboxCoordinator,
|
||||
private val notificationCenter: NotificationCenter,
|
||||
@ -288,6 +290,11 @@ class InboxMentionsViewModel(
|
||||
userRepository.getMentions(auth, page = 1, limit = 50).orEmpty().count()
|
||||
val replyCount =
|
||||
userRepository.getReplies(auth, page = 1, limit = 50).orEmpty().count()
|
||||
val messageCount =
|
||||
messageRepository.getAll(auth, page = 1, limit = 50).orEmpty().groupBy {
|
||||
listOf(it.creator?.id ?: 0, it.recipient?.id ?: 0).sorted()
|
||||
.joinToString()
|
||||
}.count()
|
||||
mentionCount + replyCount
|
||||
} else {
|
||||
0
|
||||
|
@ -121,13 +121,13 @@ internal fun ChatCard(
|
||||
append("@$creatorHost")
|
||||
}
|
||||
},
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurface,
|
||||
)
|
||||
ScaledContent {
|
||||
// last message text
|
||||
PostCardTitle(
|
||||
modifier = Modifier.heightIn(max = 80.dp),
|
||||
modifier = Modifier.heightIn(max = 76.dp),
|
||||
text = lastMessage,
|
||||
autoLoadImages = autoLoadImages,
|
||||
onClick = rememberCallback {
|
||||
@ -152,7 +152,7 @@ internal fun ChatCard(
|
||||
)
|
||||
Text(
|
||||
text = lastMessageDate.prettifyDate(),
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
color = MaterialTheme.colorScheme.onSurface,
|
||||
)
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
|
@ -37,6 +37,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.commonui.di.getNavigationCo
|
||||
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.userdetail.UserDetailScreen
|
||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
|
||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.otherUser
|
||||
import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.di.getInboxMessagesViewModel
|
||||
import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.ui.InboxTab
|
||||
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
|
||||
@ -95,7 +96,7 @@ class InboxMessagesScreen : Tab {
|
||||
verticalArrangement = Arrangement.spacedBy(Spacing.xs),
|
||||
) {
|
||||
if (uiState.chats.isEmpty() && uiState.initial) {
|
||||
items(1) {
|
||||
items(3) {
|
||||
ChatCardPlaceholder()
|
||||
}
|
||||
}
|
||||
@ -112,15 +113,12 @@ class InboxMessagesScreen : Tab {
|
||||
}
|
||||
items(
|
||||
items = uiState.chats,
|
||||
key = { it.id.toString() + uiState.unreadOnly },
|
||||
key = {
|
||||
it.id.toString() + it.updateDate + uiState.unreadOnly
|
||||
},
|
||||
) { chat ->
|
||||
val otherUser = if (chat.creator?.id == uiState.currentUserId) {
|
||||
chat.recipient
|
||||
} else {
|
||||
chat.creator
|
||||
}
|
||||
ChatCard(
|
||||
user = otherUser,
|
||||
user = chat.otherUser(uiState.currentUserId),
|
||||
autoLoadImages = uiState.autoLoadImages,
|
||||
lastMessage = chat.content.orEmpty(),
|
||||
lastMessageDate = chat.publishDate,
|
||||
@ -130,7 +128,7 @@ class InboxMessagesScreen : Tab {
|
||||
)
|
||||
},
|
||||
onOpen = rememberCallback {
|
||||
val userId = otherUser?.id
|
||||
val userId = chat.otherUser(uiState.currentUserId)?.id
|
||||
if (userId != null) {
|
||||
navigationCoordinator.pushScreen(
|
||||
InboxChatScreen(userId)
|
||||
|
@ -6,6 +6,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationC
|
||||
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterEvent
|
||||
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.otherUser
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PrivateMessageRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.SiteRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.UserRepository
|
||||
@ -107,11 +108,9 @@ class InboxMessagesViewModel(
|
||||
page = currentPage,
|
||||
unreadOnly = unreadOnly,
|
||||
)?.groupBy {
|
||||
val creatorId = it.creator?.id ?: 0
|
||||
val recipientId = it.recipient?.id ?: 0
|
||||
listOf(creatorId, recipientId).sorted().toString()
|
||||
}?.mapNotNull {
|
||||
val messages = it.value.sortedBy { m -> m.publishDate }
|
||||
it.otherUser(currentState.currentUserId)?.id ?: 0
|
||||
}?.mapNotNull { entry ->
|
||||
val messages = entry.value.sortedBy { m -> m.publishDate }
|
||||
messages.lastOrNull()
|
||||
}
|
||||
if (!itemList.isNullOrEmpty()) {
|
||||
@ -121,7 +120,13 @@ class InboxMessagesViewModel(
|
||||
val newItems = if (refreshing) {
|
||||
itemList.orEmpty()
|
||||
} else {
|
||||
it.chats + itemList.orEmpty()
|
||||
it.chats + itemList.orEmpty().filter { outerChat ->
|
||||
val outerOtherUser = outerChat.otherUser(currentState.currentUserId)
|
||||
currentState.chats.none { chat ->
|
||||
val otherUser = chat.otherUser(currentState.currentUserId)
|
||||
outerOtherUser == otherUser
|
||||
}
|
||||
}
|
||||
}
|
||||
it.copy(
|
||||
chats = newItems,
|
||||
@ -141,7 +146,12 @@ class InboxMessagesViewModel(
|
||||
userRepository.getMentions(auth, page = 1, limit = 50).orEmpty().count()
|
||||
val replyCount =
|
||||
userRepository.getReplies(auth, page = 1, limit = 50).orEmpty().count()
|
||||
mentionCount + replyCount
|
||||
val messageCount =
|
||||
messageRepository.getAll(auth, page = 1, limit = 50).orEmpty().groupBy {
|
||||
listOf(it.creator?.id ?: 0, it.recipient?.id ?: 0).sorted()
|
||||
.joinToString()
|
||||
}.count()
|
||||
mentionCount + replyCount + messageCount
|
||||
} else {
|
||||
0
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.Ident
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.PersonMentionModel
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.CommentRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PrivateMessageRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.SiteRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.UserRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.feature.inbox.InboxCoordinator
|
||||
@ -27,6 +28,7 @@ class InboxRepliesViewModel(
|
||||
private val userRepository: UserRepository,
|
||||
private val siteRepository: SiteRepository,
|
||||
private val commentRepository: CommentRepository,
|
||||
private val messageRepository: PrivateMessageRepository,
|
||||
private val themeRepository: ThemeRepository,
|
||||
private val hapticFeedback: HapticFeedback,
|
||||
private val coordinator: InboxCoordinator,
|
||||
@ -294,6 +296,11 @@ class InboxRepliesViewModel(
|
||||
userRepository.getMentions(auth, page = 1, limit = 50).orEmpty().count()
|
||||
val replyCount =
|
||||
userRepository.getReplies(auth, page = 1, limit = 50).orEmpty().count()
|
||||
val messageCount =
|
||||
messageRepository.getAll(auth, page = 1, limit = 50).orEmpty().groupBy {
|
||||
listOf(it.creator?.id ?: 0, it.recipient?.id ?: 0).sorted()
|
||||
.joinToString()
|
||||
}.count()
|
||||
mentionCount + replyCount
|
||||
} else {
|
||||
0
|
||||
|
@ -3,6 +3,7 @@ package com.github.diegoberaldin.raccoonforlemmy
|
||||
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel
|
||||
import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository.IdentityRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.PrivateMessageRepository
|
||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.UserRepository
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.IO
|
||||
@ -15,6 +16,7 @@ class MainViewModel(
|
||||
private val mvi: DefaultMviModel<MainScreenMviModel.Intent, MainScreenMviModel.UiState, MainScreenMviModel.Effect>,
|
||||
private val identityRepository: IdentityRepository,
|
||||
private val userRepository: UserRepository,
|
||||
private val messageRepository: PrivateMessageRepository,
|
||||
) : MainScreenMviModel,
|
||||
MviModel<MainScreenMviModel.Intent, MainScreenMviModel.UiState, MainScreenMviModel.Effect> by mvi {
|
||||
|
||||
@ -30,7 +32,12 @@ class MainViewModel(
|
||||
userRepository.getMentions(auth, page = 1, limit = 50).orEmpty().count()
|
||||
val replyCount =
|
||||
userRepository.getReplies(auth, page = 1, limit = 50).orEmpty().count()
|
||||
mentionCount + replyCount
|
||||
val messageCount =
|
||||
messageRepository.getAll(auth, page = 1, limit = 50).orEmpty().groupBy {
|
||||
listOf(it.creator?.id ?: 0, it.recipient?.id ?: 0).sorted()
|
||||
.joinToString()
|
||||
}.count()
|
||||
mentionCount + replyCount + messageCount
|
||||
} else {
|
||||
0
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ internal val internalSharedModule = module {
|
||||
mvi = DefaultMviModel(MainScreenMviModel.UiState()),
|
||||
identityRepository = get(),
|
||||
userRepository = get(),
|
||||
messageRepository = get(),
|
||||
)
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user