From f95fae197a9fa9c93d9c6ffd34abd1c22b2f9a88 Mon Sep 17 00:00:00 2001 From: rhunk <101876869+rhunk@users.noreply.github.com> Date: Fri, 26 May 2023 17:11:41 +0200 Subject: [PATCH] feat: delete logged message --- .../snapenhance/bridge/AbstractBridgeClient.kt | 7 +++++++ .../snapenhance/bridge/MessageLoggerWrapper.kt | 4 ++++ .../snapenhance/bridge/client/RootBridgeClient.kt | 4 ++++ .../bridge/client/ServiceBridgeClient.kt | 8 ++++++++ .../impl/messagelogger/MessageLoggerRequest.kt | 3 ++- .../snapenhance/bridge/service/BridgeService.kt | 3 +++ .../features/impl/ui/menus/impl/ChatActionMenu.kt | 15 ++++++++++++++- 7 files changed, 42 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/AbstractBridgeClient.kt b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/AbstractBridgeClient.kt index 4bf16b66..6f69f3d1 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/AbstractBridgeClient.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/AbstractBridgeClient.kt @@ -81,6 +81,13 @@ abstract class AbstractBridgeClient { */ abstract fun addMessageLoggerMessage(id: Long, message: ByteArray) + /** + * Delete a message from the message logger database + * + * @param id the ID of the message logger message + */ + abstract fun deleteMessageLoggerMessage(id: Long) + /** * Clear the message logger database */ diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/MessageLoggerWrapper.kt b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/MessageLoggerWrapper.kt index 301801c2..254c41be 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/MessageLoggerWrapper.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/MessageLoggerWrapper.kt @@ -15,6 +15,10 @@ class MessageLoggerWrapper( database.execSQL("CREATE TABLE IF NOT EXISTS messages (message_id INTEGER PRIMARY KEY, serialized_message BLOB)") } + fun deleteMessage(messageId: Long) { + database.execSQL("DELETE FROM messages WHERE message_id = ?", arrayOf(messageId.toString())) + } + fun addMessage(messageId: Long, serializedMessage: ByteArray): Boolean { val cursor = database.rawQuery("SELECT message_id FROM messages WHERE message_id = ?", arrayOf(messageId.toString())) val state = cursor.moveToFirst() diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/client/RootBridgeClient.kt b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/client/RootBridgeClient.kt index 4ff4d6ad..444bbc4f 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/client/RootBridgeClient.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/client/RootBridgeClient.kt @@ -77,6 +77,10 @@ class RootBridgeClient : AbstractBridgeClient() { messageLoggerWrapper.addMessage(id, message) } + override fun deleteMessageLoggerMessage(id: Long) { + messageLoggerWrapper.deleteMessage(id) + } + override fun clearMessageLogger() { messageLoggerWrapper.clearMessages() } diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/client/ServiceBridgeClient.kt b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/client/ServiceBridgeClient.kt index 0ab571ab..5bc22893 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/client/ServiceBridgeClient.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/client/ServiceBridgeClient.kt @@ -192,6 +192,14 @@ class ServiceBridgeClient: AbstractBridgeClient(), ServiceConnection { ) } + override fun deleteMessageLoggerMessage(id: Long) { + sendMessage( + BridgeMessageType.MESSAGE_LOGGER_REQUEST, + MessageLoggerRequest(MessageLoggerRequest.Action.DELETE, id), + MessageLoggerResult::class + ) + } + override fun clearMessageLogger() { sendMessage( BridgeMessageType.MESSAGE_LOGGER_REQUEST, diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/common/impl/messagelogger/MessageLoggerRequest.kt b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/common/impl/messagelogger/MessageLoggerRequest.kt index ae9dc2aa..b69378cd 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/common/impl/messagelogger/MessageLoggerRequest.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/common/impl/messagelogger/MessageLoggerRequest.kt @@ -24,6 +24,7 @@ class MessageLoggerRequest( enum class Action { ADD, GET, - CLEAR + CLEAR, + DELETE } } \ No newline at end of file diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/service/BridgeService.kt b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/service/BridgeService.kt index 8908b009..27fbf5ff 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/bridge/service/BridgeService.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/bridge/service/BridgeService.kt @@ -89,6 +89,9 @@ class BridgeService : Service() { MessageLoggerRequest.Action.CLEAR -> { messageLoggerWrapper.clearMessages() } + MessageLoggerRequest.Action.DELETE -> { + messageLoggerWrapper.deleteMessage(msg.messageId!!) + } MessageLoggerRequest.Action.GET -> { val (state, messageData) = messageLoggerWrapper.getMessage(msg.messageId!!) reply(MessageLoggerResult(state, messageData).toMessage(BridgeMessageType.MESSAGE_LOGGER_RESULT.value)) diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/ui/menus/impl/ChatActionMenu.kt b/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/ui/menus/impl/ChatActionMenu.kt index b4bd0317..539228fa 100644 --- a/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/ui/menus/impl/ChatActionMenu.kt +++ b/app/src/main/kotlin/me/rhunk/snapenhance/features/impl/ui/menus/impl/ChatActionMenu.kt @@ -14,6 +14,7 @@ import android.view.ViewGroup.MarginLayoutParams import android.widget.Button import me.rhunk.snapenhance.Constants.VIEW_INJECTED_CODE import me.rhunk.snapenhance.config.ConfigProperty +import me.rhunk.snapenhance.features.impl.Messaging import me.rhunk.snapenhance.features.impl.downloader.MediaDownloader import me.rhunk.snapenhance.features.impl.ui.menus.AbstractMenu @@ -86,6 +87,18 @@ class ChatActionMenu : AbstractMenu() { parent.addView(downloadButton) } - //TODO: delete logged message button + //delete logged message button + if (context.config.bool(ConfigProperty.MESSAGE_LOGGER)) { + val downloadButton = Button(viewGroup.context) + applyButtonTheme(parent, downloadButton) + downloadButton.text = "Deleted logged message" + downloadButton.setOnClickListener { + closeActionMenu() + context.executeAsync { + context.bridgeClient.deleteMessageLoggerMessage(context.feature(Messaging::class).lastFocusedMessageId) + } + } + parent.addView(downloadButton) + } } }