'
);
items.addItem(item, atEnd, itemPos);
setItemElementType(itemEl, item.isTemp);
if (atEnd) videoItemsEl.appendChild(itemEl);
else Utils.insertAtIndex(videoItemsEl, itemEl, itemPos + 1);
updateCounters();
}
function setItemElementType(item:Element, isTemp:Bool):Void {
final text = isTemp ? Lang.get("makePermanent") : Lang.get("makeTemporary");
item.querySelector(".qbtn-tmp").innerHTML = '$text';
if (isTemp) item.classList.add("queue_temp");
else item.classList.remove("queue_temp");
}
public function removeItem(url:String):Void {
removeElementItem(url);
var index = items.findIndex(item -> item.url == url);
if (index == -1) return;
final isCurrent = items[itemPos].url == url;
itemPos = items.removeItem(index, itemPos);
updateCounters();
if (isCurrent && items.length > 0) {
setVideo(itemPos);
}
}
function removeElementItem(url:String):Void {
for (child in videoItemsEl.children) {
if (child.querySelector(".qe_title").getAttribute("href") == url) {
videoItemsEl.removeChild(child);
break;
}
}
}
public function skipItem(url:String):Void {
var index = items.findIndex(item -> item.url == url);
if (index == -1) return;
if (items[index].isTemp) removeElementItem(url);
index = items.skipItem(index);
updateCounters();
if (items.length == 0) return;
setVideo(index);
}
function updateCounters():Void {
ge("#plcount").textContent = '${items.length} ${Lang.get("videos")}';
ge("#pllength").textContent = totalDuration();
}
public function getItems():VideoList {
return items;
}
public function setItems(list:Array, ?pos:Int):Void {
clearItems();
if (pos != null) itemPos = pos;
if (list.length == 0) return;
for (video in list) addVideoItem(video, true);
if (currentSrc != items[itemPos].url) setVideo(itemPos);
else videoItemsEl.children[itemPos].classList.add("queue_active");
}
public function clearItems():Void {
items.resize(0);
videoItemsEl.textContent = "";
updateCounters();
}
public function refresh():Void {
if (items.length == 0) return;
removeVideo();
setVideo(itemPos);
}
function duration(time:Float):String {
final h = Std.int(time / 60 / 60);
final m = Std.int(time / 60) - h * 60;
final s = Std.int(time % 60);
var time = '$m:';
if (m < 10) time = '0$time';
if (h > 0) time = '$h:$time';
if (s < 10) time = time + "0";
time += s;
return time;
}
function totalDuration():String {
var time = 0.0;
for (item in items) time += item.duration;
return duration(time);
}
function nodeFromString(div:String):Element {
final wrapper = document.createDivElement();
wrapper.innerHTML = div;
return wrapper.firstElementChild;
}
public function isListEmpty():Bool {
return items.length == 0;
}
public function itemsLength():Int {
return items.length;
}
public function getItemPos():Int {
return itemPos;
}
public function hasVideo():Bool {
return playerEl.children.length != 0;
}
public function play():Void {
if (!main.isSyncActive) return;
if (player == null) return;
player.play();
}
public function pause():Void {
if (!main.isSyncActive) return;
if (player == null) return;
player.pause();
}
public function getTime():Float {
if (player == null) return 0;
return player.getTime();
}
public function setTime(time:Float, isLocal = true):Void {
if (!main.isSyncActive) return;
if (player == null) return;
skipSetTime = isLocal;
player.setTime(time);
}
public function getPlaybackRate():Float {
if (player == null) return 1;
return player.getPlaybackRate();
}
public function setPlaybackRate(rate:Float, isLocal = true):Void {
if (!main.isSyncActive) return;
if (player == null) return;
skipSetRate = isLocal;
player.setPlaybackRate(rate);
}
}