aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Types.hx1
-rw-r--r--src/client/Buttons.hx4
-rw-r--r--src/client/Main.hx40
-rw-r--r--src/client/Player.hx19
4 files changed, 51 insertions, 13 deletions
diff --git a/src/Types.hx b/src/Types.hx
index 76e811b..4061b09 100644
--- a/src/Types.hx
+++ b/src/Types.hx
@@ -22,6 +22,7 @@ typedef Config = {
serverChatHistory:Int,
totalVideoLimit:Int,
userVideoLimit:Int,
+ requestLeaderOnPause:Bool,
localAdmins:Bool,
templateUrl:String,
youtubeApiKey:String,
diff --git a/src/client/Buttons.hx b/src/client/Buttons.hx
index 5eb1baf..cdc9780 100644
--- a/src/client/Buttons.hx
+++ b/src/client/Buttons.hx
@@ -270,7 +270,7 @@ class Buttons {
case S: ge("#voteskip").onclick();
case C: ge("#getplaylist").onclick();
case F: ge("#fullscreenbtn").onclick();
- case L: ge("#leader_btn").onclick();
+ case L: main.toggleLeader();
case P:
if (!main.isLeader()) {
JsApi.once(SetLeader, event -> {
@@ -278,7 +278,7 @@ class Buttons {
if (name == main.getName()) player.pause();
});
}
- ge("#leader_btn").onclick();
+ main.toggleLeader();
default: return;
}
e.preventDefault();
diff --git a/src/client/Main.hx b/src/client/Main.hx
index d567d92..5c29d29 100644
--- a/src/client/Main.hx
+++ b/src/client/Main.hx
@@ -17,6 +17,8 @@ import Client.ClientData;
import Types.VideoDataRequest;
import Types.VideoData;
import Types.Config;
+import Types.Permission;
+import Client.ClientGroup;
import Types.WsEvent;
using StringTools;
using ClientTools;
@@ -123,17 +125,7 @@ class Main {
function initListeners():Void {
Buttons.init(this);
- ge("#leader_btn").onclick = e -> {
- // change button style before answer
- setLeaderButton(!personal.isLeader);
- final name = personal.isLeader ? "" : personal.name;
- send({
- type: SetLeader,
- setLeader: {
- clientName: name
- }
- });
- }
+ ge("#leader_btn").onclick = toggleLeader;
final voteSkip = ge("#voteskip");
voteSkip.onclick = e -> {
if (Utils.isTouch() && !window.confirm(Lang.get("skipItemConfirm"))) return;
@@ -829,6 +821,32 @@ class Main {
Settings.write(settings);
}
+ public function hasPermission(group:ClientGroup, permission:Permission):Bool {
+ final id = group.getName().toLowerCase();
+ final arr:Array<Permission> = Reflect.field(config.permissions, id);
+ return arr.contains(permission);
+ }
+
+ public function toggleLeader():Void {
+ // change button style before answer
+ setLeaderButton(!personal.isLeader);
+ final name = personal.isLeader ? "" : personal.name;
+ send({
+ type: SetLeader,
+ setLeader: {
+ clientName: name
+ }
+ });
+ }
+
+ public function hasLeader():Bool {
+ return clients.hasLeader();
+ }
+
+ public function hasLeaderOnPauseRequest():Bool {
+ return config.requestLeaderOnPause;
+ }
+
public function getTemplateUrl():String {
return config.templateUrl;
}
diff --git a/src/client/Player.hx b/src/client/Player.hx
index 8fe42b3..59ca11f 100644
--- a/src/client/Player.hx
+++ b/src/client/Player.hx
@@ -170,9 +170,28 @@ class Player {
time: getTime()
}
});
+ if (main.hasLeaderOnPauseRequest()) {
+ // do not remove leader if user cannot request it back
+ final group:Client.ClientGroup = main.isAdmin() ? Admin : User;
+ if (main.hasPermission(group, RequestLeaderPerm)) main.toggleLeader();
+ }
}
public function onPause():Void {
+ if (main.hasLeaderOnPauseRequest() && !main.hasLeader()) {
+ JsApi.once(SetLeader, event -> {
+ final name = event.setLeader.clientName;
+ if (name != main.getName()) return;
+ main.send({
+ type: Pause, pause: {
+ time: getTime()
+ }
+ });
+ player.pause();
+ });
+ main.toggleLeader();
+ return;
+ }
if (!main.isLeader()) return;
main.send({
type: Pause, pause: {
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage