diff options
| author | RblSb <msrblsb@gmail.com> | 2020-06-05 16:39:39 +0300 |
|---|---|---|
| committer | RblSb <msrblsb@gmail.com> | 2020-06-05 16:39:39 +0300 |
| commit | 8506b4edcb0a9bb1973bb38fcca4bcdc21e397c1 (patch) | |
| tree | cbdc7d1d04807df61f15c6ef53b06b3616676f49 | |
| parent | 2c22d551877e262740f524da6e2704bec19b46e7 (diff) | |
More api methods
| -rw-r--r-- | res/client.js | 48 | ||||
| -rw-r--r-- | src/client/JsApi.hx | 46 | ||||
| -rw-r--r-- | src/client/Main.hx | 1 | ||||
| -rw-r--r-- | src/client/Player.hx | 14 |
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(); |
