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:
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 ->