added user permissions to rooms

This commit is contained in:
2026-01-05 01:52:28 +01:00
parent 5cf034200e
commit e2345aa20a
10 changed files with 1819 additions and 165 deletions

View File

@@ -402,8 +402,8 @@ const AnimePlayer = (function() {
// Control functions
function togglePlayPause() {
if (_roomMode && !_isRoomHost) {
console.log('Guests cannot control playback');
if (_roomMode && !_isRoomHost && !hasControlPermission()) {
showPermissionToast('You need playback control permission');
return;
}
@@ -411,12 +411,14 @@ const AnimePlayer = (function() {
if (els.video.paused) {
els.video.play().catch(() => {});
if (_roomMode && _isRoomHost) {
if (_roomMode && (_isRoomHost || hasControlPermission())) {
sendRoomEvent('play', { currentTime: els.video.currentTime });
}
} else {
els.video.pause();
if (_roomMode && _isRoomHost) {
if (_roomMode && (_isRoomHost || hasControlPermission())) {
sendRoomEvent('pause', { currentTime: els.video.currentTime });
}
}
@@ -460,7 +462,7 @@ const AnimePlayer = (function() {
function seekToPosition(e) {
if (!els.video || !els.progressContainer) return;
if (_roomMode && !_isRoomHost) return;
if (_roomMode && !_isRoomHost && !hasControlPermission()) return;
const rect = els.progressContainer.getBoundingClientRect();
const pos = (e.clientX - rect.left) / rect.width;
@@ -468,8 +470,7 @@ const AnimePlayer = (function() {
els.video.currentTime = newTime;
// En room mode, enviar evento de seek
if (_roomMode && _isRoomHost) {
if (_roomMode && (_isRoomHost || hasControlPermission())) {
sendRoomEvent('seek', { currentTime: newTime });
}
}
@@ -484,29 +485,63 @@ const AnimePlayer = (function() {
function seekRelative(seconds) {
if (!els.video) return;
if (_roomMode && !_isRoomHost) return;
if (_roomMode && !_isRoomHost && !hasControlPermission()) {
showPermissionToast('You need playback control permission');
return;
}
const newTime = Math.max(0, Math.min(els.video.duration, els.video.currentTime + seconds));
els.video.currentTime = newTime;
// En room mode, enviar evento de seek
if (_roomMode && _isRoomHost) {
if (_roomMode && (_isRoomHost || hasControlPermission())) {
sendRoomEvent('seek', { currentTime: newTime });
}
}
function seekToPercent(percent) {
if (!els.video) return;
if (_roomMode && !_isRoomHost) return;
if (_roomMode && !_isRoomHost && !hasControlPermission()) {
showPermissionToast('You need playback control permission');
return;
}
const newTime = els.video.duration * percent;
els.video.currentTime = newTime;
// En room mode, enviar evento de seek
if (_roomMode && _isRoomHost) {
if (_roomMode && (_isRoomHost || hasControlPermission())) {
sendRoomEvent('seek', { currentTime: newTime });
}
}
function hasControlPermission() {
return window.__userPermissions?.canControl || false;
}
function showPermissionToast(message) {
const toast = document.createElement('div');
toast.className = 'permission-toast';
toast.textContent = message;
toast.style.cssText = `
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: rgba(239, 68, 68, 0.95);
color: white;
padding: 16px 24px;
border-radius: 10px;
font-weight: 600;
z-index: 10000;
box-shadow: 0 8px 24px rgba(0,0,0,0.4);
animation: fadeIn 0.3s ease;
`;
document.body.appendChild(toast);
setTimeout(() => {
toast.style.animation = 'fadeOut 0.3s ease';
setTimeout(() => toast.remove(), 300);
}, 2500);
}
// Video event handlers
function onPlay() {
if (els.playPauseBtn) {
@@ -589,7 +624,9 @@ const AnimePlayer = (function() {
}
function sendRoomEvent(eventType, data = {}) {
if (!_roomMode || !_isRoomHost || !_roomWebSocket) return;
if (!_roomMode || !_roomWebSocket) return;
if (!_isRoomHost && !hasControlPermission()) return;
if (_roomWebSocket.readyState !== WebSocket.OPEN) return;
console.log('Sending room event:', eventType, data);