diff options
| author | RblSb <msrblsb@gmail.com> | 2021-09-27 20:48:29 +0300 |
|---|---|---|
| committer | RblSb <msrblsb@gmail.com> | 2021-09-27 20:49:05 +0300 |
| commit | 98c1f6fa4ec7537ec979a1ae8d68cb6ec11c3fbf (patch) | |
| tree | cf16a26097b00226c8f9fedbb9c1a5ecfb2211a3 /res | |
| parent | 1dc2722d509e578b243bfda1a675dcfdb6003941 (diff) | |
Rework videolist structure
Diffstat (limited to 'res')
| -rw-r--r-- | res/client.js | 229 |
1 files changed, 132 insertions, 97 deletions
diff --git a/res/client.js b/res/client.js index 9abfe25..8e36477 100644 --- a/res/client.js +++ b/res/client.js @@ -438,61 +438,68 @@ StringTools.hex = function(n,digits) { } return s; }; -var VideoList = {}; -VideoList._new = function() { - return []; +var VideoList = function() { + this.items = []; + this.pos = 0; }; -VideoList.findIndex = function(this1,f) { - var i = 0; - var _g = 0; - while(_g < this1.length) { - if(f(this1[_g++])) { - return i; +VideoList.__name__ = true; +VideoList.prototype = { + setPos: function(i) { + if(i < 0 || i > this.items.length - 1) { + i = 0; } - ++i; + this.pos = i; } - return -1; -}; -VideoList.addItem = function(this1,item,atEnd,itemPos) { - if(atEnd) { - this1.push(item); - } else { - this1.splice(itemPos + 1,0,item); + ,findIndex: function(f) { + var i = 0; + var _g = 0; + var _g1 = this.items; + while(_g < _g1.length) { + if(f(_g1[_g++])) { + return i; + } + ++i; + } + return -1; } -}; -VideoList.setNextItem = function(this1,pos,itemPos) { - var next = this1[pos]; - HxOverrides.remove(this1,next); - if(pos < itemPos) { - --itemPos; + ,addItem: function(item,atEnd) { + if(atEnd) { + this.items.push(item); + } else { + this.items.splice(this.pos + 1,0,item); + } } - this1.splice(itemPos + 1,0,next); - return itemPos; -}; -VideoList.toggleItemType = function(this1,pos) { - this1[pos].isTemp = !this1[pos].isTemp; -}; -VideoList.removeItem = function(this1,index,itemPos) { - if(index < itemPos) { - --itemPos; + ,setNextItem: function(nextPos) { + var next = this.items[nextPos]; + HxOverrides.remove(this.items,next); + if(nextPos < this.pos) { + this.pos--; + } + this.items.splice(this.pos + 1,0,next); } - HxOverrides.remove(this1,this1[index]); - if(itemPos >= this1.length) { - itemPos = 0; + ,toggleItemType: function(pos) { + this.items[pos].isTemp = !this.items[pos].isTemp; } - return itemPos; -}; -VideoList.skipItem = function(this1,itemPos) { - var item = this1[itemPos]; - if(!item.isTemp) { - ++itemPos; - } else { - HxOverrides.remove(this1,item); + ,removeItem: function(index) { + if(index < this.pos) { + this.pos--; + } + HxOverrides.remove(this.items,this.items[index]); + if(this.pos >= this.items.length) { + this.pos = 0; + } } - if(itemPos >= this1.length) { - itemPos = 0; + ,skipItem: function() { + var item = this.items[this.pos]; + if(!item.isTemp) { + this.pos++; + } else { + HxOverrides.remove(this.items,item); + } + if(this.pos >= this.items.length) { + this.pos = 0; + } } - return itemPos; }; var client_Buttons = function() { }; client_Buttons.__name__ = true; @@ -1028,10 +1035,10 @@ client_JsApi.hasScriptInHead = $hx_exports["client"]["JsApi"]["hasScriptInHead"] return false; }; client_JsApi.getVideoItems = $hx_exports["client"]["JsApi"]["getVideoItems"] = function() { + var items = client_JsApi.player.getItems(); var _g = []; var _g1 = 0; - var _g2 = client_JsApi.player.getItems(); - while(_g1 < _g2.length) _g.push(Reflect.copy(_g2[_g1++])); + while(_g1 < items.length) _g.push(Reflect.copy(items[_g1++])); return _g; }; client_JsApi.addVideoItem = $hx_exports["client"]["JsApi"]["addVideoItem"] = function(url,atEnd,isTemp,callback) { @@ -1440,10 +1447,10 @@ client_Main.prototype = { this.player.refresh(); } ,getPlaylistLinks: function() { + var items = this.player.getItems(); var _g = []; var _g1 = 0; - var _g2 = this.player.getItems(); - while(_g1 < _g2.length) _g.push(_g2[_g1++].url); + while(_g1 < items.length) _g.push(items[_g1++].url); return _g; } ,tryLocalIp: function(url) { @@ -2079,10 +2086,9 @@ var client_Player = function(main) { this.skipSetRate = false; this.skipSetTime = false; this.isLoaded = false; - this.itemPos = 0; this.playerEl = window.document.querySelector("#ytapiplayer"); this.videoItemsEl = window.document.querySelector("#queue"); - this.items = VideoList._new(); + this.videoList = new VideoList(); this.main = main; this.players = [new client_players_Youtube(main,this)]; this.iframePlayer = new client_players_Iframe(main,this); @@ -2112,19 +2118,20 @@ client_Player.prototype = { }; } ,setNextItem: function(pos) { - this.itemPos = VideoList.setNextItem(this.items,pos,this.itemPos); + this.videoList.setNextItem(pos); var next = this.videoItemsEl.children[pos]; this.videoItemsEl.removeChild(next); - client_Utils.insertAtIndex(this.videoItemsEl,next,this.itemPos + 1); + client_Utils.insertAtIndex(this.videoItemsEl,next,this.videoList.pos + 1); } ,toggleItemType: function(pos) { - VideoList.toggleItemType(this.items,pos); - this.setItemElementType(this.videoItemsEl.children[pos],this.items[pos].isTemp); + this.videoList.toggleItemType(pos); + this.setItemElementType(this.videoItemsEl.children[pos],this.videoList.items[this.videoList.pos].isTemp); } ,setPlayer: function(newPlayer) { if(this.player != newPlayer) { if(this.player != null) { - client_JsApi.fireVideoRemoveEvents(this.items[this.itemPos]); + var _this = this.videoList; + client_JsApi.fireVideoRemoveEvents(_this.items[_this.pos]); this.player.removeVideo(); } this.main.blinkTabWithTitle("*Video*"); @@ -2152,7 +2159,7 @@ client_Player.prototype = { if(!this.main.isSyncActive) { return; } - var item = this.items[i]; + var item = this.videoList.items[i]; var currentPlayer = Lambda.find(this.players,function(p) { return p.isSupportedLink(item.url); }); @@ -2163,12 +2170,9 @@ client_Player.prototype = { } else { this.setPlayer(this.rawPlayer); } - var childs = this.videoItemsEl.children; - if(childs[this.itemPos] != null) { - childs[this.itemPos].classList.remove("queue_active"); - } - this.itemPos = i; - childs[this.itemPos].classList.add("queue_active"); + this.removeActiveLabel(this.videoList.pos); + this.videoList.setPos(i); + this.addActiveLabel(this.videoList.pos); this.isLoaded = false; this.player.loadVideo(item); client_JsApi.fireVideoChangeEvents(item); @@ -2178,14 +2182,16 @@ client_Player.prototype = { if(this.player == null) { return; } - var item = this.items[this.itemPos]; + var _this = this.videoList; + var item = _this.items[_this.pos]; if(item == null) { return; } this.player.loadVideo({ url : src, title : item.title, author : item.author, duration : item.duration, subs : item.subs, isTemp : item.isTemp, isIframe : item.isIframe}); } ,removeVideo: function() { - client_JsApi.fireVideoRemoveEvents(this.items[this.itemPos]); + var _this = this.videoList; + client_JsApi.fireVideoRemoveEvents(_this.items[_this.pos]); this.player.removeVideo(); window.document.querySelector("#currenttitle").textContent = Lang.get("nothingPlaying"); this.setPauseIndicator(true); @@ -2212,7 +2218,7 @@ client_Player.prototype = { return; } this.main.send({ type : "Play", play : { time : this.getTime()}}); - if(this.main.hasLeaderOnPauseRequest() && this.items.length > 0) { + if(this.main.hasLeaderOnPauseRequest() && this.videoList.items.length > 0) { if(this.main.hasPermission((this.main.personal.group & 8) != 0 ? ClientGroup.Admin : ClientGroup.User,"requestLeader")) { this.main.toggleLeader(); } @@ -2220,7 +2226,7 @@ client_Player.prototype = { } ,onPause: function() { var _gthis = this; - if(this.main.hasLeaderOnPauseRequest() && this.items.length > 0 && this.getTime() > 1 && !this.main.hasLeader()) { + if(this.main.hasLeaderOnPauseRequest() && this.videoList.items.length > 0 && this.getTime() > 1 && !this.main.hasLeader()) { client_JsApi.once("SetLeader",function(event) { if(event.setLeader.clientName != _gthis.main.personal.name) { return; @@ -2260,12 +2266,12 @@ client_Player.prototype = { var url = StringTools.htmlEscape(item.url,true); var duration = item.isIframe ? "" : this.duration(item.duration); var itemEl = client_Utils.nodeFromString("<li class=\"queue_entry info\" title=\"" + Lang.get("addedBy") + ": " + item.author + "\">\n\t\t\t\t<header>\n\t\t\t\t\t<span class=\"qe_time\">" + duration + "</span>\n\t\t\t\t\t<h4><a class=\"qe_title\" href=\"" + url + "\" target=\"_blank\">" + StringTools.htmlEscape(item.title) + "</a></h4>\n\t\t\t\t</header>\n\t\t\t\t<span class=\"controls\">\n\t\t\t\t\t<button class=\"qbtn-play\" title=\"" + Lang.get("play") + "\"><ion-icon name=\"play\"></ion-icon></button>\n\t\t\t\t\t<button class=\"qbtn-next\" title=\"" + Lang.get("setNext") + "\"><ion-icon name=\"arrow-up\"></ion-icon></button>\n\t\t\t\t\t<button class=\"qbtn-tmp\"><ion-icon></ion-icon></button>\n\t\t\t\t\t<button class=\"qbtn-delete\" title=\"" + Lang.get("delete") + "\"><ion-icon name=\"close\"></ion-icon></button>\n\t\t\t\t</span>\n\t\t\t</li>"); - VideoList.addItem(this.items,item,atEnd,this.itemPos); + this.videoList.addItem(item,atEnd); this.setItemElementType(itemEl,item.isTemp); if(atEnd) { this.videoItemsEl.appendChild(itemEl); } else { - client_Utils.insertAtIndex(this.videoItemsEl,itemEl,this.itemPos + 1); + client_Utils.insertAtIndex(this.videoItemsEl,itemEl,this.videoList.pos + 1); } this.updateCounters(); } @@ -2281,17 +2287,18 @@ client_Player.prototype = { } ,removeItem: function(url) { this.removeElementItem(url); - var index = VideoList.findIndex(this.items,function(item) { + var index = this.videoList.findIndex(function(item) { return item.url == url; }); if(index == -1) { return; } - var isCurrent = this.items[this.itemPos].url == url; - this.itemPos = VideoList.removeItem(this.items,index,this.itemPos); + var _this = this.videoList; + var isCurrent = _this.items[_this.pos].url == url; + this.videoList.removeItem(index); this.updateCounters(); - if(isCurrent && this.items.length > 0) { - this.setVideo(this.itemPos); + if(isCurrent && this.videoList.items.length > 0) { + this.setVideo(this.videoList.pos); } } ,removeElementItem: function(url) { @@ -2307,60 +2314,84 @@ client_Player.prototype = { } } ,skipItem: function(url) { - var index = VideoList.findIndex(this.items,function(item) { + var pos = this.videoList.findIndex(function(item) { return item.url == url; }); - if(index == -1) { + if(pos == -1) { return; } - if(this.items[index].isTemp) { + this.removeActiveLabel(this.videoList.pos); + this.videoList.setPos(pos); + var _this = this.videoList; + if(_this.items[_this.pos].isTemp) { this.removeElementItem(url); } - index = VideoList.skipItem(this.items,index); + this.videoList.skipItem(); this.updateCounters(); - if(this.items.length == 0) { + if(this.videoList.items.length == 0) { return; } - this.setVideo(index); + this.setVideo(this.videoList.pos); + } + ,addActiveLabel: function(pos) { + var childs = this.videoItemsEl.children; + if(childs[this.videoList.pos] != null) { + childs[this.videoList.pos].classList.add("queue_active"); + } + } + ,removeActiveLabel: function(pos) { + var childs = this.videoItemsEl.children; + if(childs[this.videoList.pos] != null) { + childs[this.videoList.pos].classList.remove("queue_active"); + } } ,updateCounters: function() { - var tmp = "" + this.items.length + " "; + var tmp = "" + this.videoList.items.length + " "; var tmp1 = Lang.get("videos"); window.document.querySelector("#plcount").textContent = tmp + tmp1; window.document.querySelector("#pllength").textContent = this.totalDuration(); } ,getItems: function() { - return this.items; + return this.videoList.items; } ,setItems: function(list,pos) { - var currentUrl = this.itemPos >= this.items.length ? "" : this.items[this.itemPos].url; + var currentUrl; + if(this.videoList.pos >= this.videoList.items.length) { + currentUrl = ""; + } else { + var _this = this.videoList; + currentUrl = _this.items[_this.pos].url; + } this.clearItems(); if(pos != null) { - this.itemPos = pos; + this.videoList.setPos(pos); } if(list.length == 0) { return; } var _g = 0; while(_g < list.length) this.addVideoItem(list[_g++],true); - if(currentUrl != this.items[this.itemPos].url) { - this.setVideo(this.itemPos); + var _this = this.videoList; + if(currentUrl != _this.items[_this.pos].url) { + this.setVideo(this.videoList.pos); } else { - this.videoItemsEl.children[this.itemPos].classList.add("queue_active"); + this.addActiveLabel(this.videoList.pos); } } ,clearItems: function() { - this.items.length = 0; + var _this = this.videoList; + _this.items.length = 0; + _this.pos = 0; this.videoItemsEl.textContent = ""; this.updateCounters(); } ,refresh: function() { - if(this.items.length == 0) { + if(this.videoList.items.length == 0) { return; } var time = this.getTime(); this.removeVideo(); - this.setVideo(this.itemPos); + this.setVideo(this.videoList.pos); if((this.main.personal.group & 4) != 0) { this.setTime(time); this.main.forceSyncNextTick = true; @@ -2386,7 +2417,7 @@ client_Player.prototype = { ,totalDuration: function() { var time = 0.0; var _g = 0; - var _g1 = this.items; + var _g1 = this.videoList.items; while(_g < _g1.length) { var item = _g1[_g]; ++_g; @@ -2398,22 +2429,23 @@ client_Player.prototype = { return this.duration(time); } ,isListEmpty: function() { - return this.items.length == 0; + return this.videoList.items.length == 0; } ,itemsLength: function() { - return this.items.length; + return this.videoList.items.length; } ,getItemPos: function() { - return this.itemPos; + return this.videoList.pos; } ,hasVideo: function() { return this.playerEl.children.length != 0; } ,getDuration: function() { - if(this.itemPos >= this.items.length) { + if(this.videoList.pos >= this.videoList.items.length) { return 0; } - return this.items[this.itemPos].duration; + var _this = this.videoList; + return _this.items[_this.pos].duration; } ,isVideoLoaded: function() { return this.player.isVideoLoaded(); @@ -2863,6 +2895,9 @@ client_players_Raw.prototype = { this.controlsHider.stop(); } this.controlsHider = haxe_Timer.delay(function() { + if(_gthis.video == null) { + return; + } _gthis.video.controls = false; },3000); this.video.onmousemove = function(e) { |
