aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Types.hx4
-rw-r--r--src/client/Main.hx26
-rw-r--r--src/server/Main.hx7
3 files changed, 34 insertions, 3 deletions
diff --git a/src/Types.hx b/src/Types.hx
index 8a0bde2..643fd4f 100644
--- a/src/Types.hx
+++ b/src/Types.hx
@@ -84,6 +84,9 @@ typedef WsEvent = {
?setTime:{
time:Float
},
+ ?rewind:{
+ time:Float
+ },
?setLeader:{
clientName:String
}
@@ -105,6 +108,7 @@ enum abstract WsEventType(String) {
var Play;
var GetTime;
var SetTime;
+ var Rewind;
var SetLeader;
var ClearChat;
}
diff --git a/src/client/Main.hx b/src/client/Main.hx
index f9232eb..dc5a803 100644
--- a/src/client/Main.hx
+++ b/src/client/Main.hx
@@ -201,6 +201,8 @@ class Main {
final time = player.getTime();
if (Math.abs(time - newTime) < 2) return;
player.setTime(newTime);
+ case Rewind:
+ player.setTime(data.rewind.time);
case SetLeader:
clients.setLeader(data.setLeader.clientName);
updateUserList();
@@ -366,8 +368,12 @@ class Main {
nameDiv.innerHTML = name + ": ";
final textDiv = document.createSpanElement();
- for (filter in filters) {
- text = filter.regex.replace(text, filter.replace);
+ if (text.startsWith("/")) {
+ if (name == personal.name) handleCommands(text.substr(1));
+ } else {
+ for (filter in filters) {
+ text = filter.regex.replace(text, filter.replace);
+ }
}
textDiv.innerHTML = text;
@@ -380,7 +386,7 @@ class Main {
while (msgBuf.children.length > 200) msgBuf.removeChild(msgBuf.firstChild);
msgBuf.scrollTop = msgBuf.scrollHeight;
}
- if (personal.name == name) {
+ if (name == personal.name) {
msgBuf.scrollTop = msgBuf.scrollHeight;
}
if (document.hidden && onBlinkTab == null) {
@@ -394,6 +400,20 @@ class Main {
}
}
+ final matchNumbers = ~/^-?[0-9]+$/;
+
+ function handleCommands(text:String):Void {
+ switch (text) {
+ case "clear":
+ if (isAdmin()) send({type: ClearChat});
+ }
+ if (matchNumbers.match(text)) {
+ send({type: Rewind, rewind: {
+ time: Std.parseInt(text)
+ }});
+ }
+ }
+
function setLeaderButton(flag:Bool):Void {
final leaderBtn = ge("#leader_btn");
if (isLeader()) {
diff --git a/src/server/Main.hx b/src/server/Main.hx
index 45be2af..cdf6924 100644
--- a/src/server/Main.hx
+++ b/src/server/Main.hx
@@ -219,6 +219,13 @@ class Main {
if (!client.isLeader) return;
videoTimer.setTime(data.setTime.time);
broadcastExcept(client, data);
+ case Rewind:
+ if (videoList.length == 0) return;
+ // TODO permission
+ data.rewind.time += videoTimer.getTime();
+ if (data.rewind.time < 0) data.rewind.time = 0;
+ videoTimer.setTime(data.rewind.time);
+ broadcast(data);
case SetLeader:
clients.setLeader(data.setLeader.clientName);
broadcast({
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage