Add schedule sync and schedule-aware playback
This commit is contained in:
@@ -17,6 +17,7 @@ constexpr const char* PATH_FREQUENCIES = "/frequencies";
|
||||
constexpr const char* PATH_LICENSE = "/license";
|
||||
constexpr const char* PATH_CREATE_ACCOUNT = "/automations/create/account";
|
||||
constexpr const char* PATH_COLOR_PALETTES = "/color-palettes";
|
||||
constexpr const char* PATH_SCHEDULE = "/schedule";
|
||||
|
||||
// Result of a single HTTP request.
|
||||
struct HttpResponse {
|
||||
@@ -119,4 +120,37 @@ struct AccountResult {
|
||||
// to the user and is NOT part of the response. `name` may be empty.
|
||||
AccountResult createAccount(const std::string& email, const std::string& name = "");
|
||||
|
||||
// ─── GET /schedule ─────────────────────────────────────────────────────
|
||||
|
||||
// One scheduled listening block. Wall-clock times are carried as minutes from
|
||||
// midnight; overnight blocks wrap past midnight (end clock time <= start).
|
||||
struct ScheduleBlock {
|
||||
std::string id;
|
||||
int start_minutes = 0;
|
||||
int end_minutes = 0;
|
||||
bool overnight = false;
|
||||
int duration_minutes = 0;
|
||||
// When true the kiosk enables dynamic audio for the block's duration,
|
||||
// overriding the device's audio selection. Defaults to true: schedules are
|
||||
// dynamic unless the portal explicitly says otherwise.
|
||||
bool dynamic_audio = true;
|
||||
// Selected proclamation ids, in play order.
|
||||
std::vector<std::string> proclamation_ids;
|
||||
};
|
||||
|
||||
struct ScheduleResponse {
|
||||
std::string email;
|
||||
std::vector<ScheduleBlock> blocks;
|
||||
};
|
||||
|
||||
// Parse the JSON payload returned by the schedule endpoint. `dynamicAudio` is
|
||||
// optional and defaults to true when absent. Returns false on malformed input.
|
||||
bool parseScheduleJson(const std::string& body, ScheduleResponse& out);
|
||||
|
||||
// Fetch a user's schedule. Authenticates via the paired `email` + `license_key`
|
||||
// query parameters. Returns true only on HTTP 2xx + successful parse; failures
|
||||
// (including a missing/blank pair) leave `out` untouched.
|
||||
bool fetchSchedule(const std::string& email, const std::string& license_key,
|
||||
ScheduleResponse& out);
|
||||
|
||||
} // namespace radiantwave::api
|
||||
|
||||
Reference in New Issue
Block a user