From 7ee893a287c8992196b0b5f51124074fa7c47f4f Mon Sep 17 00:00:00 2001 From: RblSb Date: Fri, 2 Aug 2024 06:25:45 +0300 Subject: Streamable support closes #49 --- res/client.js | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 66 insertions(+), 9 deletions(-) (limited to 'res/client.js') diff --git a/res/client.js b/res/client.js index 35ed305..80f7597 100644 --- a/res/client.js +++ b/res/client.js @@ -1,4 +1,4 @@ -// Generated by Haxe 4.3.4 +// Generated by Haxe 4.3.5 (function ($hx_exports, $global) { "use strict"; $hx_exports["client"] = $hx_exports["client"] || {}; $hx_exports["client"]["JsApi"] = $hx_exports["client"]["JsApi"] || {}; @@ -1593,7 +1593,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 : 405, 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 : 404, className : "client.Main", methodName : "onMessage", customParams : [Reflect.field(data,t.charAt(0).toLowerCase() + HxOverrides.substr(t,1,null))]}); } client_JsApi.fireOnceEvent(data); switch(data.type) { @@ -2342,7 +2342,7 @@ var client_Player = function(main) { this.videoList = new VideoList(); this.main = main; this.youtube = new client_players_Youtube(main,this); - this.players = [this.youtube]; + this.players = [this.youtube,new client_players_Streamable(main,this)]; this.iframePlayer = new client_players_Iframe(main,this); this.rawPlayer = new client_players_Raw(main,this); this.initItemButtons(); @@ -2829,7 +2829,7 @@ client_Player.prototype = { } }; http.onError = function(msg) { - haxe_Log.trace(msg,{ fileName : "src/client/Player.hx", lineNumber : 485, className : "client.Player", methodName : "skipAd"}); + haxe_Log.trace(msg,{ fileName : "src/client/Player.hx", lineNumber : 484, className : "client.Player", methodName : "skipAd"}); }; http.request(); } @@ -3496,7 +3496,7 @@ client_players_RawSubs.convertAssTime = function(time) { client_players_RawSubs.isProxyError = function(text) { if(StringTools.startsWith(text,"Proxy error:")) { client_Main.serverMessage("Failed to add subs: proxy error"); - haxe_Log.trace("Failed to add subs: " + text,{ fileName : "src/client/players/RawSubs.hx", lineNumber : 221, className : "client.players.RawSubs", methodName : "isProxyError"}); + haxe_Log.trace("Failed to add subs: " + text,{ fileName : "src/client/players/RawSubs.hx", lineNumber : 219, className : "client.players.RawSubs", methodName : "isProxyError"}); return true; } return false; @@ -3511,6 +3511,63 @@ client_players_RawSubs.onParsed = function(video,name,dataUrl) { var track = trackEl.track; track.mode = "showing"; }; +var client_players_Streamable = function(main,player) { + this.matchBadStreamableId = new EReg("[^0-9A-z-_]","g"); + this.matchStreamable = new EReg("streamable\\.com/(.+)","g"); + client_players_Raw.call(this,main,player); +}; +client_players_Streamable.__name__ = true; +client_players_Streamable.__super__ = client_players_Raw; +client_players_Streamable.prototype = $extend(client_players_Raw.prototype,{ + isSupportedLink: function(url) { + if(!this.matchStreamable.match(url)) { + return false; + } + var id = this.matchStreamable.matched(1); + if(this.matchBadStreamableId.match(id)) { + return false; + } + return true; + } + ,getVideoData: function(data,callback) { + var _gthis = this; + this.getStreamableVideoData(data.url,function(info) { + if(info == null) { + callback({ duration : 0}); + return; + } + _gthis.getRawVideoData({ url : info.url, atEnd : data.atEnd},function(data) { + data.url = info.url; + data.title = info.title; + callback(data); + }); + }); + } + ,getRawVideoData: function(data,callback) { + client_players_Raw.prototype.getVideoData.call(this,data,callback); + } + ,getStreamableVideoData: function(url,callback) { + if(!this.matchStreamable.match(url)) { + callback(null); + return; + } + var http = new haxe_http_HttpJs("https://api.streamable.com/videos/" + this.matchStreamable.matched(1)); + http.onData = function(text) { + try { + var json = JSON.parse(text); + var files = json != null ? json.files : null; + var item = files["mp4"]; + if(item == null) { + item = files[Reflect.fields(files)[0]]; + } + callback({ url : item.url, title : json.title}); + } catch( _g ) { + callback(null); + } + }; + http.request(); + } +}); var client_players_Youtube = function(main,player) { this.matchSeconds = new EReg("([0-9]+)S",""); this.matchMinutes = new EReg("([0-9]+)M",""); @@ -3663,7 +3720,7 @@ client_players_Youtube.prototype = { } callback({ duration : _gthis.tempYoutube.getDuration()}); }, onError : function(e) { - haxe_Log.trace("Error " + e.data,{ fileName : "src/client/players/Youtube.hx", lineNumber : 188, className : "client.players.Youtube", methodName : "getRemoteDataFallback"}); + haxe_Log.trace("Error " + e.data,{ fileName : "src/client/players/Youtube.hx", lineNumber : 186, className : "client.players.Youtube", methodName : "getRemoteDataFallback"}); if(_gthis.playerEl.contains(video)) { _gthis.playerEl.removeChild(video); } @@ -3711,7 +3768,7 @@ client_players_Youtube.prototype = { }, onPlaybackRateChange : function(e) { _gthis.player.onRateChange(); }, onError : function(e) { - haxe_Log.trace("Error " + e.data,{ fileName : "src/client/players/Youtube.hx", lineNumber : 245, className : "client.players.Youtube", methodName : "loadVideo"}); + haxe_Log.trace("Error " + e.data,{ fileName : "src/client/players/Youtube.hx", lineNumber : 243, className : "client.players.Youtube", methodName : "loadVideo"}); var tmp = _gthis.player.getCurrentItem(); if(tmp == null) { return; @@ -3725,8 +3782,8 @@ client_players_Youtube.prototype = { var info = event.getYoutubeVideoInfo.response; var tmp = _gthis.getBestStreamFormat(info); if(tmp == null) { - haxe_Log.trace("format not found in response info:",{ fileName : "src/client/players/Youtube.hx", lineNumber : 258, className : "client.players.Youtube", methodName : "rawSourceFallback"}); - haxe_Log.trace(info,{ fileName : "src/client/players/Youtube.hx", lineNumber : 259, className : "client.players.Youtube", methodName : "rawSourceFallback"}); + haxe_Log.trace("format not found in response info:",{ fileName : "src/client/players/Youtube.hx", lineNumber : 256, className : "client.players.Youtube", methodName : "rawSourceFallback"}); + haxe_Log.trace(info,{ fileName : "src/client/players/Youtube.hx", lineNumber : 257, className : "client.players.Youtube", methodName : "rawSourceFallback"}); return; } _gthis.player.changeVideoSrc(tmp.url); -- cgit v1.2.3