From 8506b4edcb0a9bb1973bb38fcca4bcdc21e397c1 Mon Sep 17 00:00:00 2001 From: RblSb Date: Fri, 5 Jun 2020 16:39:39 +0300 Subject: More api methods --- src/client/JsApi.hx | 46 +++++++++++++++++++++++++++++++++++++++------- src/client/Main.hx | 1 + src/client/Player.hx | 14 ++++++++++++++ 3 files changed, 54 insertions(+), 7 deletions(-) (limited to 'src/client') 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 = []; static final videoRemove:Array = []; + 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(); @@ -52,6 +59,31 @@ class JsApi { return false; } + @: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(); -- cgit v1.2.3