From 17a42838d644a6c5002655ee92252037cb18afb4 Mon Sep 17 00:00:00 2001 From: geco <4056852+geco@users.noreply.github.com> Date: Wed, 13 May 2026 15:34:14 +0200 Subject: [PATCH 1/2] feat: implement dynamic source icons via plugin.getIcon() with fallback to static config --- .../futo/platformplayer/engine/V8Plugin.kt | 10 ++++++++++ .../platformplayer/states/StatePlugins.kt | 7 ++++++- .../views/sources/SourceHeaderView.kt | 19 +++++++++++++++---- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/engine/V8Plugin.kt b/app/src/main/java/com/futo/platformplayer/engine/V8Plugin.kt index 13f58e35b..985bcea3c 100644 --- a/app/src/main/java/com/futo/platformplayer/engine/V8Plugin.kt +++ b/app/src/main/java/com/futo/platformplayer/engine/V8Plugin.kt @@ -408,6 +408,16 @@ class V8Plugin { } } } + fun executeString(js: String) : String? = busy { + catchScriptErrors("Plugin[${config.name}]") { + executeTyped(js).value + } + } + fun executeString(js: String) : String? = busy { + catchScriptErrors("Plugin[${config.name}]") { + executeTyped(js).value + } + } fun executeTyped(js: String) : T { warnIfMainThread("V8Plugin.executeTyped"); if(isStopped) diff --git a/app/src/main/java/com/futo/platformplayer/states/StatePlugins.kt b/app/src/main/java/com/futo/platformplayer/states/StatePlugins.kt index b7c2be7a7..4d213d651 100644 --- a/app/src/main/java/com/futo/platformplayer/states/StatePlugins.kt +++ b/app/src/main/java/com/futo/platformplayer/states/StatePlugins.kt @@ -57,8 +57,13 @@ class StatePlugins { return iconsDir.getIconBinary(id); return null; } - + suspend fun getDynamicIcon(id: String): String? = withContext(Dispatchers.IO) { + val client = StatePlatform.instance.getClientOrNull(id) as? JSClient ?: return@withContext null; + return@withContext client.getUnderlyingPlugin().executeString("source.getIcon()") + } fun reloadPluginFile(){ + + _plugins = FragmentedStorage.storeJson("plugins") .load(); } diff --git a/app/src/main/java/com/futo/platformplayer/views/sources/SourceHeaderView.kt b/app/src/main/java/com/futo/platformplayer/views/sources/SourceHeaderView.kt index 614f7d069..03202d0cb 100644 --- a/app/src/main/java/com/futo/platformplayer/views/sources/SourceHeaderView.kt +++ b/app/src/main/java/com/futo/platformplayer/views/sources/SourceHeaderView.kt @@ -77,10 +77,21 @@ class SourceHeaderView : LinearLayout { val loadedIcon = StatePlugins.instance.getPluginIconOrNull(config.id); if(loadedIcon != null) loadedIcon.setImageView(_sourceImage); - else - Glide.with(_sourceImage) - .load(config.absoluteIconUrl) - .into(_sourceImage); + else { + StateApp.instance.scope.launch { + val dynamicIcon = StatePlugins.instance.getDynamicIcon(config.id) + val iconToLoad = dynamicIcon ?: config.absoluteIconUrl + withContext(Dispatchers.Main) { + Glide.with(_sourceImage) + .load(iconToLoad) + .into(_sourceImage); + } + } + } + + } + } + } _sourceTitle.text = config.name; _sourceBy.text = config.author From 8cda28e0c213e072a1ab39cdd66e40f101d1f75d Mon Sep 17 00:00:00 2001 From: geco <4056852+geco@users.noreply.github.com> Date: Wed, 13 May 2026 15:56:03 +0200 Subject: [PATCH 2/2] fix: remove duplicate executeString and fix syntax error in SourceHeaderView --- app/src/main/java/com/futo/platformplayer/engine/V8Plugin.kt | 5 ----- .../futo/platformplayer/views/sources/SourceHeaderView.kt | 5 +---- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/app/src/main/java/com/futo/platformplayer/engine/V8Plugin.kt b/app/src/main/java/com/futo/platformplayer/engine/V8Plugin.kt index 985bcea3c..498b917ee 100644 --- a/app/src/main/java/com/futo/platformplayer/engine/V8Plugin.kt +++ b/app/src/main/java/com/futo/platformplayer/engine/V8Plugin.kt @@ -413,11 +413,6 @@ class V8Plugin { executeTyped(js).value } } - fun executeString(js: String) : String? = busy { - catchScriptErrors("Plugin[${config.name}]") { - executeTyped(js).value - } - } fun executeTyped(js: String) : T { warnIfMainThread("V8Plugin.executeTyped"); if(isStopped) diff --git a/app/src/main/java/com/futo/platformplayer/views/sources/SourceHeaderView.kt b/app/src/main/java/com/futo/platformplayer/views/sources/SourceHeaderView.kt index 03202d0cb..be0961002 100644 --- a/app/src/main/java/com/futo/platformplayer/views/sources/SourceHeaderView.kt +++ b/app/src/main/java/com/futo/platformplayer/views/sources/SourceHeaderView.kt @@ -89,11 +89,8 @@ class SourceHeaderView : LinearLayout { } } - } - } - } - _sourceTitle.text = config.name; + _sourceBy.text = config.author _sourceDescription.text = config.description; _sourceVersion.text = config.version.toString();