diff options
| author | RblSb <msrblsb@gmail.com> | 2020-03-02 12:51:20 +0300 |
|---|---|---|
| committer | RblSb <msrblsb@gmail.com> | 2020-03-02 12:51:20 +0300 |
| commit | 298197a07496a762c415d0a7c77e0307243504b8 (patch) | |
| tree | 0f8d90e2b175fd72a13f394ab7e7257ef03943b2 /src | |
| parent | 8a277e9ca3a64d7b298b7c9333153f5512aa176d (diff) | |
Playlist lock toggler
Diffstat (limited to 'src')
| -rw-r--r-- | src/Types.hx | 5 | ||||
| -rw-r--r-- | src/client/Buttons.hx | 4 | ||||
| -rw-r--r-- | src/client/Main.hx | 26 | ||||
| -rw-r--r-- | src/server/Main.hx | 15 | ||||
| -rw-r--r-- | src/server/ServerState.hx | 1 |
5 files changed, 50 insertions, 1 deletions
diff --git a/src/Types.hx b/src/Types.hx index 49e93e4..50e38c3 100644 --- a/src/Types.hx +++ b/src/Types.hx @@ -64,6 +64,7 @@ typedef WsEvent = { isUnknownClient:Bool, clientName:String, videoList:Array<VideoItem>, + isPlaylistOpen:Bool, itemPos:Int, globalIp:String }, @@ -125,6 +126,9 @@ typedef WsEvent = { }, ?updatePlaylist:{ videoList:Array<VideoItem> + }, + ?togglePlaylistLock:{ + isOpen:Bool } } @@ -155,4 +159,5 @@ enum abstract WsEventType(String) { var ClearPlaylist; var ShufflePlaylist; var UpdatePlaylist; + var TogglePlaylistLock; } diff --git a/src/client/Buttons.hx b/src/client/Buttons.hx index e567331..d50773d 100644 --- a/src/client/Buttons.hx +++ b/src/client/Buttons.hx @@ -109,6 +109,10 @@ class Buttons { if (!window.confirm(Lang.get("shufflePlaylistConfirm"))) return; main.send({type: ShufflePlaylist}); } + final lockPlaylist = ge("#lockplaylist"); + lockPlaylist.onclick = e -> { + if (main.isAdmin()) main.send({type: TogglePlaylistLock}); + } final showMediaUrl = ge("#showmediaurl"); showMediaUrl.onclick = e -> { diff --git a/src/client/Main.hx b/src/client/Main.hx index 9d383bc..bb3a738 100644 --- a/src/client/Main.hx +++ b/src/client/Main.hx @@ -314,6 +314,9 @@ class Main { case ShufflePlaylist: // server-only case UpdatePlaylist: player.setItems(data.updatePlaylist.videoList); + + case TogglePlaylistLock: + setPlaylistLock(data.togglePlaylistLock.isOpen); } } @@ -335,6 +338,7 @@ class Main { } else { guestLogin(guestName.value); } + setPlaylistLock(connected.isPlaylistOpen); clearChat(); serverMessage(1); for (message in connected.history) { @@ -560,7 +564,27 @@ class Main { final leaderBtn = ge("#leader_btn"); if (isLeader()) { leaderBtn.classList.add("label-success"); - } else leaderBtn.classList.remove("label-success"); + } else { + leaderBtn.classList.remove("label-success"); + } + } + + function setPlaylistLock(isOpen:Bool):Void { + final lockPlaylist = ge("#lockplaylist"); + final icon = lockPlaylist.firstElementChild; + if (isOpen) { + lockPlaylist.title = Lang.get("playlistOpen"); + lockPlaylist.classList.add("btn-success"); + lockPlaylist.classList.remove("btn-danger"); + icon.classList.add("glyphicon-ok"); + icon.classList.remove("glyphicon-lock"); + } else { + lockPlaylist.title = Lang.get("playlistLocked"); + lockPlaylist.classList.add("btn-danger"); + lockPlaylist.classList.remove("btn-success"); + icon.classList.add("glyphicon-lock"); + icon.classList.remove("glyphicon-ok"); + } } function escapeRegExp(regex:String):String { diff --git a/src/server/Main.hx b/src/server/Main.hx index 424f22f..4ecc25a 100644 --- a/src/server/Main.hx +++ b/src/server/Main.hx @@ -34,6 +34,7 @@ class Main { final videoList = new VideoList(); final videoTimer = new VideoTimer(); final messages:Array<Message> = []; + var isPlaylistOpen = true; var itemPos = 0; static function main():Void new Main(); @@ -131,6 +132,7 @@ class Main { trace("Saving state..."); final data:ServerState = { videoList: videoList, + isPlaylistOpen: isPlaylistOpen, itemPos: itemPos, messages: messages, timer: { @@ -149,6 +151,7 @@ class Main { videoList.resize(0); messages.resize(0); for (item in data.videoList) videoList.push(item); + isPlaylistOpen = data.isPlaylistOpen; itemPos = data.itemPos; for (message in data.messages) messages.push(message); videoTimer.start(); @@ -212,6 +215,7 @@ class Main { for (client in clients) client.getData() ], videoList: videoList, + isPlaylistOpen: isPlaylistOpen, itemPos: itemPos, globalIp: globalIp } @@ -307,6 +311,7 @@ class Main { broadcast(data); case AddVideo: + if (!client.isAdmin && !isPlaylistOpen) return; final item = data.addVideo.item; item.author = client.name; final local = '$localIp:$port'; @@ -448,6 +453,16 @@ class Main { videoList: videoList }}); case UpdatePlaylist: // client-only + + case TogglePlaylistLock: + if (!client.isAdmin) return; + isPlaylistOpen = !isPlaylistOpen; + broadcast({ + type: TogglePlaylistLock, + togglePlaylistLock: { + isOpen: isPlaylistOpen + } + }); } } diff --git a/src/server/ServerState.hx b/src/server/ServerState.hx index 02cdc40..9c8d751 100644 --- a/src/server/ServerState.hx +++ b/src/server/ServerState.hx @@ -5,6 +5,7 @@ import Types.VideoItem; typedef ServerState = { videoList:Array<VideoItem>, + isPlaylistOpen:Bool, itemPos:Int, messages:Array<Message>, timer:{ |
