Add Info-Beamer API endpoints and update node.lua for streaming channels

This commit is contained in:
ske087
2025-08-19 11:40:09 +03:00
parent 104858847b
commit f02d523a99
5 changed files with 89 additions and 22 deletions

View File

@@ -1,46 +1,47 @@
-- Info-Beamer script with scheduling support
-- Info-Beamer script with streaming channel support
gl.setup(NATIVE_WIDTH, NATIVE_HEIGHT)
local json = require "json"
local font = resource.load_font "roboto.ttf"
local server_url = CONFIG.server_url or "http://localhost:5000"
local refresh_interval = CONFIG.refresh_interval or 60
local server_url = CONFIG.server_url or "http://192.168.1.22"
local player_id = CONFIG.player_id or "default_player"
local refresh_interval = CONFIG.refresh_interval or 30
local default_duration = CONFIG.default_duration or 10
local playlist = {}
local current_item = 1
local item_start_time = 0
local last_update = 0
local schedule_info = {}
local channel_info = {}
function update_playlist()
-- Fetch scheduled playlist from server
local url = server_url .. "/api/playlist"
-- Fetch channel content from server
local url = server_url .. "/api/player/" .. player_id .. "/content"
util.post_and_wait(url, "", function(response)
if response.success then
local data = json.decode(response.content)
if data and data.items then
playlist = data.items
print("Updated playlist: " .. #playlist .. " items")
if data and data.content then
playlist = data.content
print("Updated channel content: " .. #playlist .. " items")
-- Load assets
for i, item in ipairs(playlist) do
if item.type == "image" then
item.resource = resource.load_image(server_url .. "/uploads/" .. item.asset)
item.resource = resource.load_image(server_url .. "/uploads/" .. item.filename)
elseif item.type == "video" then
item.resource = resource.load_video(server_url .. "/uploads/" .. item.asset)
item.resource = resource.load_video(server_url .. "/uploads/" .. item.filename)
end
end
end
end
end)
-- Also fetch schedule information
local schedule_url = server_url .. "/api/schedule"
util.post_and_wait(schedule_url, "", function(response)
-- Also fetch channel information
local channel_url = server_url .. "/api/player/" .. player_id .. "/channel"
util.post_and_wait(channel_url, "", function(response)
if response.success then
schedule_info = json.decode(response.content) or {}
channel_info = json.decode(response.content) or {}
end
end)
@@ -55,8 +56,9 @@ function node.render()
-- If no playlist items, show waiting message
if #playlist == 0 then
font:write(100, 100, "Waiting for scheduled content...", 50, 1, 1, 1, 1)
font:write(100, 100, "Waiting for channel content...", 50, 1, 1, 1, 1)
font:write(100, 200, "Server: " .. server_url, 30, 0.7, 0.7, 0.7, 1)
font:write(100, 250, "Player ID: " .. player_id, 30, 0.7, 0.7, 0.7, 1)
return
end
@@ -87,17 +89,17 @@ function node.render()
item.resource:draw(0, 0, WIDTH, HEIGHT)
end
-- Show schedule info overlay (optional)
if item.schedule_name then
font:write(10, HEIGHT - 60, "Schedule: " .. item.schedule_name, 20, 1, 1, 1, 0.8)
if item.priority then
font:write(10, HEIGHT - 30, "Priority: " .. item.priority, 20, 1, 1, 1, 0.8)
-- Show channel info overlay (optional)
if channel_info.name then
font:write(10, HEIGHT - 60, "Channel: " .. channel_info.name, 20, 1, 1, 1, 0.8)
if channel_info.description then
font:write(10, HEIGHT - 30, channel_info.description, 20, 1, 1, 1, 0.8)
end
end
end
-- Show current time
local current_time = schedule_info.current_time or "00:00"
local current_time = os.date("%H:%M")
font:write(WIDTH - 100, 20, current_time, 24, 1, 1, 1, 0.9)
end