aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/client.js48
-rw-r--r--src/client/JsApi.hx46
-rw-r--r--src/client/Main.hx1
-rw-r--r--src/client/Player.hx14
4 files changed, 93 insertions, 16 deletions
diff --git a/res/client.js b/res/client.js
index ab6760b..0525b15 100644
--- a/res/client.js
+++ b/res/client.js
@@ -814,10 +814,20 @@ client_InputWithHistory.prototype = {
};
var client_JsApi = function() { };
client_JsApi.__name__ = true;
-client_JsApi.addPlugin = $hx_exports["client"]["JsApi"]["addPlugin"] = function(id,onLoaded) {
+client_JsApi.init = function(main,player) {
+ client_JsApi.main = main;
+ client_JsApi.player = player;
client_JsApi.initPluginsSpace();
+};
+client_JsApi.initPluginsSpace = function() {
+ var w = window;
+ if(w.synctube == null) {
+ w.synctube = { };
+ }
+};
+client_JsApi.addPlugin = $hx_exports["client"]["JsApi"]["addPlugin"] = function(id,onLoaded) {
client_JsApi.addScriptToHead("/plugins/" + id + "/index.js",function() {
- var obj = { api : client_JsApi, id : id, path : "/plugins/" + id};
+ var obj = { api : client.JsApi, id : id, path : "/plugins/" + id};
if(window.synctube[id] == null) {
window.console.error("Plugin \"" + id + "\" not found");
} else {
@@ -828,12 +838,6 @@ client_JsApi.addPlugin = $hx_exports["client"]["JsApi"]["addPlugin"] = function(
}
});
};
-client_JsApi.initPluginsSpace = function() {
- var w = window;
- if(w.synctube == null) {
- w.synctube = { };
- }
-};
client_JsApi.addScriptToHead = $hx_exports["client"]["JsApi"]["addScriptToHead"] = function(url,onLoaded) {
var script = window.document.createElement("script");
script.type = "text/javascript";
@@ -849,6 +853,21 @@ client_JsApi.hasScriptInHead = $hx_exports["client"]["JsApi"]["hasScriptInHead"]
}
return false;
};
+client_JsApi.getTime = $hx_exports["client"]["JsApi"]["getTime"] = function() {
+ return client_JsApi.player.getTime();
+};
+client_JsApi.setTime = $hx_exports["client"]["JsApi"]["setTime"] = function(time) {
+ client_JsApi.player.setTime(time);
+};
+client_JsApi.isLeader = $hx_exports["client"]["JsApi"]["isLeader"] = function() {
+ return (client_JsApi.main.personal.group & 2) != 0;
+};
+client_JsApi.forceSyncNextTick = $hx_exports["client"]["JsApi"]["forceSyncNextTick"] = function(flag) {
+ client_JsApi.main.forceSyncNextTick = flag;
+};
+client_JsApi.setVideoSrc = $hx_exports["client"]["JsApi"]["setVideoSrc"] = function(src) {
+ client_JsApi.player.changeVideoSrc(src);
+};
client_JsApi.notifyOnVideoChange = $hx_exports["client"]["JsApi"]["notifyOnVideoChange"] = function(func) {
client_JsApi.videoChange.push(func);
};
@@ -914,6 +933,7 @@ var client_Main = function(host,port) {
client_Buttons.initHotkeys(_gthis,_gthis.player);
_gthis.openWebSocket(host,port);
});
+ client_JsApi.init(this,this.player);
};
client_Main.__name__ = true;
client_Main.main = function() {
@@ -1147,7 +1167,7 @@ client_Main.prototype = {
var data = JSON.parse(e.data);
if(this.config != null && this.config.isVerbose) {
var t = data.type;
- haxe_Log.trace("Event: " + data.type,{ fileName : "src/client/Main.hx", lineNumber : 325, className : "client.Main", methodName : "onMessage", customParams : [Reflect.field(data,t.charAt(0).toLowerCase() + HxOverrides.substr(t,1,null))]});
+ haxe_Log.trace("Event: " + data.type,{ fileName : "src/client/Main.hx", lineNumber : 326, className : "client.Main", methodName : "onMessage", customParams : [Reflect.field(data,t.charAt(0).toLowerCase() + HxOverrides.substr(t,1,null))]});
}
switch(data.type) {
case "AddVideo":
@@ -1762,6 +1782,16 @@ client_Player.prototype = {
client_JsApi.fireVideoChangeEvents(item);
window.document.querySelector("#currenttitle").textContent = item.title;
}
+ ,changeVideoSrc: function(src) {
+ if(this.player == null) {
+ return;
+ }
+ var item = this.items[this.itemPos];
+ if(item == null) {
+ return;
+ }
+ this.player.loadVideo({ url : src, title : item.title, author : item.author, duration : item.duration, isTemp : item.isTemp, isIframe : item.isIframe});
+ }
,removeVideo: function() {
client_JsApi.fireVideoRemoveEvents(this.items[this.itemPos]);
this.player.removeVideo();
diff --git a/src/client/JsApi.hx b/src/client/JsApi.hx
index 071dbee..7528f42 100644
--- a/src/client/JsApi.hx
+++ b/src/client/JsApi.hx
@@ -9,15 +9,27 @@ private typedef VideoChangeFunc = (item:VideoItem)->Void;
class JsApi {
+ static var main:Main;
+ static var player:Player;
static final videoChange:Array<VideoChangeFunc> = [];
static final videoRemove:Array<VideoChangeFunc> = [];
+ public static function init(main:Main, player:Player):Void {
+ JsApi.main = main;
+ JsApi.player = player;
+ initPluginsSpace();
+ }
+
+ static function initPluginsSpace():Void {
+ final w:Dynamic = window;
+ if (w.synctube == null) w.synctube = {};
+ }
+
@:expose
static function addPlugin(id:String, ?onLoaded:()->Void):Void {
- initPluginsSpace();
addScriptToHead('/plugins/$id/index.js', () -> {
final obj = {
- api: JsApi,
+ api: Syntax.plainCode("client.JsApi"),
id: id,
path: '/plugins/$id'
}
@@ -30,11 +42,6 @@ class JsApi {
});
}
- static function initPluginsSpace():Void {
- final w:Dynamic = window;
- if (w.synctube == null) w.synctube = {};
- }
-
@:expose
public static function addScriptToHead(url:String, ?onLoaded:()->Void):Void {
var script = document.createScriptElement();
@@ -53,6 +60,31 @@ class JsApi {
}
@:expose
+ static function getTime():Float {
+ return player.getTime();
+ }
+
+ @:expose
+ static function setTime(time:Float):Void {
+ player.setTime(time);
+ }
+
+ @:expose
+ static function isLeader():Bool {
+ return main.isLeader();
+ }
+
+ @:expose
+ static function forceSyncNextTick(flag:Bool):Void {
+ main.forceSyncNextTick = flag;
+ }
+
+ @:expose
+ static function setVideoSrc(src:String):Void {
+ player.changeVideoSrc(src);
+ }
+
+ @:expose
static function notifyOnVideoChange(func:VideoChangeFunc):Void {
videoChange.push(func);
}
diff --git a/src/client/Main.hx b/src/client/Main.hx
index 02d04ac..781f5e8 100644
--- a/src/client/Main.hx
+++ b/src/client/Main.hx
@@ -80,6 +80,7 @@ class Main {
Buttons.initHotkeys(this, player);
openWebSocket(host, port);
});
+ JsApi.init(this, player);
}
function settingsPatcher(data:Any, version:Int):Any {
diff --git a/src/client/Player.hx b/src/client/Player.hx
index 7572673..4de76ce 100644
--- a/src/client/Player.hx
+++ b/src/client/Player.hx
@@ -128,6 +128,20 @@ class Player {
ge("#currenttitle").textContent = item.title;
}
+ public function changeVideoSrc(src:String):Void {
+ if (player == null) return;
+ final item = items[itemPos];
+ if (item == null) return;
+ player.loadVideo({
+ url: src,
+ title: item.title,
+ author: item.author,
+ duration: item.duration,
+ isTemp: item.isTemp,
+ isIframe: item.isIframe
+ });
+ }
+
public function removeVideo():Void {
JsApi.fireVideoRemoveEvents(items[itemPos]);
player.removeVideo();
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage