mirror of
https://github.com/samuelmaddock/gm-mediaplayer.git
synced 2025-03-04 03:03:02 -05:00
Added queue locking.
This commit is contained in:
parent
e591a77cfe
commit
189825135a
@ -186,3 +186,14 @@ function MediaPlayer.RequestShuffle( mp )
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
||||
function MediaPlayer.RequestLock( mp )
|
||||
|
||||
local mpId = GetMediaPlayerId( mp )
|
||||
if not mpId then return end
|
||||
|
||||
net.Start( "MEDIAPLAYER.RequestLock" )
|
||||
net.WriteString( mpId )
|
||||
net.SendToServer()
|
||||
|
||||
end
|
||||
|
@ -50,6 +50,9 @@ local function OnMediaUpdate( len )
|
||||
local queueShuffle = net.ReadBool()
|
||||
mp:SetQueueShuffle( queueShuffle )
|
||||
|
||||
local queueLocked = net.ReadBool()
|
||||
mp:SetQueueLocked( queueLocked )
|
||||
|
||||
-- Read extended update information
|
||||
mp:NetReadUpdate()
|
||||
|
||||
|
@ -240,6 +240,10 @@ function MEDIAPLAYER:CanPlayerRequestMedia( ply, media )
|
||||
return false, msg
|
||||
end
|
||||
|
||||
if self:GetQueueLocked() and not self:IsPlayerPrivileged(ply) then
|
||||
return false, "The requested media couldn't be added as the queue is locked."
|
||||
end
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
@ -502,6 +506,22 @@ function MEDIAPLAYER:RequestShuffle( ply )
|
||||
|
||||
end
|
||||
|
||||
function MEDIAPLAYER:RequestLock( ply )
|
||||
|
||||
if not ( IsValid(ply) and self:HasListener(ply) ) then
|
||||
return
|
||||
end
|
||||
|
||||
if not self:IsPlayerPrivileged(ply) then
|
||||
self:NotifyPlayer(ply, "You don't have permission to do that.")
|
||||
return
|
||||
end
|
||||
|
||||
self:SetQueueLocked( not self:GetQueueLocked() )
|
||||
self:BroadcastUpdate()
|
||||
|
||||
end
|
||||
|
||||
|
||||
--[[---------------------------------------------------------
|
||||
Media Player Updates
|
||||
@ -531,9 +551,13 @@ function MEDIAPLAYER:BroadcastUpdate( ply )
|
||||
net.WriteString( self.Name ) -- media player type
|
||||
net.WriteEntity( self:GetOwner() )
|
||||
self.net.WritePlayerState( self:GetPlayerState() )
|
||||
|
||||
net.WriteBool( self:GetQueueRepeat() )
|
||||
net.WriteBool( self:GetQueueShuffle() )
|
||||
net.WriteBool( self:GetQueueLocked() )
|
||||
|
||||
self:NetWriteUpdate( pl ) -- mp type-specific info
|
||||
|
||||
net.WriteUInt( #self._Queue, self:GetQueueLimit(true) )
|
||||
for _, media in ipairs(self._Queue) do
|
||||
self.net.WriteMedia(media)
|
||||
|
@ -7,7 +7,8 @@ function MEDIAPLAYER:GetSnapshot()
|
||||
currentTime = media and media:CurrentTime(),
|
||||
queue = queue,
|
||||
queueRepeat = self:GetQueueRepeat(),
|
||||
queueShuffle = self:GetQueueShuffle()
|
||||
queueShuffle = self:GetQueueShuffle(),
|
||||
queueLocked = self:GetQueueLocked()
|
||||
}
|
||||
end
|
||||
|
||||
@ -16,6 +17,7 @@ function MEDIAPLAYER:RestoreSnapshot( snapshot )
|
||||
|
||||
self:SetQueueRepeat( snapshot.queueRepeat )
|
||||
self:SetQueueShuffle( snapshot.queueShuffle )
|
||||
self:SetQueueLocked( snapshot.queueLocked )
|
||||
|
||||
if snapshot.media then
|
||||
-- restore currently playing media from where it left off
|
||||
|
@ -315,6 +315,14 @@ function MEDIAPLAYER:SetQueueShuffle( shouldShuffle )
|
||||
end
|
||||
end
|
||||
|
||||
function MEDIAPLAYER:GetQueueLocked()
|
||||
return self._QueueLocked
|
||||
end
|
||||
|
||||
function MEDIAPLAYER:SetQueueLocked( locked )
|
||||
self._QueueLocked = locked
|
||||
end
|
||||
|
||||
---
|
||||
-- Called when the queue is updated; emits a change event.
|
||||
--
|
||||
|
@ -7,6 +7,7 @@ util.AddNetworkString( "MEDIAPLAYER.RequestSeek" )
|
||||
util.AddNetworkString( "MEDIAPLAYER.RequestRemove" )
|
||||
util.AddNetworkString( "MEDIAPLAYER.RequestRepeat" )
|
||||
util.AddNetworkString( "MEDIAPLAYER.RequestShuffle" )
|
||||
util.AddNetworkString( "MEDIAPLAYER.RequestLock" )
|
||||
|
||||
local REQUEST_DELAY = 0.2
|
||||
|
||||
@ -148,3 +149,13 @@ net.Receive( "MEDIAPLAYER.RequestShuffle", RequestWrapper(function(mp, ply)
|
||||
mp:RequestShuffle( ply )
|
||||
|
||||
end) )
|
||||
|
||||
net.Receive( "MEDIAPLAYER.RequestLock", RequestWrapper(function(mp, ply)
|
||||
|
||||
if MediaPlayer.DEBUG then
|
||||
print("MEDIAPLAYER.RequestLock:", mp:GetId(), ply)
|
||||
end
|
||||
|
||||
mp:RequestLock( ply )
|
||||
|
||||
end) )
|
||||
|
@ -18,6 +18,7 @@ MP.EVENTS.UI = {
|
||||
REMOVE_MEDIA = "mp.events.ui.removeMedia",
|
||||
SKIP_MEDIA = "mp.events.ui.skipMedia",
|
||||
VOTE_MEDIA = "mp.events.ui.voteMedia",
|
||||
TOGGLE_LOCK = "mp.events.ui.toggleLock",
|
||||
TOGGLE_PAUSE = "mp.events.ui.togglePause",
|
||||
TOGGLE_REPEAT = "mp.events.ui.toggleRepeat",
|
||||
TOGGLE_SHUFFLE = "mp.events.ui.toggleShuffle",
|
||||
|
@ -36,6 +36,8 @@ spritesheet.Register {
|
||||
mpIcon( "mp-repeat", 4, 2, 18, 18 ),
|
||||
mpIcon( "mp-shuffle", 0, 3, 16, 16 ),
|
||||
mpIcon( "mp-replay", 1, 3, 13, 16 ),
|
||||
mpIcon( "mp-lock", 2, 3, 12, 16 ),
|
||||
mpIcon( "mp-lock-open", 3, 3, 12, 16 ),
|
||||
|
||||
mpIcon( "mp-play", 3, 4, 19, 25 ),
|
||||
mpIcon( "mp-pause", 4, 4, 22, 24 ),
|
||||
|
@ -75,8 +75,13 @@ derma.DefineControl( "MP.QueueHeader", "", QUEUE_HEADER, "Panel" )
|
||||
|
||||
local ADD_VIDEO_BTN = {}
|
||||
|
||||
ADD_VIDEO_BTN.Color = Color( 232, 78, 64 )
|
||||
ADD_VIDEO_BTN.HoverColor = Color( 252, 98, 84 )
|
||||
local AddEnabledColor = Color( 232, 78, 64 )
|
||||
local AddEnabledHoverColor = Color( 252, 98, 84 )
|
||||
|
||||
local AddDisabledColor = Color( 140, 140, 140 )
|
||||
|
||||
ADD_VIDEO_BTN.Color = AddEnabledColor
|
||||
ADD_VIDEO_BTN.HoverColor = AddEnabledHoverColor
|
||||
|
||||
function ADD_VIDEO_BTN:Init()
|
||||
|
||||
@ -94,6 +99,17 @@ function ADD_VIDEO_BTN:Init()
|
||||
|
||||
end
|
||||
|
||||
function ADD_VIDEO_BTN:SetLocked( locked )
|
||||
|
||||
if locked and not hook.Run( MP.EVENTS.UI.PRIVILEGED_PLAYER ) then
|
||||
self:SetDisabled( true )
|
||||
self.Color = AddDisabledColor
|
||||
self.HoverColor = AddDisabledColor
|
||||
self:SetIcon( "mp-lock" )
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function ADD_VIDEO_BTN:Paint( w, h )
|
||||
|
||||
local col
|
||||
|
@ -106,6 +106,10 @@ function SidebarPresenter:SetupEvents()
|
||||
MediaPlayer.Skip( mp )
|
||||
end )
|
||||
|
||||
self:RegisterHook( MP.EVENTS.UI.TOGGLE_LOCK, function()
|
||||
MediaPlayer.RequestLock( mp )
|
||||
end )
|
||||
|
||||
self:RegisterHook( MP.EVENTS.UI.TOGGLE_PAUSE, function()
|
||||
MediaPlayer.Pause( mp )
|
||||
end )
|
||||
|
@ -179,6 +179,8 @@ function CURRENTLY_PLAYING_TAB:OnMediaPlayerChanged( mp )
|
||||
|
||||
self:SetMediaPlayerId( mp:GetId() )
|
||||
|
||||
self.QueuePanel.Header.AddVidBtn:SetLocked( mp:GetQueueLocked() )
|
||||
|
||||
if not self.MediaChangedHandle then
|
||||
-- set current media
|
||||
self.PlaybackPanel:OnMediaChanged( mp:GetMedia() )
|
||||
|
@ -28,6 +28,8 @@ function PANEL:Init()
|
||||
self:AddButton( self.RepeatBtn )
|
||||
self.ShuffleBtn = vgui.Create( "MP.ShuffleButton" )
|
||||
self:AddButton( self.ShuffleBtn )
|
||||
self.LockBtn = vgui.Create( "MP.LockButton" )
|
||||
self:AddButton( self.LockBtn )
|
||||
end
|
||||
|
||||
self:OnVolumeChanged( MediaPlayer.Volume() )
|
||||
@ -54,6 +56,7 @@ function PANEL:OnMediaPlayerChanged( mp )
|
||||
if hook.Run( MP.EVENTS.UI.PRIVILEGED_PLAYER ) then
|
||||
self.RepeatBtn:SetEnabled( mp:GetQueueRepeat() )
|
||||
self.ShuffleBtn:SetEnabled( mp:GetQueueShuffle() )
|
||||
self.LockBtn:SetEnabled( mp:GetQueueLocked() )
|
||||
end
|
||||
|
||||
end
|
||||
@ -213,3 +216,31 @@ function SHUFFLE_BTN:DoClick()
|
||||
end
|
||||
|
||||
derma.DefineControl( "MP.ShuffleButton", "", SHUFFLE_BTN, "MP.SidebarToggleButton" )
|
||||
|
||||
|
||||
local LOCK_BTN = {}
|
||||
|
||||
function LOCK_BTN:Init()
|
||||
self.BaseClass.Init( self )
|
||||
self:SetIcon( "mp-lock-open" )
|
||||
self:SetTooltip( "Toggle Queue Lock" )
|
||||
end
|
||||
|
||||
function LOCK_BTN:DoClick()
|
||||
self.BaseClass.DoClick( self )
|
||||
|
||||
hook.Run( MP.EVENTS.UI.TOGGLE_LOCK )
|
||||
self:UpdateIcon()
|
||||
end
|
||||
|
||||
function LOCK_BTN:SetEnabled( bEnabled )
|
||||
self.BaseClass.SetEnabled( self, bEnabled )
|
||||
self:UpdateIcon()
|
||||
end
|
||||
|
||||
function LOCK_BTN:UpdateIcon()
|
||||
local icon = self:GetEnabled() and "mp-lock" or "mp-lock-open"
|
||||
self:SetIcon( icon )
|
||||
end
|
||||
|
||||
derma.DefineControl( "MP.LockButton", "", LOCK_BTN, "MP.SidebarToggleButton" )
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Loading…
Reference in New Issue
Block a user