diff --git a/app/src/main/java/com/futo/platformplayer/Extensions_V8.kt b/app/src/main/java/com/futo/platformplayer/Extensions_V8.kt index d8427dc6..000b4004 100644 --- a/app/src/main/java/com/futo/platformplayer/Extensions_V8.kt +++ b/app/src/main/java/com/futo/platformplayer/Extensions_V8.kt @@ -294,17 +294,32 @@ class V8Deferred(val deferred: Deferred, val estDuration: Int = -1): Defer } -fun V8ValueObject.invokeV8(method: String, vararg obj: Any): T { +fun V8ValueObject.invokeV8(method: String, vararg obj: Any?): T { var result = this.invoke(method, *obj); if(result is V8ValuePromise) { return result.toV8ValueBlocking(this.getSourcePlugin()!!); } return result as T; } -fun V8ValueObject.invokeV8Async(method: String, vararg obj: Any): V8Deferred { +fun V8ValueObject.invokeV8Async(method: String, vararg obj: Any?): V8Deferred { var result = this.invoke(method, *obj); if(result is V8ValuePromise) { return result.toV8ValueAsync(this.getSourcePlugin()!!); } return V8Deferred(CompletableDeferred(result as T)); +} +fun V8ValueObject.invokeV8Void(method: String, vararg obj: Any?): V8Value { + var result = this.invoke(method, *obj); + if(result is V8ValuePromise) { + return result.toV8ValueBlocking(this.getSourcePlugin()!!); + } + return result; +} +fun V8ValueObject.invokeV8VoidAsync(method: String, vararg obj: Any?): V8Deferred { + var result = this.invoke(method, *obj); + if(result is V8ValuePromise) { + val result = result.toV8ValueAsync(this.getSourcePlugin()!!); + return result; + } + return V8Deferred(CompletableDeferred(result)); } \ No newline at end of file diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSPager.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSPager.kt index e81a288d..f363a011 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSPager.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSPager.kt @@ -10,6 +10,7 @@ import com.futo.platformplayer.api.media.structures.IPager import com.futo.platformplayer.engine.V8Plugin import com.futo.platformplayer.getOrDefault import com.futo.platformplayer.getOrThrow +import com.futo.platformplayer.invokeV8 import com.futo.platformplayer.warnIfMainThread abstract class JSPager : IPager { @@ -49,7 +50,7 @@ abstract class JSPager : IPager { val pluginV8 = plugin.getUnderlyingPlugin(); pluginV8.busy { pager = pluginV8.catchScriptErrors("[${plugin.config.name}] JSPager", "pager.nextPage()") { - pager.invoke("nextPage", arrayOf()); + pager.invokeV8("nextPage", arrayOf()); }; _hasMorePages = pager.getOrDefault(config, "hasMore", "Pager", false) ?: false; _resultChanged = true; diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSPlaybackTracker.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSPlaybackTracker.kt index 15a7d854..bd0e4400 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSPlaybackTracker.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSPlaybackTracker.kt @@ -6,6 +6,7 @@ import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.engine.IV8PluginConfig import com.futo.platformplayer.engine.exceptions.ScriptImplementationException import com.futo.platformplayer.getOrThrow +import com.futo.platformplayer.invokeV8Void import com.futo.platformplayer.logging.Logger import com.futo.platformplayer.states.StatePlatform import com.futo.platformplayer.warnIfMainThread @@ -57,7 +58,7 @@ class JSPlaybackTracker: IPlaybackTracker { _client.busy { if (_hasInit) { Logger.i("JSPlaybackTracker", "onInit (${seconds})"); - _obj.invokeVoid("onInit", seconds); + _obj.invokeV8Void("onInit", seconds); } nextRequest = Math.max(100, _obj.getOrThrow(_config, "nextRequest", "PlaybackTracker", false)); _hasCalledInit = true; @@ -73,7 +74,7 @@ class JSPlaybackTracker: IPlaybackTracker { else { _client.busy { Logger.i("JSPlaybackTracker", "onProgress (${seconds}, ${isPlaying})"); - _obj.invokeVoid("onProgress", Math.floor(seconds), isPlaying); + _obj.invokeV8Void("onProgress", Math.floor(seconds), isPlaying); nextRequest = Math.max(100, _obj.getOrThrow(_config, "nextRequest", "PlaybackTracker", false)); _lastRequest = System.currentTimeMillis(); } @@ -86,7 +87,7 @@ class JSPlaybackTracker: IPlaybackTracker { synchronized(_obj) { Logger.i("JSPlaybackTracker", "onConcluded"); _client.busy { - _obj.invokeVoid("onConcluded", -1); + _obj.invokeV8Void("onConcluded", -1); } } } diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestExecutor.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestExecutor.kt index 36cfc7db..ed428790 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestExecutor.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestExecutor.kt @@ -14,6 +14,8 @@ import com.futo.platformplayer.engine.exceptions.ScriptException import com.futo.platformplayer.engine.exceptions.ScriptImplementationException import com.futo.platformplayer.getOrDefault import com.futo.platformplayer.getOrThrow +import com.futo.platformplayer.invokeV8 +import com.futo.platformplayer.invokeV8Void import com.futo.platformplayer.logging.Logger import com.futo.platformplayer.states.StateDeveloper import kotlinx.serialization.Serializable @@ -55,7 +57,7 @@ class JSRequestExecutor { "[${_config.name}] JSRequestExecutor", "builder.modifyRequest()" ) { - _executor.invoke("executeRequest", url, headers, method, body); + _executor.invokeV8("executeRequest", url, headers, method, body); } as V8Value; } else V8Plugin.catchScriptErrors( @@ -63,7 +65,7 @@ class JSRequestExecutor { "[${_config.name}] JSRequestExecutor", "builder.modifyRequest()" ) { - _executor.invoke("executeRequest", url, headers, method, body); + _executor.invokeV8("executeRequest", url, headers, method, body); } as V8Value; try { @@ -110,7 +112,7 @@ class JSRequestExecutor { "[${_config.name}] JSRequestExecutor", "builder.modifyRequest()" ) { - _executor.invokeVoid("cleanup", null); + _executor.invokeV8("cleanup", null); }; } else V8Plugin.catchScriptErrors( @@ -118,7 +120,7 @@ class JSRequestExecutor { "[${_config.name}] JSRequestExecutor", "builder.modifyRequest()" ) { - _executor.invokeVoid("cleanup", null); + _executor.invokeV8("cleanup", null); }; } } diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestModifier.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestModifier.kt index f7d169af..af03d070 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestModifier.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/JSRequestModifier.kt @@ -11,6 +11,8 @@ import com.futo.platformplayer.engine.exceptions.ScriptImplementationException import com.futo.platformplayer.getOrDefault import com.futo.platformplayer.getOrNull import com.futo.platformplayer.getOrThrow +import com.futo.platformplayer.invokeV8 +import com.futo.platformplayer.invokeV8Void class JSRequestModifier: IRequestModifier { private val _plugin: JSClient; @@ -40,7 +42,7 @@ class JSRequestModifier: IRequestModifier { return _plugin.busy { val result = V8Plugin.catchScriptErrors(_config, "[${_config.name}] JSRequestModifier", "builder.modifyRequest()") { - _modifier.invoke("modifyRequest", url, headers); + _modifier.invokeV8("modifyRequest", url, headers); } as V8ValueObject; val req = JSRequest(_plugin, result, url, headers); diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSAudioUrlWidevineSource.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSAudioUrlWidevineSource.kt index 516e07ff..7df120d5 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSAudioUrlWidevineSource.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSAudioUrlWidevineSource.kt @@ -6,6 +6,8 @@ import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.api.media.platforms.js.models.JSRequestExecutor import com.futo.platformplayer.engine.V8Plugin import com.futo.platformplayer.getOrThrow +import com.futo.platformplayer.invokeV8 +import com.futo.platformplayer.invokeV8Void class JSAudioUrlWidevineSource : JSAudioUrlSource, IAudioUrlWidevineSource { override val licenseUri: String @@ -25,7 +27,7 @@ class JSAudioUrlWidevineSource : JSAudioUrlSource, IAudioUrlWidevineSource { return null val result = V8Plugin.catchScriptErrors(_config, "[${_config.name}] JSAudioUrlWidevineSource", "obj.getLicenseRequestExecutor()") { - _obj.invoke("getLicenseRequestExecutor", arrayOf()) + _obj.invokeV8("getLicenseRequestExecutor", arrayOf()) } if (result !is V8ValueObject) diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestWidevineSource.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestWidevineSource.kt index be72d3a0..7700bd82 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestWidevineSource.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSDashManifestWidevineSource.kt @@ -9,6 +9,8 @@ import com.futo.platformplayer.api.media.platforms.js.models.JSRequestExecutor import com.futo.platformplayer.engine.V8Plugin import com.futo.platformplayer.getOrNull import com.futo.platformplayer.getOrThrow +import com.futo.platformplayer.invokeV8 +import com.futo.platformplayer.invokeV8Void class JSDashManifestWidevineSource : IVideoUrlSource, IDashManifestSource, IDashManifestWidevineSource, JSSource { @@ -45,7 +47,7 @@ class JSDashManifestWidevineSource : IVideoUrlSource, IDashManifestSource, return null val result = V8Plugin.catchScriptErrors(_config, "[${_config.name}] JSDashManifestWidevineSource", "obj.getLicenseRequestExecutor()") { - _obj.invoke("getLicenseRequestExecutor", arrayOf()) + _obj.invokeV8("getLicenseRequestExecutor", arrayOf()) } if (result !is V8ValueObject) diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSSource.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSSource.kt index 22bf2a60..4fe4307f 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSSource.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSSource.kt @@ -16,6 +16,7 @@ import com.futo.platformplayer.engine.IV8PluginConfig import com.futo.platformplayer.engine.V8Plugin import com.futo.platformplayer.ensureIsBusy import com.futo.platformplayer.getOrDefault +import com.futo.platformplayer.invokeV8 import com.futo.platformplayer.logging.Logger import com.futo.platformplayer.orNull import com.futo.platformplayer.views.video.datasources.JSHttpDataSource @@ -64,7 +65,7 @@ abstract class JSSource { return@isBusyWith null; val result = V8Plugin.catchScriptErrors(_config, "[${_config.name}] JSVideoUrlSource", "obj.getRequestModifier()") { - _obj.invoke("getRequestModifier", arrayOf()); + _obj.invokeV8("getRequestModifier", arrayOf()); }; if (result !is V8ValueObject) @@ -78,7 +79,7 @@ abstract class JSSource { Logger.v("JSSource", "Request executor for [${type}] requesting"); val result = V8Plugin.catchScriptErrors(_config, "[${_config.name}] JSSource", "obj.getRequestExecutor()") { - _obj.invoke("getRequestExecutor", arrayOf()); + _obj.invokeV8("getRequestExecutor", arrayOf()); }; Logger.v("JSSource", "Request executor for [${type}] received"); diff --git a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSVideoUrlWidevineSource.kt b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSVideoUrlWidevineSource.kt index bcd6607d..aff22c33 100644 --- a/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSVideoUrlWidevineSource.kt +++ b/app/src/main/java/com/futo/platformplayer/api/media/platforms/js/models/sources/JSVideoUrlWidevineSource.kt @@ -6,6 +6,7 @@ import com.futo.platformplayer.api.media.platforms.js.JSClient import com.futo.platformplayer.api.media.platforms.js.models.JSRequestExecutor import com.futo.platformplayer.engine.V8Plugin import com.futo.platformplayer.getOrThrow +import com.futo.platformplayer.invokeV8 class JSVideoUrlWidevineSource : JSVideoUrlSource, IVideoUrlWidevineSource { override val licenseUri: String @@ -25,7 +26,7 @@ class JSVideoUrlWidevineSource : JSVideoUrlSource, IVideoUrlWidevineSource { return null val result = V8Plugin.catchScriptErrors(_config, "[${_config.name}] JSAudioUrlWidevineSource", "obj.getLicenseRequestExecutor()") { - _obj.invoke("getLicenseRequestExecutor", arrayOf()) + _obj.invokeV8("getLicenseRequestExecutor", arrayOf()) } if (result !is V8ValueObject) diff --git a/app/src/main/java/com/futo/platformplayer/engine/packages/PackageHttp.kt b/app/src/main/java/com/futo/platformplayer/engine/packages/PackageHttp.kt index 82edb023..d7aa89b7 100644 --- a/app/src/main/java/com/futo/platformplayer/engine/packages/PackageHttp.kt +++ b/app/src/main/java/com/futo/platformplayer/engine/packages/PackageHttp.kt @@ -17,6 +17,7 @@ import com.futo.platformplayer.engine.IV8PluginConfig import com.futo.platformplayer.engine.V8Plugin import com.futo.platformplayer.engine.internal.IV8Convertable import com.futo.platformplayer.engine.internal.V8BindObject +import com.futo.platformplayer.invokeV8Void import com.futo.platformplayer.logging.Logger import java.net.SocketTimeoutException import java.util.concurrent.ForkJoinPool @@ -668,7 +669,7 @@ class PackageHttp: V8Package { if(hasOpen && _listeners?.isClosed != true) { try { _package._plugin.busy { - _listeners?.invokeVoid("open", arrayOf()); + _listeners?.invokeV8Void("open", arrayOf()); } } catch(ex: Throwable){ @@ -680,7 +681,7 @@ class PackageHttp: V8Package { if(hasMessage && _listeners?.isClosed != true) { try { _package._plugin.busy { - _listeners?.invokeVoid("message", msg); + _listeners?.invokeV8Void("message", msg); } } catch(ex: Throwable) {} @@ -691,7 +692,7 @@ class PackageHttp: V8Package { { try { _package._plugin.busy { - _listeners?.invokeVoid("closing", code, reason); + _listeners?.invokeV8Void("closing", code, reason); } } catch(ex: Throwable){ @@ -704,7 +705,7 @@ class PackageHttp: V8Package { if(hasClosed && _listeners?.isClosed != true) { try { _package._plugin.busy { - _listeners?.invokeVoid("closed", code, reason); + _listeners?.invokeV8Void("closed", code, reason); } } catch(ex: Throwable){ @@ -722,7 +723,7 @@ class PackageHttp: V8Package { if(hasFailure && _listeners?.isClosed != true) { try { _package._plugin.busy { - _listeners?.invokeVoid("failure", exception.message); + _listeners?.invokeV8Void("failure", exception.message); } } catch(ex: Throwable){