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) | 
