mirror of
https://github.com/rhunk/SnapEnhance.git
synced 2025-06-13 05:37:48 +02:00
feat: opera media debug info
This commit is contained in:
@ -1,6 +1,7 @@
|
|||||||
package me.rhunk.snapenhance
|
package me.rhunk.snapenhance
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
|
import android.content.ClipData
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
@ -138,4 +139,8 @@ class ModContext {
|
|||||||
fun getConfigLocale(): String {
|
fun getConfigLocale(): String {
|
||||||
return _config.locale
|
return _config.locale
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun copyToClipboard(data: String, label: String = "Copied Text") {
|
||||||
|
androidContext.getSystemService(android.content.ClipboardManager::class.java).setPrimaryClip(ClipData.newPlainText(label, data))
|
||||||
|
}
|
||||||
}
|
}
|
@ -4,8 +4,10 @@ import android.annotation.SuppressLint
|
|||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.text.InputType
|
||||||
import android.view.Gravity
|
import android.view.Gravity
|
||||||
import android.view.ViewGroup.MarginLayoutParams
|
import android.view.ViewGroup.MarginLayoutParams
|
||||||
|
import android.widget.EditText
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.ProgressBar
|
import android.widget.ProgressBar
|
||||||
@ -13,16 +15,12 @@ import android.widget.TextView
|
|||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
|
import me.rhunk.snapenhance.SnapEnhance
|
||||||
import me.rhunk.snapenhance.bridge.DownloadCallback
|
import me.rhunk.snapenhance.bridge.DownloadCallback
|
||||||
import me.rhunk.snapenhance.core.database.objects.ConversationMessage
|
import me.rhunk.snapenhance.core.database.objects.ConversationMessage
|
||||||
import me.rhunk.snapenhance.core.database.objects.FriendInfo
|
import me.rhunk.snapenhance.core.database.objects.FriendInfo
|
||||||
import me.rhunk.snapenhance.core.download.DownloadManagerClient
|
import me.rhunk.snapenhance.core.download.DownloadManagerClient
|
||||||
import me.rhunk.snapenhance.core.download.data.DownloadMediaType
|
import me.rhunk.snapenhance.core.download.data.*
|
||||||
import me.rhunk.snapenhance.core.download.data.DownloadMetadata
|
|
||||||
import me.rhunk.snapenhance.core.download.data.InputMedia
|
|
||||||
import me.rhunk.snapenhance.core.download.data.MediaDownloadSource
|
|
||||||
import me.rhunk.snapenhance.core.download.data.SplitMediaAssetType
|
|
||||||
import me.rhunk.snapenhance.core.download.data.toKeyPair
|
|
||||||
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
|
import me.rhunk.snapenhance.core.messaging.MessagingRuleType
|
||||||
import me.rhunk.snapenhance.core.util.download.RemoteMediaResolver
|
import me.rhunk.snapenhance.core.util.download.RemoteMediaResolver
|
||||||
import me.rhunk.snapenhance.core.util.ktx.getObjectField
|
import me.rhunk.snapenhance.core.util.ktx.getObjectField
|
||||||
@ -31,6 +29,7 @@ import me.rhunk.snapenhance.core.util.snap.BitmojiSelfie
|
|||||||
import me.rhunk.snapenhance.core.util.snap.MediaDownloaderHelper
|
import me.rhunk.snapenhance.core.util.snap.MediaDownloaderHelper
|
||||||
import me.rhunk.snapenhance.core.util.snap.PreviewUtils
|
import me.rhunk.snapenhance.core.util.snap.PreviewUtils
|
||||||
import me.rhunk.snapenhance.data.FileType
|
import me.rhunk.snapenhance.data.FileType
|
||||||
|
import me.rhunk.snapenhance.data.wrapper.impl.SnapUUID
|
||||||
import me.rhunk.snapenhance.data.wrapper.impl.media.MediaInfo
|
import me.rhunk.snapenhance.data.wrapper.impl.media.MediaInfo
|
||||||
import me.rhunk.snapenhance.data.wrapper.impl.media.dash.LongformVideoPlaylistItem
|
import me.rhunk.snapenhance.data.wrapper.impl.media.dash.LongformVideoPlaylistItem
|
||||||
import me.rhunk.snapenhance.data.wrapper.impl.media.dash.SnapPlaylistItem
|
import me.rhunk.snapenhance.data.wrapper.impl.media.dash.SnapPlaylistItem
|
||||||
@ -179,6 +178,42 @@ class MediaDownloader : MessagingRuleFeature("MediaDownloader", MessagingRuleTyp
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun showLastOperaDebugMediaInfo() {
|
||||||
|
if (lastSeenMapParams == null || lastSeenMediaInfoMap == null) return
|
||||||
|
|
||||||
|
context.runOnUiThread {
|
||||||
|
val mediaInfoText = lastSeenMapParams?.concurrentHashMap?.map { (key, value) ->
|
||||||
|
val transformedValue = value.let {
|
||||||
|
if (it::class.java == SnapEnhance.classCache.snapUUID) {
|
||||||
|
SnapUUID(it).toString()
|
||||||
|
}
|
||||||
|
it
|
||||||
|
}
|
||||||
|
"- $key: $transformedValue"
|
||||||
|
}?.joinToString("\n") ?: "No media info found"
|
||||||
|
|
||||||
|
ViewAppearanceHelper.newAlertDialogBuilder(context.mainActivity!!).apply {
|
||||||
|
setTitle("Debug Media Info")
|
||||||
|
setView(EditText(context).apply {
|
||||||
|
inputType = InputType.TYPE_NULL
|
||||||
|
setTextIsSelectable(true)
|
||||||
|
isSingleLine = false
|
||||||
|
textSize = 12f
|
||||||
|
setPadding(20, 20, 20, 20)
|
||||||
|
setText(mediaInfoText)
|
||||||
|
setTextColor(context.resources.getColor(android.R.color.white, context.theme))
|
||||||
|
})
|
||||||
|
setNeutralButton("Copy") { _, _ ->
|
||||||
|
this@MediaDownloader.context.copyToClipboard(mediaInfoText)
|
||||||
|
}
|
||||||
|
setPositiveButton("Download") { _, _ ->
|
||||||
|
downloadLastOperaMediaAsync()
|
||||||
|
}
|
||||||
|
setNegativeButton("Cancel") { dialog, _ -> dialog.dismiss() }
|
||||||
|
}.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun handleLocalReferences(path: String) = runBlocking {
|
private fun handleLocalReferences(path: String) = runBlocking {
|
||||||
Uri.parse(path).let { uri ->
|
Uri.parse(path).let { uri ->
|
||||||
if (uri.scheme == "file") {
|
if (uri.scheme == "file") {
|
||||||
|
@ -78,8 +78,7 @@ class ChatActionMenu : AbstractMenu() {
|
|||||||
setMessage(text)
|
setMessage(text)
|
||||||
setPositiveButton("OK") { dialog, _ -> dialog.dismiss() }
|
setPositiveButton("OK") { dialog, _ -> dialog.dismiss() }
|
||||||
setNegativeButton("Copy") { _, _ ->
|
setNegativeButton("Copy") { _, _ ->
|
||||||
val clipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as android.content.ClipboardManager
|
this@ChatActionMenu.context.copyToClipboard(text, title)
|
||||||
clipboardManager.setPrimaryClip(android.content.ClipData.newPlainText("debug", text))
|
|
||||||
}
|
}
|
||||||
}.show()
|
}.show()
|
||||||
}
|
}
|
||||||
@ -173,8 +172,7 @@ class ChatActionMenu : AbstractMenu() {
|
|||||||
val debugText = StringBuilder()
|
val debugText = StringBuilder()
|
||||||
|
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
val clipboardManager = context.getSystemService(android.content.Context.CLIPBOARD_SERVICE) as android.content.ClipboardManager
|
this@ChatActionMenu.context.copyToClipboard(debugText.toString(), "debug")
|
||||||
clipboardManager.setPrimaryClip(android.content.ClipData.newPlainText("debug", debugText.toString()))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
addView(TextView(viewGroup.context).apply {
|
addView(TextView(viewGroup.context).apply {
|
||||||
|
@ -68,11 +68,23 @@ class OperaContextActionMenu : AbstractMenu() {
|
|||||||
ViewGroup.LayoutParams.MATCH_PARENT,
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
ViewGroup.LayoutParams.MATCH_PARENT
|
ViewGroup.LayoutParams.MATCH_PARENT
|
||||||
)
|
)
|
||||||
val button = Button(childView.getContext())
|
val translation = context.translation
|
||||||
button.text = context.translation["opera_context_menu.download"]
|
val mediaDownloader = context.feature(MediaDownloader::class)
|
||||||
button.setOnClickListener { context.feature(MediaDownloader::class).downloadLastOperaMediaAsync() }
|
|
||||||
button.applyTheme(isAmoled = false)
|
linearLayout.addView(Button(childView.getContext()).apply {
|
||||||
linearLayout.addView(button)
|
text = translation["opera_context_menu.download"]
|
||||||
|
setOnClickListener { mediaDownloader.downloadLastOperaMediaAsync() }
|
||||||
|
applyTheme(isAmoled = false)
|
||||||
|
})
|
||||||
|
|
||||||
|
if (context.isDeveloper) {
|
||||||
|
linearLayout.addView(Button(childView.getContext()).apply {
|
||||||
|
text = "Show debug info"
|
||||||
|
setOnClickListener { mediaDownloader.showLastOperaDebugMediaInfo() }
|
||||||
|
applyTheme(isAmoled = false)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
(childView as ViewGroup).addView(linearLayout, 0)
|
(childView as ViewGroup).addView(linearLayout, 0)
|
||||||
} catch (e: Throwable) {
|
} catch (e: Throwable) {
|
||||||
context.log.error("Error while injecting OperaContextActionMenu", e)
|
context.log.error("Error while injecting OperaContextActionMenu", e)
|
||||||
|
Reference in New Issue
Block a user