mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-12 21:27:47 +02:00
feat(core/notifications): auto mark as read
This commit is contained in:
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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))
|
||||
}
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user