From c5903d5670dad72c840c30a302f8238c8cff9f8a Mon Sep 17 00:00:00 2001 From: RblSb Date: Fri, 28 Feb 2020 10:40:53 +0300 Subject: Implement video item buttons --- src/server/Main.hx | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'src/server') diff --git a/src/server/Main.hx b/src/server/Main.hx index e7895ca..e5b50c8 100644 --- a/src/server/Main.hx +++ b/src/server/Main.hx @@ -28,7 +28,7 @@ class Main { final config:Config; final clients:Array = []; final freeIds:Array = []; - final videoList:Array = []; + final videoList = new VideoList(); final videoTimer = new VideoTimer(); final messages:Array = []; var itemPos = 0; @@ -257,8 +257,7 @@ class Main { // TODO send server message return; } - if (data.addVideo.atEnd) videoList.push(item); - else videoList.insert(itemPos + 1, item); + videoList.addItem(item, data.addVideo.atEnd, itemPos); broadcast(data); // Initial timer start if VideoLoaded is not happen if (videoList.length == 1) restartWaitTimer(); @@ -270,16 +269,13 @@ class Main { case RemoveVideo: if (videoList.length == 0) return; final url = data.removeVideo.url; - final item = videoList.find(item -> item.url == url); - if (item == null) return; - final index = videoList.indexOf(item); + var index = videoList.findIndex(item -> item.url == url); + if (index == -1) return; + final isCurrent = videoList[itemPos].url == url; - if (index < itemPos) itemPos--; - videoList.remove(item); - if (isCurrent) { - if (itemPos >= videoList.length) itemPos = 0; - videoTimer.stop(); - if (videoList.length > 0) restartWaitTimer(); + itemPos = videoList.removeItem(index, itemPos); + if (isCurrent && videoList.length > 0) { + restartWaitTimer(); } broadcast(data); @@ -287,12 +283,7 @@ class Main { if (videoList.length == 0) return; final item = videoList[itemPos]; if (item.url != data.skipVideo.url) return; - - if (!item.isTemp) itemPos++; - else videoList.remove(item); - if (itemPos >= videoList.length) itemPos = 0; - - videoTimer.stop(); + itemPos = videoList.skipItem(itemPos); if (videoList.length > 0) restartWaitTimer(); broadcast(data); @@ -357,6 +348,22 @@ class Main { }); } + case PlayItem: + itemPos = data.playItem.pos; + restartWaitTimer(); + broadcast(data); + + case SetNextItem: + final pos = data.setNextItem.pos; + if (pos == itemPos || pos == itemPos + 1) return; + videoList.setNextItem(pos, itemPos); + broadcast(data); + + case ToggleItemType: + final pos = data.toggleItemType.pos; + videoList.toggleItemType(pos); + broadcast(data); + case ClearChat: messages.resize(0); if (client.isAdmin) broadcast(data); @@ -426,6 +433,7 @@ class Main { var loadedClientsCount = 0; function restartWaitTimer():Void { + videoTimer.stop(); if (waitVideoStart != null) waitVideoStart.stop(); waitVideoStart = Timer.delay(startVideoPlayback, 3000); } -- cgit v1.2.3