aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Types.hx5
-rw-r--r--src/client/Buttons.hx4
-rw-r--r--src/client/Main.hx26
-rw-r--r--src/server/Main.hx15
-rw-r--r--src/server/ServerState.hx1
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:{
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage