316 lines
10 KiB
Lua
316 lines
10 KiB
Lua
|
|
-- ─────────────────────────────────────────────────────────────────────────────
|
|||
|
|
-- NUI bridge – all SendNUIMessage / RegisterNUICallback calls
|
|||
|
|
-- ─────────────────────────────────────────────────────────────────────────────
|
|||
|
|
|
|||
|
|
NUIBridge = {}
|
|||
|
|
|
|||
|
|
local pcOpen = false -- ist der PC gerade offen? (für Interaktionsmodus-Taste)
|
|||
|
|
|
|||
|
|
local function Send(action, data)
|
|||
|
|
SendNUIMessage({ action = action, data = data or {} })
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- ── Outbound (Lua -> NUI) ───────────────────────────────────────────────────
|
|||
|
|
|
|||
|
|
function NUIBridge.Boot(sessionData)
|
|||
|
|
SetNuiFocus(true, true)
|
|||
|
|
pcOpen = true
|
|||
|
|
Send("boot", sessionData)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function NUIBridge.SetInstalledApps(apps)
|
|||
|
|
Send("setInstalledApps", apps)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function NUIBridge.SetInbox(mails, folders)
|
|||
|
|
Send("setInbox", { mails = mails, folders = folders or {} })
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function NUIBridge.MailAddressStatus(hasAddress, address, realms)
|
|||
|
|
Send("mailAddressStatus", { hasAddress = hasAddress, address = address, realms = realms or {} })
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function NUIBridge.MailCreateResult(success, err, address)
|
|||
|
|
Send("mailCreateResult", { success = success, error = err, address = address })
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function NUIBridge.SetMailContent(mail)
|
|||
|
|
Send("setMailContent", mail)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function NUIBridge.MailSent()
|
|||
|
|
Send("mailSent")
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function NUIBridge.MailDeleted(id)
|
|||
|
|
Send("mailDeleted", { id = id })
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function NUIBridge.SetStoreList(apps)
|
|||
|
|
Send("setStoreList", apps)
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function NUIBridge.NewMailNotify()
|
|||
|
|
Send("newMailNotify")
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
function NUIBridge.Close()
|
|||
|
|
SetNuiFocus(false, false)
|
|||
|
|
pcOpen = false
|
|||
|
|
Send("close")
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- Interaktionsmodus: NUI-Fokus vom PC lösen (Spiel-Interaktion) bzw. zurückholen.
|
|||
|
|
RegisterNUICallback('setFocus', function(data, cb)
|
|||
|
|
local focus = data and data.focus and true or false
|
|||
|
|
SetNuiFocus(focus, focus)
|
|||
|
|
if focus then
|
|||
|
|
if Interaction and Interaction.ExitInteract then Interaction.ExitInteract() end
|
|||
|
|
else
|
|||
|
|
if Interaction and Interaction.EnterInteract then Interaction.EnterInteract() end
|
|||
|
|
end
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
-- Taste (Standard: END, in den FiveM-Einstellungen umbelegbar), um aus dem
|
|||
|
|
-- Interaktionsmodus wieder zum PC (Fokus) zurückzukehren.
|
|||
|
|
RegisterCommand('pclive_refocus', function()
|
|||
|
|
if pcOpen then
|
|||
|
|
SetNuiFocus(true, true)
|
|||
|
|
if Interaction and Interaction.ExitInteract then Interaction.ExitInteract() end
|
|||
|
|
Send('exitInteract')
|
|||
|
|
end
|
|||
|
|
end, false)
|
|||
|
|
RegisterKeyMapping('pclive_refocus', 'PC-Live: Zurück zum PC (Fokus)', 'keyboard', 'END')
|
|||
|
|
|
|||
|
|
function NUIBridge.SetAccentColor(color)
|
|||
|
|
Send("setAccentColor", { color = color })
|
|||
|
|
end
|
|||
|
|
|
|||
|
|
-- ── Inbound (NUI -> Lua) ────────────────────────────────────────────────────
|
|||
|
|
|
|||
|
|
RegisterNUICallback('closePC', function(data, cb)
|
|||
|
|
NUIBridge.Close()
|
|||
|
|
Interaction.OnSessionClose()
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
-- Mail
|
|||
|
|
RegisterNUICallback('checkMailAddress', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:checkMailAddress')
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('createMailAddress', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:createMailAddress', data.username)
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('getInbox', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:getInbox')
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('readMail', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:readMail', tonumber(data.id))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('sendMail', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:sendMail', {
|
|||
|
|
to = tostring(data.to or ""),
|
|||
|
|
subject = tostring(data.subject or ""),
|
|||
|
|
body = tostring(data.body or ""),
|
|||
|
|
fromMailbox = tostring(data.fromMailbox or ""),
|
|||
|
|
})
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('setSignature', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:setSignature',
|
|||
|
|
tostring(data.address or ""), tostring(data.signature or ""))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('getSharedMailboxes', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:getSharedMailboxes')
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('deleteMail', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:deleteMail', tonumber(data.id))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('getSent', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:getSent')
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('getFolders', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:getFolders', tostring(data.address or ""))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('getFolderMails', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:getFolderMails', tonumber(data.folderId),
|
|||
|
|
tostring(data.address or ""))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('createFolder', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:createFolder', tostring(data.name or ""),
|
|||
|
|
tostring(data.address or ""))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('deleteFolder', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:deleteFolder', tonumber(data.id),
|
|||
|
|
tostring(data.address or ""))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('moveMail', function(data, cb)
|
|||
|
|
local folderId = data.folderId ~= nil and tonumber(data.folderId) or nil
|
|||
|
|
TriggerServerEvent('pc-live:server:moveMail', tonumber(data.id), folderId,
|
|||
|
|
tostring(data.address or ""))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
-- Calendar
|
|||
|
|
RegisterNUICallback('getCalendar', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:getCalendar')
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('addCalendarEvent', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:addCalendarEvent', data)
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('updateCalendarEvent', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:updateCalendarEvent', tonumber(data.id), data)
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('deleteCalendarEvent', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:deleteCalendarEvent', tonumber(data.id))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
-- Contacts
|
|||
|
|
RegisterNUICallback('getContacts', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:getContacts')
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('addContact', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:addContact', data)
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('updateContact', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:updateContact', tonumber(data.id), data)
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('deleteContact', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:deleteContact', tonumber(data.id))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
-- Store
|
|||
|
|
RegisterNUICallback('getStore', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:getStore')
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('installApp', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:installApp', tostring(data.appId or ""))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('uninstallApp', function(data, cb)
|
|||
|
|
TriggerServerEvent('pc-live:server:uninstallApp', tostring(data.appId or ""))
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
-- Browser – IC pages fetched locally from config
|
|||
|
|
RegisterNUICallback('getBrowserPage', function(data, cb)
|
|||
|
|
local slug = tostring(data.slug or "home")
|
|||
|
|
local page = Config.ICPages[slug]
|
|||
|
|
cb({ found = page ~= nil, page = page, slug = slug })
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
-- ── IC-Verwaltung ────────────────────────────────────────────────────────────
|
|||
|
|
|
|||
|
|
-- Relay messages from ic-verwaltung to pc-live NUI (→ iframe postMessage)
|
|||
|
|
AddEventHandler('ic-verwaltung:relayToPC', function(msg)
|
|||
|
|
SendNUIMessage({ action = 'ic_verwaltung_relay', data = msg })
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('openIcVerwaltung', function(data, cb)
|
|||
|
|
cb({})
|
|||
|
|
-- Open ic-verwaltung in pcMode: no focus changes, UI relayed via postMessage
|
|||
|
|
TriggerEvent('ic-verwaltung:openForPC')
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('closeIcVerwaltung', function(data, cb)
|
|||
|
|
cb({})
|
|||
|
|
-- Forward close action into ic-verwaltung (user closed the PC window)
|
|||
|
|
TriggerEvent('ic-verwaltung:closeFromPC')
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
-- ── Parkuhr Integration ──────────────────────────────────────────────────────
|
|||
|
|
|
|||
|
|
local _pendingParkuhrCb = nil
|
|||
|
|
|
|||
|
|
-- Antwort vom Parkuhr-Server empfangen und an NUI weiterleiten
|
|||
|
|
RegisterNetEvent('parkuhr:panelData', function(payload)
|
|||
|
|
if _pendingParkuhrCb then
|
|||
|
|
_pendingParkuhrCb(payload or { devices = {}, typeTariffs = {}, currency = "$" })
|
|||
|
|
_pendingParkuhrCb = nil
|
|||
|
|
end
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('getParkuhrPanel', function(data, cb)
|
|||
|
|
_pendingParkuhrCb = cb
|
|||
|
|
TriggerServerEvent('parkuhr:requestPanelData')
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('saveParkuhrTariff', function(data, cb)
|
|||
|
|
TriggerServerEvent('parkuhr:saveTariff',
|
|||
|
|
tonumber(data.deviceId),
|
|||
|
|
tonumber(data.duration),
|
|||
|
|
tonumber(data.price)
|
|||
|
|
)
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
RegisterNUICallback('deleteParkuhrTariff', function(data, cb)
|
|||
|
|
TriggerServerEvent('parkuhr:deleteTariff',
|
|||
|
|
tonumber(data.deviceId),
|
|||
|
|
tonumber(data.duration)
|
|||
|
|
)
|
|||
|
|
cb({})
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
-- ── PBS Dashboard ────────────────────────────────────────────────────────────
|
|||
|
|
|
|||
|
|
RegisterNUICallback('getPbsUrl', function(data, cb)
|
|||
|
|
cb({ url = GetConvar('pbs_web_url', 'http://localhost:4088') })
|
|||
|
|
end)
|
|||
|
|
|
|||
|
|
-- ── Bleeter App ───────────────────────────────────────────────────────────────
|
|||
|
|
|
|||
|
|
RegisterNUICallback('openBleeter', function(data, cb)
|
|||
|
|
local mode = (data and data.mode) or 'desktop'
|
|||
|
|
-- PC bleibt offen; Bleeter öffnet sich als Overlay darüber
|
|||
|
|
if exports['bleeter'] then
|
|||
|
|
exports['bleeter']:OpenBleeter(mode)
|
|||
|
|
else
|
|||
|
|
TriggerEvent('bleeter:client:open')
|
|||
|
|
end
|
|||
|
|
cb({ ok = true })
|
|||
|
|
end)
|