aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRblSb <msrblsb@gmail.com>2021-06-06 21:50:14 +0300
committerRblSb <msrblsb@gmail.com>2021-06-06 21:50:14 +0300
commit265b3e1fb56bb0e5f797b3b35227a616b108a0c3 (patch)
treead3fbf3bfddeca1c51813f6667f0181a69dfe4fe /src
parent13127249ddd1f61f8ed6b75803b0de1f4d25f96e (diff)
More JsApi methods
getVideoItems/addVideoItem/removeVideoItem closes #24
Diffstat (limited to 'src')
-rw-r--r--src/client/JsApi.hx32
-rw-r--r--src/client/Main.hx12
-rw-r--r--src/client/Player.hx6
3 files changed, 43 insertions, 7 deletions
diff --git a/src/client/JsApi.hx b/src/client/JsApi.hx
index b97c0f0..a236570 100644
--- a/src/client/JsApi.hx
+++ b/src/client/JsApi.hx
@@ -66,6 +66,24 @@ class JsApi {
}
@:expose
+ static function getVideoItems():VideoList {
+ final items = player.getItems();
+ return [
+ for (item in items) Reflect.copy(item)
+ ];
+ }
+
+ @:expose
+ static function addVideoItem(url:String, atEnd:Bool, isTemp:Bool, ?callback:() -> Void):Void {
+ main.addVideo(url, atEnd, isTemp, callback);
+ }
+
+ @:expose
+ static function removeVideoItem(url:String):Void {
+ main.removeVideoItem(url);
+ }
+
+ @:expose
static function getTime():Float {
return player.getTime();
}
@@ -102,6 +120,13 @@ class JsApi {
return main.globalIp;
}
+ /**
+ * If plugin adds any subtitle format (like `ass`),
+ * you will see subtitle input below video url input on client page.
+ * Plugins can listen to `notifyOnVideoChange(item => {...}`
+ * for raw videos and load that input data from `item.subs` url to do something.
+ * See `https://github.com/RblSb/SyncTube-octosubs` as example.
+ */
@:expose
static function addSubtitleSupport(format:String):Void {
format = format.trim().toLowerCase();
@@ -115,6 +140,13 @@ class JsApi {
return subtitleFormats.contains(format);
}
+ /**
+ * Listen to server event once before that event is parsed by client.
+ * Example:
+ * `JsApi.once("RemoveVideo", event => {`
+ * ` if (event.removeVideo.url == url) {...}`
+ * `});`
+ */
@:expose
public static function once(type:WsEventType, func:OnceEventFunc):Void {
onceListeners.push({type: type, func: func});
diff --git a/src/client/Main.hx b/src/client/Main.hx
index b9c9892..1d9ac34 100644
--- a/src/client/Main.hx
+++ b/src/client/Main.hx
@@ -242,7 +242,7 @@ class Main {
addVideo(link, atEnd, isTemp, () -> addVideoArray(links, atEnd, isTemp));
}
- function addVideo(url:String, atEnd:Bool, isTemp:Bool, callback:()->Void):Void {
+ public function addVideo(url:String, atEnd:Bool, isTemp:Bool, ?callback:()->Void):Void {
final protocol = Browser.location.protocol;
if (url.startsWith("/")) {
final host = Browser.location.hostname;
@@ -275,7 +275,7 @@ class Main {
},
atEnd: atEnd
}});
- callback();
+ if (callback != null) callback();
});
}
@@ -316,6 +316,14 @@ class Main {
});
}
+ public function removeVideoItem(url:String) {
+ send({
+ type: RemoveVideo, removeVideo: {
+ url: url
+ }
+ });
+ }
+
public function toggleVideoElement():Bool {
if (player.hasVideo()) player.removeVideo();
else if (!player.isListEmpty()) {
diff --git a/src/client/Player.hx b/src/client/Player.hx
index 735f73c..c9b379c 100644
--- a/src/client/Player.hx
+++ b/src/client/Player.hx
@@ -64,11 +64,7 @@ class Player {
});
}
if (btn.classList.contains("qbtn-delete")) {
- main.send({
- type: RemoveVideo, removeVideo: {
- url: item.querySelector(".qe_title").getAttribute("href")
- }
- });
+ main.removeVideoItem(item.querySelector(".qe_title").getAttribute("href"));
}
}
}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage