Merge branch 'master' of gitlab.futo.org:videostreaming/grayjay

This commit is contained in:
Koen J 2025-06-18 15:43:45 +02:00
commit 100e98a960
12 changed files with 59 additions and 18 deletions

View file

@ -179,8 +179,8 @@ dependencies {
implementation 'com.google.code.gson:gson:2.10.1' //Used for complex/anonymous cases like during development conversions (eg. V8RemoteObject) implementation 'com.google.code.gson:gson:2.10.1' //Used for complex/anonymous cases like during development conversions (eg. V8RemoteObject)
//JS //JS
//implementation("com.caoccao.javet:javet-android:3.0.2") implementation("com.caoccao.javet:javet-android:3.0.2")
implementation 'com.caoccao.javet:javet-v8-android:4.1.4' //implementation 'com.caoccao.javet:javet-v8-android:4.1.4' //Change after extensive testing the freezing edge cases are solved.
//Exoplayer //Exoplayer
implementation 'androidx.media3:media3-exoplayer:1.2.1' implementation 'androidx.media3:media3-exoplayer:1.2.1'

View file

@ -98,16 +98,14 @@ inline fun <reified T> V8ValueArray.expectV8Variants(config: IV8PluginConfig, co
inline fun V8Plugin.ensureIsBusy() { inline fun V8Plugin.ensureIsBusy() {
this.let { this.let {
if (!it.isThreadAlreadyBusy()) { if (!it.isThreadAlreadyBusy()) {
throw IllegalStateException("Tried to access V8Plugin without busy"); //throw IllegalStateException("Tried to access V8Plugin without busy");
/*
val stacktrace = Thread.currentThread().stackTrace; val stacktrace = Thread.currentThread().stackTrace;
Logger.w("Extensions_V8", Logger.w("Extensions_V8",
"V8 USE OUTSIDE BUSY: " + stacktrace.drop(3)?.firstOrNull().toString() + "V8 USE OUTSIDE BUSY: " + stacktrace.drop(3)?.firstOrNull().toString() +
", " + stacktrace.drop(4)?.firstOrNull().toString() + ", " + stacktrace.drop(4)?.firstOrNull().toString() +
", " + stacktrace.drop(5)?.firstOrNull()?.toString() + ", " + stacktrace.drop(5)?.firstOrNull()?.toString() +
", " + stacktrace.drop(6)?.firstOrNull()?.toString() ", " + stacktrace.drop(6)?.firstOrNull()?.toString()
) );
*/
} }
} }
} }
@ -118,7 +116,7 @@ inline fun V8Value.ensureIsBusy() {
} }
inline fun <reified T> V8Value.expectV8Variant(config: IV8PluginConfig, contextName: String): T { inline fun <reified T> V8Value.expectV8Variant(config: IV8PluginConfig, contextName: String): T {
if(true) if(false)
ensureIsBusy(); ensureIsBusy();
return when(T::class) { return when(T::class) {
String::class -> this.expectOrThrow<V8ValueString>(config, contextName).value as T; String::class -> this.expectOrThrow<V8ValueString>(config, contextName).value as T;

View file

@ -4,7 +4,6 @@ import android.content.Context
import com.caoccao.javet.exceptions.JavetCompilationException import com.caoccao.javet.exceptions.JavetCompilationException
import com.caoccao.javet.exceptions.JavetException import com.caoccao.javet.exceptions.JavetException
import com.caoccao.javet.exceptions.JavetExecutionException import com.caoccao.javet.exceptions.JavetExecutionException
import com.caoccao.javet.interfaces.IJavetEntityError
import com.caoccao.javet.interop.V8Host import com.caoccao.javet.interop.V8Host
import com.caoccao.javet.interop.V8Runtime import com.caoccao.javet.interop.V8Runtime
import com.caoccao.javet.values.V8Value import com.caoccao.javet.values.V8Value
@ -321,6 +320,37 @@ class V8Plugin {
throw ScriptCompilationException(config, "Compilation: [${context}]: ${scriptEx.message}\n(${scriptEx.scriptingError.lineNumber})[${scriptEx.scriptingError.startColumn}-${scriptEx.scriptingError.endColumn}]: ${scriptEx.scriptingError.sourceLine}", null, codeStripped); throw ScriptCompilationException(config, "Compilation: [${context}]: ${scriptEx.message}\n(${scriptEx.scriptingError.lineNumber})[${scriptEx.scriptingError.startColumn}-${scriptEx.scriptingError.endColumn}]: ${scriptEx.scriptingError.sourceLine}", null, codeStripped);
} }
catch(executeEx: JavetExecutionException) { catch(executeEx: JavetExecutionException) {
val obj = executeEx.scriptingError?.context
if(obj != null && obj.containsKey("plugin_type") == true) {
val pluginType = obj["plugin_type"].toString();
//Captcha
if (pluginType == "CaptchaRequiredException") {
throw ScriptCaptchaRequiredException(config,
obj["url"]?.toString(),
obj["body"]?.toString(),
executeEx, executeEx.scriptingError?.stack, codeStripped);
}
//Reload Required
if (pluginType == "ReloadRequiredException") {
throw ScriptReloadRequiredException(config,
obj["msg"]?.toString(),
obj["reloadData"]?.toString(),
executeEx, executeEx.scriptingError?.stack, codeStripped);
}
//Others
throwExceptionFromV8(
config,
pluginType,
(extractJSExceptionMessage(executeEx) ?: ""),
executeEx,
executeEx.scriptingError?.stack,
codeStripped
);
}
/* //Required for newer V8 versions
if(executeEx.scriptingError?.context is IJavetEntityError) { if(executeEx.scriptingError?.context is IJavetEntityError) {
val obj = executeEx.scriptingError?.context as IJavetEntityError val obj = executeEx.scriptingError?.context as IJavetEntityError
if(obj.context.containsKey("plugin_type") == true) { if(obj.context.containsKey("plugin_type") == true) {
@ -354,6 +384,7 @@ class V8Plugin {
} }
} }
*/
throw ScriptExecutionException(config, extractJSExceptionMessage(executeEx) ?: "", null, executeEx.scriptingError?.stack, codeStripped); throw ScriptExecutionException(config, extractJSExceptionMessage(executeEx) ?: "", null, executeEx.scriptingError?.stack, codeStripped);
} }
catch(ex: Exception) { catch(ex: Exception) {

View file

@ -958,7 +958,7 @@ class StatePlatform {
//Comments //Comments
fun getComments(content: IPlatformContentDetails): IPager<IPlatformComment> { fun getComments(content: IPlatformContentDetails): IPager<IPlatformComment> {
val client = getContentClient(content.url); val client = getContentClient(content.url);
val pager = null;//content.getComments(client); val pager = content.getComments(client);
return pager ?: getComments(content.url); return pager ?: getComments(content.url);
} }

View file

@ -95,7 +95,13 @@ class VideoListEditorViewHolder : ViewHolder {
.into(_imageThumbnail); .into(_imageThumbnail);
_textName.text = v.name; _textName.text = v.name;
_textAuthor.text = v.author.name; _textAuthor.text = v.author.name;
_textVideoDuration.text = v.duration.toHumanTime(false);
if(v.duration > 0) {
_textVideoDuration.text = v.duration.toHumanTime(false);
_textVideoDuration.visibility = View.VISIBLE;
}
else
_textVideoDuration.visibility = View.GONE;
val historyPosition = StateHistory.instance.getHistoryPosition(v.url) val historyPosition = StateHistory.instance.getHistoryPosition(v.url)
_timeBar.progress = historyPosition.toFloat() / v.duration.toFloat(); _timeBar.progress = historyPosition.toFloat() / v.duration.toFloat();

View file

@ -204,8 +204,14 @@ open class PreviewVideoView : LinearLayout {
.into(_imageVideo); .into(_imageVideo);
}; };
if(!isPlanned) if(!isPlanned) {
_textVideoDuration.text = video.duration.toHumanTime(false); if(video.duration > 0) {
_textVideoDuration.text = video.duration.toHumanTime(false);
_textVideoDuration.visibility = View.VISIBLE;
}
else
_textVideoDuration.visibility = View.GONE;
}
else else
_textVideoDuration.text = context.getString(R.string.planned); _textVideoDuration.text = context.getString(R.string.planned);

@ -1 +1 @@
Subproject commit ffdf4cda380e5e4e9e370412f014e704bd14c09e Subproject commit b7173f1538a8259ace0c606dfc3441426a659536

@ -1 +1 @@
Subproject commit d98c7f8aee36101d60a0c671d16a0800d5d715d0 Subproject commit b811f8bdfbbff73cf0d7581c9d7596911cb132b6

@ -1 +1 @@
Subproject commit 54564312683a0ae06d7085405478f96cade325e3 Subproject commit 048acef152823d2621da177d3b4e1535cf4ca8ac

@ -1 +1 @@
Subproject commit 0167dfb471e6f90ab08e997ac7151072576c42db Subproject commit 568d560520d6eff77d710aeac66057c76aedd9c0

@ -1 +1 @@
Subproject commit ffdf4cda380e5e4e9e370412f014e704bd14c09e Subproject commit b7173f1538a8259ace0c606dfc3441426a659536

@ -1 +1 @@
Subproject commit 0167dfb471e6f90ab08e997ac7151072576c42db Subproject commit 568d560520d6eff77d710aeac66057c76aedd9c0