From d90dab645ca31b8d665338bd7c4ecd2609ae3cd1 Mon Sep 17 00:00:00 2001 From: JohnDoe6345789 Date: Tue, 30 Dec 2025 11:26:05 +0000 Subject: [PATCH] feat: Add stream management functions for scheduling, canceling, and rendering scenes and schedules --- .../stream_cast/seed/scripts/cancel_stream.lua | 11 +++++++++++ .../stream_cast/seed/scripts/create_scene.lua | 15 +++++++++++++++ .../seed/scripts/render_scene_list.lua | 17 +++++++++++++++++ .../seed/scripts/render_schedule_item.lua | 16 ++++++++++++++++ .../seed/scripts/render_schedule_list.lua | 17 +++++++++++++++++ .../seed/scripts/schedule_stream.lua | 15 +++++++++++++++ .../stream_cast/seed/scripts/switch_scene.lua | 11 +++++++++++ 7 files changed, 102 insertions(+) create mode 100644 packages/stream_cast/seed/scripts/cancel_stream.lua create mode 100644 packages/stream_cast/seed/scripts/create_scene.lua create mode 100644 packages/stream_cast/seed/scripts/render_scene_list.lua create mode 100644 packages/stream_cast/seed/scripts/render_schedule_item.lua create mode 100644 packages/stream_cast/seed/scripts/render_schedule_list.lua create mode 100644 packages/stream_cast/seed/scripts/schedule_stream.lua create mode 100644 packages/stream_cast/seed/scripts/switch_scene.lua diff --git a/packages/stream_cast/seed/scripts/cancel_stream.lua b/packages/stream_cast/seed/scripts/cancel_stream.lua new file mode 100644 index 000000000..289cfef29 --- /dev/null +++ b/packages/stream_cast/seed/scripts/cancel_stream.lua @@ -0,0 +1,11 @@ +--- Cancel a scheduled stream +---@param stream_id string Stream ID to cancel +---@return CancelStreamAction Cancel stream action +local function cancel_stream(stream_id) + return { + action = "cancel_stream", + stream_id = stream_id + } +end + +return cancel_stream diff --git a/packages/stream_cast/seed/scripts/create_scene.lua b/packages/stream_cast/seed/scripts/create_scene.lua new file mode 100644 index 000000000..9ae7a34f8 --- /dev/null +++ b/packages/stream_cast/seed/scripts/create_scene.lua @@ -0,0 +1,15 @@ +--- Create a new scene +---@param name string Scene name +---@param sources? table[] Scene sources +---@return CreateSceneAction Create scene action +local function create_scene(name, sources) + return { + action = "create_scene", + data = { + name = name, + sources = sources or {} + } + } +end + +return create_scene diff --git a/packages/stream_cast/seed/scripts/render_scene_list.lua b/packages/stream_cast/seed/scripts/render_scene_list.lua new file mode 100644 index 000000000..8b4923b66 --- /dev/null +++ b/packages/stream_cast/seed/scripts/render_scene_list.lua @@ -0,0 +1,17 @@ +local render_scene = require("render_scene") + +--- Render list of scenes +---@param scenes Scene[] Array of scenes +---@return SceneListComponent Scene list component +local function render_scene_list(scenes) + local items = {} + for _, scene in ipairs(scenes) do + table.insert(items, render_scene(scene)) + end + return { + type = "scene_list", + children = items + } +end + +return render_scene_list diff --git a/packages/stream_cast/seed/scripts/render_schedule_item.lua b/packages/stream_cast/seed/scripts/render_schedule_item.lua new file mode 100644 index 000000000..11d12038f --- /dev/null +++ b/packages/stream_cast/seed/scripts/render_schedule_item.lua @@ -0,0 +1,16 @@ +--- Render a schedule item +---@param stream ScheduledStream Scheduled stream data +---@return ScheduleItemComponent Schedule item component +local function render_schedule_item(stream) + return { + type = "schedule_item", + props = { + title = stream.title, + start_time = stream.start_time, + duration = stream.duration, + thumbnail = stream.thumbnail + } + } +end + +return render_schedule_item diff --git a/packages/stream_cast/seed/scripts/render_schedule_list.lua b/packages/stream_cast/seed/scripts/render_schedule_list.lua new file mode 100644 index 000000000..b66b7a790 --- /dev/null +++ b/packages/stream_cast/seed/scripts/render_schedule_list.lua @@ -0,0 +1,17 @@ +local render_schedule_item = require("render_schedule_item") + +--- Render schedule list +---@param streams ScheduledStream[] Array of scheduled streams +---@return ScheduleListComponent Schedule list component +local function render_schedule_list(streams) + local items = {} + for _, stream in ipairs(streams) do + table.insert(items, render_schedule_item(stream)) + end + return { + type = "schedule_list", + children = items + } +end + +return render_schedule_list diff --git a/packages/stream_cast/seed/scripts/schedule_stream.lua b/packages/stream_cast/seed/scripts/schedule_stream.lua new file mode 100644 index 000000000..cf3349bb3 --- /dev/null +++ b/packages/stream_cast/seed/scripts/schedule_stream.lua @@ -0,0 +1,15 @@ +--- Schedule a new stream +---@param data { title: string, start_time: string, duration?: number } Schedule data +---@return ScheduleStreamAction Schedule stream action +local function schedule_stream(data) + return { + action = "schedule_stream", + data = { + title = data.title, + start_time = data.start_time, + duration = data.duration or 60 + } + } +end + +return schedule_stream diff --git a/packages/stream_cast/seed/scripts/switch_scene.lua b/packages/stream_cast/seed/scripts/switch_scene.lua new file mode 100644 index 000000000..943fead8b --- /dev/null +++ b/packages/stream_cast/seed/scripts/switch_scene.lua @@ -0,0 +1,11 @@ +--- Switch to a scene +---@param scene_id string Scene ID to switch to +---@return SwitchSceneAction Switch scene action +local function switch_scene(scene_id) + return { + action = "switch_scene", + scene_id = scene_id + } +end + +return switch_scene