aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRblSb <msrblsb@gmail.com>2020-03-04 20:41:43 +0300
committerRblSb <msrblsb@gmail.com>2020-03-04 20:41:43 +0300
commit6e28381de77265f8b6a24cdd9c583d1d27d8d7b2 (patch)
tree4a960040204580999774bfffea23634c19d02c9c /src
parent4155b95cce55e1176aecb1531b9c06344a2e81b5 (diff)
Playlist config limits
Diffstat (limited to 'src')
-rw-r--r--src/Types.hx7
-rw-r--r--src/VideoList.hx6
-rw-r--r--src/client/Main.hx13
-rw-r--r--src/server/Main.hx34
4 files changed, 52 insertions, 8 deletions
diff --git a/src/Types.hx b/src/Types.hx
index 5dbc07a..e5b467a 100644
--- a/src/Types.hx
+++ b/src/Types.hx
@@ -12,7 +12,8 @@ typedef Config = {
maxLoginLength:Int,
maxMessageLength:Int,
serverChatHistory:Int,
- videoLimit:Int,
+ totalVideoLimit:Int,
+ userVideoLimit:Int,
leaderRequest:String,
emotes:Array<Emote>,
filters:Array<Filter>,
@@ -84,6 +85,9 @@ typedef WsEvent = {
clientName:String,
text:String
},
+ ?serverMessage:{
+ textId:String
+ },
?updateClients:{
clients:Array<ClientData>,
},
@@ -140,6 +144,7 @@ enum abstract WsEventType(String) {
var LoginError;
var Logout;
var Message;
+ var ServerMessage;
var UpdateClients;
// var AddClient;
// var RemoveClient;
diff --git a/src/VideoList.hx b/src/VideoList.hx
index 2f13b6c..e2d88d5 100644
--- a/src/VideoList.hx
+++ b/src/VideoList.hx
@@ -64,4 +64,10 @@ abstract VideoList(Array<VideoItem>) from Array<VideoItem> to Array<VideoItem> {
return itemPos;
}
+ public function itemsByUser(client:Client):Int {
+ var i = 0;
+ for (item in this) if (item.author == client.name) i++;
+ return i;
+ }
+
}
diff --git a/src/client/Main.hx b/src/client/Main.hx
index a5fe9bb..b2f51ca 100644
--- a/src/client/Main.hx
+++ b/src/client/Main.hx
@@ -267,9 +267,6 @@ class Main {
showGuestPasswordPanel();
case LoginError:
- final text = Lang.get("usernameError")
- .replace("$MAX", '${config.maxLoginLength}');
- serverMessage(4, text);
showGuestLoginPanel();
case Logout:
@@ -284,6 +281,16 @@ class Main {
case Message:
addMessage(data.message.clientName, data.message.text);
+ case ServerMessage:
+ final id = data.serverMessage.textId;
+ final text = switch (id) {
+ case "usernameError":
+ Lang.get(id).replace("$MAX", '${config.maxLoginLength}');
+ default:
+ Lang.get(id);
+ }
+ serverMessage(4, text);
+
case AddVideo:
player.addVideoItem(data.addVideo.item, data.addVideo.atEnd);
if (player.itemsLength() == 1) player.setVideo(0);
diff --git a/src/server/Main.hx b/src/server/Main.hx
index 6a2ad82..8f71bd2 100644
--- a/src/server/Main.hx
+++ b/src/server/Main.hx
@@ -13,7 +13,10 @@ import js.npm.ws.Server as WSServer;
import js.npm.ws.WebSocket;
import js.node.http.IncomingMessage;
import js.node.Http;
-import Types;
+import Types.Config;
+import Types.UserList;
+import Types.Message;
+import Types.WsEvent;
using StringTools;
using ClientTools;
using Lambda;
@@ -249,6 +252,7 @@ class Main {
final name = data.login.clientName;
if (badNickName(name) || name.length > config.maxLoginLength
|| clients.getByName(name) != null) {
+ serverMessage(client, "usernameError");
send(client, {type: LoginError});
return;
}
@@ -263,7 +267,7 @@ class Main {
a -> a.name == name && a.hash == hash
)) client.isAdmin = true;
else {
- // TODO server msg type
+ serverMessage(client, "passwordMatchError");
send(client, {type: LoginError});
return;
}
@@ -310,8 +314,22 @@ class Main {
if (messages.length > config.serverChatHistory) messages.shift();
broadcast(data);
+ case ServerMessage:
case AddVideo:
- if (!client.isAdmin && !isPlaylistOpen) return;
+ if (!client.isAdmin && !isPlaylistOpen) {
+ serverMessage(client, "accessError");
+ return;
+ }
+ if (config.totalVideoLimit != 0
+ && videoList.length >= config.totalVideoLimit) {
+ serverMessage(client, "totalVideoLimitError");
+ return;
+ }
+ if (config.userVideoLimit != 0
+ && videoList.itemsByUser(client) >= config.userVideoLimit) {
+ serverMessage(client, "videoLimitPerUserError");
+ return;
+ }
final item = data.addVideo.item;
item.author = client.name;
final local = '$localIp:$port';
@@ -319,7 +337,7 @@ class Main {
item.url = item.url.replace(local, '$globalIp:$port');
}
if (videoList.exists(i -> i.url == item.url)) {
- // TODO send server message
+ serverMessage(client, "videoAlreadyExistsError");
return;
}
videoList.addItem(item, data.addVideo.atEnd, itemPos);
@@ -486,6 +504,14 @@ class Main {
});
}
+ function serverMessage(client:Client, textId:String):Void {
+ send(client, {
+ type: ServerMessage, serverMessage: {
+ textId: textId
+ }
+ });
+ }
+
function send(client:Client, data:WsEvent):Void {
client.ws.send(Json.stringify(data), null);
}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage