commit 9c5a590a6088aab4d9a623c732b47757c638a684
parent a6d5d289a42a3f9c8b618f85613e549c4d17445b
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Mon, 27 Nov 2023 17:51:46 +0100

feat(core): strip media metadata

Diffstat:
Mcommon/src/main/assets/lang/en_US.json | 11+++++++++++
Mcommon/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/MessagingTweaks.kt | 1+
Mcore/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/messaging/SendOverride.kt | 49+++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 61 insertions(+), 0 deletions(-)

diff --git a/common/src/main/assets/lang/en_US.json b/common/src/main/assets/lang/en_US.json @@ -393,6 +393,10 @@ "name": "Gallery Media Send Override", "description": "Spoofs the media source when sending from the Gallery" }, + "strip_media_metadata": { + "name": "Strip Media Metadata", + "description": "Removes metadata of media before sending as a message" + }, "bypass_message_retention_policy": { "name": "Bypass Message Retention Policy", "description": "Prevents messages from being deleted after viewing them" @@ -716,6 +720,13 @@ "SNAP": "Snap", "SAVABLE_SNAP": "Savable Snap" }, + "strip_media_metadata": { + "hide_caption_text": "Hide Caption Text", + "hide_snap_filters": "Hide Snap Filters", + "hide_extras": "Hide Extras (e.g. mentions)", + "remove_audio_note_duration": "Remove Audio Note Duration", + "remove_audio_note_transcript_capability": "Remove Audio Note Transcript Capability" + }, "hide_ui_components": { "hide_profile_call_buttons": "Remove Profile Call Buttons", "hide_chat_call_buttons": "Remove Chat Call Buttons", diff --git a/common/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/MessagingTweaks.kt b/common/src/main/kotlin/me/rhunk/snapenhance/common/config/impl/MessagingTweaks.kt @@ -34,5 +34,6 @@ class MessagingTweaks : ConfigContainer() { } val messageLogger = boolean("message_logger") { addNotices(FeatureNotice.UNSTABLE); requireRestart() } val galleryMediaSendOverride = boolean("gallery_media_send_override") { nativeHooks() } + val stripMediaMetadata = multiple("strip_media_metadata", "hide_caption_text", "hide_snap_filters", "hide_extras", "remove_audio_note_duration", "remove_audio_note_transcript_capability") { requireRestart() } val bypassMessageRetentionPolicy = boolean("bypass_message_retention_policy") { addNotices(FeatureNotice.UNSTABLE); requireRestart() } } \ No newline at end of file diff --git a/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/messaging/SendOverride.kt b/core/src/main/kotlin/me/rhunk/snapenhance/core/features/impl/messaging/SendOverride.kt @@ -50,6 +50,55 @@ class SendOverride : Feature("Send Override", loadParams = FeatureLoadParams.INI event.buffer = protoEditor.toByteArray() } + val stripSnapMetadata = context.config.messaging.stripMediaMetadata.get() + + context.event.subscribe(SendMessageWithContentEvent::class, { + stripSnapMetadata.isNotEmpty() + }) { event -> + val contentType = event.messageContent.contentType ?: return@subscribe + + val newMessageContent = ProtoEditor(event.messageContent.content!!).apply { + when (contentType) { + ContentType.SNAP, ContentType.EXTERNAL_MEDIA -> { + edit(*(if (contentType == ContentType.SNAP) intArrayOf(11) else intArrayOf(3, 3))) { + if (stripSnapMetadata.contains("hide_caption_text")) { + edit(5) { + editEach(1) { + remove(2) + } + } + } + if (stripSnapMetadata.contains("hide_snap_filters")) { + remove(9) + remove(11) + } + if (stripSnapMetadata.contains("hide_extras")) { + remove(13) + edit(5, 1) { + remove(2) + } + } + } + } + ContentType.NOTE -> { + if (stripSnapMetadata.contains("remove_audio_note_duration")) { + edit(6, 1, 1) { + remove(13) + } + } + if (stripSnapMetadata.contains("remove_audio_note_transcript_capability")) { + edit(6, 1) { + remove(3) + } + } + } + else -> return@subscribe + } + }.toByteArray() + + event.messageContent.content = newMessageContent + } + context.event.subscribe(SendMessageWithContentEvent::class, { context.config.messaging.galleryMediaSendOverride.get() }) { event ->