forked from Simnation/Main
178 lines
No EOL
5.3 KiB
Lua
178 lines
No EOL
5.3 KiB
Lua
local QBCore = exports['qb-core']:GetCoreObject()
|
|
|
|
QBCore.Functions.CreateCallback('myDJ:requestPlaylistsAndSongs', function(source, cb)
|
|
|
|
local playlists = {}
|
|
local songs = {}
|
|
|
|
MySQL.Async.fetchAll('SELECT * from playlists', {},
|
|
function(result)
|
|
playlists = result
|
|
|
|
MySQL.Async.fetchAll('SELECT * from playlist_songs', {},
|
|
function(result)
|
|
songs = result
|
|
cb(playlists, songs)
|
|
end
|
|
)
|
|
end
|
|
)
|
|
end)
|
|
|
|
QBCore.Functions.CreateCallback('myDJ:requestPlaylistById', function(source, cb, playlistId)
|
|
|
|
MySQL.Async.fetchAll('SELECT * from playlist_songs WHERE playlist = @playlistId', {
|
|
['@playlistId'] = playlistId,
|
|
},
|
|
function(result)
|
|
cb(result)
|
|
end
|
|
)
|
|
end)
|
|
|
|
QBCore.Functions.CreateCallback('myDJ:requestPlaylists', function(source, cb)
|
|
MySQL.Async.fetchAll('SELECT id, label from playlists', {},
|
|
function(result)
|
|
cb(result)
|
|
end
|
|
)
|
|
end)
|
|
|
|
QBCore.Functions.CreateCallback('myDJ:requestPlaylistSongs', function(source, cb, playlistId)
|
|
MySQL.Async.fetchAll('SELECT * from playlist_songs WHERE playlist = @playlist', {
|
|
['@playlistId'] = playlistId,
|
|
},
|
|
function(result)
|
|
cb(result)
|
|
end
|
|
)
|
|
end)
|
|
|
|
QBCore.Functions.CreateCallback('myDJ:receiveRunningSongs', function(source, cb)
|
|
cb(Config.DJPositions)
|
|
end)
|
|
|
|
RegisterServerEvent('myDJ:addPlaylist')
|
|
AddEventHandler('myDJ:addPlaylist', function(label)
|
|
MySQL.Async.execute(
|
|
'INSERT INTO playlists (label) VALUES (@label)', {
|
|
['@label'] = label,
|
|
})
|
|
end)
|
|
|
|
RegisterServerEvent('myDJ:addSongToPlaylist')
|
|
AddEventHandler('myDJ:addSongToPlaylist', function(playlistId, videoLink)
|
|
--print(tostring(playlistId) .. ' link ' .. tostring(videoLink))
|
|
MySQL.Async.execute(
|
|
'INSERT INTO playlist_songs (playlist, link) VALUES (@playlist, @link)', {
|
|
['@playlist'] = playlistId,
|
|
--['@label'] = label,
|
|
['@link'] = videoLink,
|
|
})
|
|
end)
|
|
|
|
RegisterServerEvent('myDJ:removeSongFromPlaylist')
|
|
AddEventHandler('myDJ:removeSongFromPlaylist', function(songId, link)
|
|
MySQL.Async.execute(
|
|
'DELETE FROM playlist_songs WHERE id = @id', {
|
|
['@id'] = songId,
|
|
})
|
|
end)
|
|
|
|
|
|
RegisterServerEvent('myDJ:removePlaylist')
|
|
AddEventHandler('myDJ:removePlaylist', function(playlistId)
|
|
MySQL.Async.execute(
|
|
'DELETE FROM playlists WHERE id = @id', {
|
|
['@id'] = playlistId,
|
|
})
|
|
end)
|
|
|
|
-- SYNC
|
|
|
|
RegisterServerEvent('myDj:syncPlaySong')
|
|
AddEventHandler('myDj:syncPlaySong', function(currentDJ, DJPos, DJRange, link)
|
|
--print('got event trigger: ' .. currentDJ .. ' . ' .. tostring(DJPos) .. ' and play ' .. link)
|
|
TriggerClientEvent('myDj:clientPlaySong', -1, currentDJ, DJPos, DJRange, link)
|
|
|
|
for k, v in pairs(Config.DJPositions) do
|
|
if v.name == currentDJ then
|
|
Config.DJPositions[k].currentData = {
|
|
titleFromPlaylist = false,
|
|
currentlyPlaying = true,
|
|
currentLink = link,
|
|
currentTime = 0,
|
|
}
|
|
|
|
break
|
|
end
|
|
end
|
|
--print('trigger event for client')
|
|
end)
|
|
|
|
RegisterServerEvent('myDj:syncPlaySongFromPlaylist')
|
|
AddEventHandler('myDj:syncPlaySongFromPlaylist', function(currentDJ, DJPos, DJRange, link, playlistId)
|
|
TriggerClientEvent('myDj:clientPlaySongFromPlaylist', -1, currentDJ, DJPos, DJRange, link, playlistId)
|
|
for k, v in pairs(Config.DJPositions) do
|
|
if v.name == currentDJ then
|
|
Config.DJPositions[k].currentData = {
|
|
titleFromPlaylist = true,
|
|
currentPlaylist = playlistId,
|
|
currentlyPlaying = true,
|
|
currentLink = link,
|
|
currentTime = 0,
|
|
}
|
|
|
|
break
|
|
end
|
|
end
|
|
end)
|
|
|
|
-- Sync TimeStamps
|
|
Citizen.CreateThread(function()
|
|
while true do
|
|
Citizen.Wait(1000)
|
|
for k, v in pairs(Config.DJPositions) do
|
|
if v.currentData ~= nil and v.currentData.currentlyPlaying then
|
|
v.currentData.currentTime = v.currentData.currentTime + 1
|
|
end
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterServerEvent('myDj:syncStartStop')
|
|
AddEventHandler('myDj:syncStartStop', function(currentDJ)
|
|
--print('sync start stop: ' .. currentDJ)
|
|
TriggerClientEvent('myDj:clientStartStop', -1, currentDJ)
|
|
|
|
for k, v in pairs(Config.DJPositions) do
|
|
if v.name == currentDJ then
|
|
if v.currentData ~= nil and v.currentData.currentlyPlaying then
|
|
Config.DJPositions[k].currentData.currentlyPlaying = false
|
|
elseif v.currentData ~= nil and not v.currentData.currentlyPlaying then
|
|
Config.DJPositions[k].currentData.currentlyPlaying = true
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end)
|
|
|
|
RegisterServerEvent('myDj:syncForward')
|
|
AddEventHandler('myDj:syncForward', function(currentDJ)
|
|
TriggerClientEvent('myDj:clientForward', -1, currentDJ)
|
|
end)
|
|
|
|
RegisterServerEvent('myDj:syncRewind')
|
|
AddEventHandler('myDj:syncRewind', function(currentDJ)
|
|
TriggerClientEvent('myDj:clientRewind', -1, currentDJ)
|
|
end)
|
|
|
|
RegisterServerEvent('myDj:syncVolumeUp')
|
|
AddEventHandler('myDj:syncVolumeUp', function(currentDJ)
|
|
TriggerClientEvent('myDj:clientVolumeUp', -1, currentDJ)
|
|
end)
|
|
|
|
RegisterServerEvent('myDj:syncVolumeDown')
|
|
AddEventHandler('myDj:syncVolumeDown', function(currentDJ)
|
|
TriggerClientEvent('myDj:clientVolumeDown', -1, currentDJ)
|
|
end) |