mirror of
https://gitlab.futo.org/videostreaming/grayjay.git
synced 2026-05-16 04:52:39 +02:00
Improved WaitTillLoaded.
This commit is contained in:
@@ -2,6 +2,7 @@ package com.futo.platformplayer.engine.packages
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.graphics.Bitmap
|
||||
import android.net.Uri
|
||||
import android.os.Looper
|
||||
import android.util.Log
|
||||
import android.webkit.ConsoleMessage
|
||||
@@ -41,6 +42,7 @@ import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import java.io.ByteArrayInputStream
|
||||
import java.nio.charset.Charset
|
||||
import androidx.core.net.toUri
|
||||
|
||||
class PackageBrowser: V8Package {
|
||||
val useAddDocumentStartJavaScript = true
|
||||
@@ -48,6 +50,9 @@ class PackageBrowser: V8Package {
|
||||
override val name: String get() = "Browser";
|
||||
override val variableName: String = "browser";
|
||||
|
||||
@Volatile private var _loadToken: String? = null
|
||||
@Volatile private var _expectedMainUrl: String? = null
|
||||
|
||||
private val _json = Json { };
|
||||
|
||||
@Transient
|
||||
@@ -157,9 +162,14 @@ class PackageBrowser: V8Package {
|
||||
|
||||
override fun onPageCommitVisible(view: WebView?, url: String?) {
|
||||
super.onPageCommitVisible(view, url)
|
||||
_readySemaphore?.release();
|
||||
_readySemaphore = null;
|
||||
Logger.i("PackageBrowser", "Browser loaded");
|
||||
Logger.i("PackageBrowser", "Browser loaded (commit visible): $url")
|
||||
releaseReadyIfCurrent(url)
|
||||
}
|
||||
|
||||
override fun onPageFinished(view: WebView?, url: String?) {
|
||||
super.onPageFinished(view, url)
|
||||
Logger.i("PackageBrowser", "Browser loaded (finished): $url")
|
||||
releaseReadyIfCurrent(url)
|
||||
}
|
||||
|
||||
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
|
||||
@@ -275,14 +285,28 @@ class PackageBrowser: V8Package {
|
||||
|
||||
@V8Function
|
||||
fun load(url: String) {
|
||||
Logger.i("PackageBrowser", "Browser loading url [${url}]");
|
||||
_readySemaphore = Semaphore(1, 1);
|
||||
Logger.i("PackageBrowser", "Browser loading url [$url]")
|
||||
val token = UUID.randomUUID().toString()
|
||||
_loadToken = token
|
||||
_expectedMainUrl = url
|
||||
_readySemaphore = Semaphore(1, acquiredPermits = 1)
|
||||
|
||||
StateApp.instance.scope.launch(Dispatchers.Main) {
|
||||
try { browser.loadUrl(url) }
|
||||
catch (t: Throwable) { Logger.e("PackageBrowser", "loadUrl failed", t) }
|
||||
}
|
||||
}
|
||||
|
||||
private fun releaseReadyIfCurrent(url: String?) {
|
||||
if (url == null) return
|
||||
val expected = _expectedMainUrl
|
||||
if (url.toUri().host != expected?.toUri()?.host) return
|
||||
|
||||
_readySemaphore?.release()
|
||||
_readySemaphore = null
|
||||
_expectedMainUrl = null
|
||||
}
|
||||
|
||||
@V8Function
|
||||
fun run(js: String, callbackId: String? = null, callback: V8ValueFunction? = null) {
|
||||
waitTillLoaded();
|
||||
|
||||
Submodule app/src/stable/assets/sources/youtube updated: aa9c6ecb00...19123f4c12
Submodule app/src/unstable/assets/sources/youtube updated: aa9c6ecb00...19123f4c12
Reference in New Issue
Block a user