feat(core/notifications): auto mark as read

This commit is contained in:
rhunk
2024-04-10 23:15:06 +02:00
parent 8da3bf86b4
commit 5c6c1c374d
2 changed files with 19 additions and 12 deletions

View File

@ -6,21 +6,27 @@ import me.rhunk.snapenhance.core.features.FeatureLoadParams
import me.rhunk.snapenhance.core.features.impl.spying.StealthMode
class AutoMarkAsRead : Feature("Auto Mark As Read", loadParams = FeatureLoadParams.INIT_SYNC) {
override fun init() {
if (!context.config.messaging.autoMarkAsRead.get()) return
val isEnabled by lazy { context.config.messaging.autoMarkAsRead.get() }
context.event.subscribe(SendMessageWithContentEvent::class) { event ->
event.addCallbackResult("onSuccess") {
event.destinations.conversations!!.map { it.toString() }.forEach { conversationId ->
val lastClientMessageId = context.database.getMessagesFromConversationId(conversationId, 1)?.firstOrNull()?.clientMessageId?.toLong() ?: Long.MAX_VALUE
context.feature(StealthMode::class).addDisplayedMessageException(lastClientMessageId)
context.feature(Messaging::class).conversationManager?.displayedMessages(conversationId, lastClientMessageId) {
if (it != null) {
context.log.warn("Failed to mark message $lastClientMessageId as read in conversation $conversationId")
}
}
fun markConversationsAsRead(conversationIds: List<String>) {
conversationIds.forEach { conversationId ->
val lastClientMessageId = context.database.getMessagesFromConversationId(conversationId, 1)?.firstOrNull()?.clientMessageId?.toLong() ?: Long.MAX_VALUE
context.feature(StealthMode::class).addDisplayedMessageException(lastClientMessageId)
context.feature(Messaging::class).conversationManager?.displayedMessages(conversationId, lastClientMessageId) {
if (it != null) {
context.log.warn("Failed to mark message $lastClientMessageId as read in conversation $conversationId")
}
}
}
}
override fun init() {
if (!isEnabled) return
context.event.subscribe(SendMessageWithContentEvent::class) { event ->
event.addCallbackResult("onSuccess") {
markConversationsAsRead(event.destinations.conversations?.map { it.toString() } ?: return@addCallbackResult)
}
}
}
}

View File

@ -201,6 +201,7 @@ class Notifications : Feature("Notifications", loadParams = FeatureLoadParams.IN
}, onSuccess = {
context.coroutineScope.launch(coroutineDispatcher) {
appendNotificationText("${myUser.displayName ?: myUser.mutableUsername}: $input")
context.feature(AutoMarkAsRead::class).takeIf { it.isEnabled }?.markConversationsAsRead(listOf(conversationId))
}
})
}