From 7bd694394a75c2c05c4e895ed599a2fba2396b8d Mon Sep 17 00:00:00 2001 From: Timothy Date: Sat, 4 Jul 2026 07:55:05 +0200 Subject: [PATCH] chore(openapi+web): regenerate v1.json and SPA API types after main merge --- ErsatzTV/wwwroot/openapi/v1.json | 433 ++++++++++++++++++++++++++++++- web/src/api/generated/v1.d.ts | 102 +++++++- 2 files changed, 531 insertions(+), 4 deletions(-) diff --git a/ErsatzTV/wwwroot/openapi/v1.json b/ErsatzTV/wwwroot/openapi/v1.json index 72654b915..9de14c959 100644 --- a/ErsatzTV/wwwroot/openapi/v1.json +++ b/ErsatzTV/wwwroot/openapi/v1.json @@ -215,6 +215,45 @@ } } }, + "/api/channels/state": { + "get": { + "tags": [ + "Channels" + ], + "summary": "Get channel runtime state", + "responses": { + "200": { + "description": "OK", + "content": { + "text/plain": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChannelStateResponseModel" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChannelStateResponseModel" + } + } + }, + "text/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChannelStateResponseModel" + } + } + } + } + } + } + } + }, "/api/guide": { "get": { "tags": [ @@ -492,6 +531,240 @@ } } }, + "/api/channels/bulk/renumber": { + "post": { + "tags": [ + "Channels" + ], + "summary": "Renumber channels", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/BulkRenumberChannelsRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkRenumberChannelsRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BulkRenumberChannelsRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/BulkRenumberChannelsRequest" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/channels/bulk/group": { + "post": { + "tags": [ + "Channels" + ], + "summary": "Move channels to a group", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/BulkMoveChannelsToGroupRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkMoveChannelsToGroupRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BulkMoveChannelsToGroupRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/BulkMoveChannelsToGroupRequest" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, + "/api/channels/bulk/delete": { + "post": { + "tags": [ + "Channels" + ], + "summary": "Delete channels", + "requestBody": { + "content": { + "application/json-patch+json": { + "schema": { + "$ref": "#/components/schemas/BulkDeleteChannelsRequest" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/BulkDeleteChannelsRequest" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/BulkDeleteChannelsRequest" + } + }, + "application/*+json": { + "schema": { + "$ref": "#/components/schemas/BulkDeleteChannelsRequest" + } + } + }, + "required": true + }, + "responses": { + "204": { + "description": "No Content" + }, + "404": { + "description": "Not Found", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + }, + "422": { + "description": "Unprocessable Entity", + "content": { + "text/plain": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + }, + "text/json": { + "schema": { + "$ref": "#/components/schemas/ProblemDetails" + } + } + } + } + } + } + }, "/api/channels/{channelNumber}/playout/reset": { "post": { "tags": [ @@ -3636,6 +3909,85 @@ } } }, + "BulkDeleteChannelsRequest": { + "required": [ + "channelIds" + ], + "type": "object", + "properties": { + "channelIds": { + "type": [ + "null", + "array" + ], + "items": { + "type": "integer", + "format": "int32" + } + } + } + }, + "BulkMoveChannelsToGroupRequest": { + "required": [ + "channelIds", + "group" + ], + "type": "object", + "properties": { + "channelIds": { + "type": [ + "null", + "array" + ], + "items": { + "type": "integer", + "format": "int32" + } + }, + "group": { + "type": [ + "null", + "string" + ] + } + } + }, + "BulkRenumberChannelRequest": { + "required": [ + "id", + "number" + ], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int32" + }, + "number": { + "type": [ + "null", + "string" + ] + } + } + }, + "BulkRenumberChannelsRequest": { + "required": [ + "channels" + ], + "type": "object", + "properties": { + "channels": { + "type": [ + "null", + "array" + ], + "items": { + "$ref": "#/components/schemas/BulkRenumberChannelRequest" + } + } + } + }, "ChannelGuideChannelResponseModel": { "required": [ "number", @@ -3735,6 +4087,27 @@ ], "type": "string" }, + "ChannelNowPlayingResponseModel": { + "required": [ + "title", + "startUtc", + "finishUtc" + ], + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "startUtc": { + "type": "string", + "format": "date-time" + }, + "finishUtc": { + "type": "string", + "format": "date-time" + } + } + }, "ChannelPlayoutMode": { "enum": [ "Continuous", @@ -3753,10 +4126,15 @@ "required": [ "id", "number", + "sortNumber", "name", + "group", + "categories", "fFmpegProfile", "language", - "streamingMode" + "streamingMode", + "isEnabled", + "showInEpg" ], "type": "object", "properties": { @@ -3770,12 +4148,28 @@ "string" ] }, + "sortNumber": { + "type": "number", + "format": "double" + }, "name": { "type": [ "null", "string" ] }, + "group": { + "type": [ + "null", + "string" + ] + }, + "categories": { + "type": [ + "null", + "string" + ] + }, "fFmpegProfile": { "type": [ "null", @@ -3793,6 +4187,12 @@ "null", "string" ] + }, + "isEnabled": { + "type": "boolean" + }, + "showInEpg": { + "type": "boolean" } } }, @@ -3803,6 +4203,37 @@ ], "type": "string" }, + "ChannelStateResponseModel": { + "required": [ + "channelId", + "channelNumber", + "onAir", + "nowPlaying" + ], + "type": "object", + "properties": { + "channelId": { + "type": "integer", + "format": "int32" + }, + "channelNumber": { + "type": "string" + }, + "onAir": { + "type": "boolean" + }, + "nowPlaying": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ChannelNowPlayingResponseModel" + } + ] + } + } + }, "ChannelStreamSelectorMode": { "enum": [ "Default", diff --git a/web/src/api/generated/v1.d.ts b/web/src/api/generated/v1.d.ts index e3072deef..2fb1d37c9 100644 --- a/web/src/api/generated/v1.d.ts +++ b/web/src/api/generated/v1.d.ts @@ -21,6 +21,10 @@ export interface components { "isExternalUrl"?: boolean; "hasContentType"?: boolean; "urlWithContentType"?: null | string; + }; + "ArtworkUploadResponseModel": { + "path": string; + "contentType": string; }; "BulkDeleteChannelsRequest": { "channelIds": null | Array; @@ -35,6 +39,24 @@ export interface components { }; "BulkRenumberChannelsRequest": { "channels": null | Array; + }; + "ChannelGuideChannelResponseModel": { + "number": string; + "name": string; + "programmes": Array; + }; + "ChannelGuideProgrammeResponseModel": { + "start": string; + "stop": string; + "title": string; + "subTitle": null | string; + "category": null | string; + "fillerKind": components["schemas"]["FillerKind"]; + }; + "ChannelGuideResponseModel": { + "start": string; + "end": string; + "channels": Array; }; "ChannelIdleBehavior": "StopOnDisconnect" | "KeepRunning"; "ChannelMusicVideoCreditsMode": "None" | "GenerateSubtitles"; @@ -221,6 +243,10 @@ export interface components { "FFmpegProfileVideoFormat": "None" | "H264" | "Hevc" | "Mpeg2Video" | "Av1" | "Copy"; "FillerKind": "None" | "PreRoll" | "MidRoll" | "PostRoll" | "Tail" | "Fallback" | "GuideMode" | "DecoDefault"; "FillerMode": "None" | "Duration" | "Count" | "Pad" | "RandomCount"; + "FillerPresetResponseModel": { + "id": number; + "name": null | string; + }; "FillerPresetViewModel": { "id": number; "name": null | string; @@ -242,6 +268,10 @@ export interface components { "FillWithGroupMode": "None" | "FillWithOrderedGroups" | "FillWithShuffledGroups"; "FilterMode": "HardwareIfPossible" | "Software"; "FixedStartTimeBehavior": "Strict" | "Flexible"; + "GraphicsElementResponseModel": { + "id": number; + "name": null | string; + }; "GraphicsElementViewModel": { "id": number; "name": null | string; @@ -249,11 +279,23 @@ export interface components { }; "GuideMode": "Normal" | "Filler"; "HardwareAccelerationKind": "None" | "Qsv" | "Nvenc" | "Vaapi" | "VideoToolbox" | "Amf" | "V4l2m2m" | "Rkmpp"; + "HealthCheckResponseModel": { + "title": string; + "status": string; + "detail": string; + "link": null | string; + }; "HlsSessionModel": { "channelNumber": null | string; "state": null | string; "transcodedUntil": string; "lastAccess": string; + }; + "IFormFile": string; + "LibraryMediaKind": "Movies" | "Shows" | "MusicVideos" | "OtherVideos" | "Songs" | "Images" | "RemoteStreams"; + "LibraryScanStatusResponseModel": { + "libraryId": number; + "percent": number; }; "MarathonGroupBy": "None" | "Show" | "Season" | "Artist" | "Album" | "Director"; "MediaCollectionViewModel": { @@ -270,6 +312,20 @@ export interface components { "hasMediaInfo"?: boolean; }; "MediaItemState": "Normal" | "FileNotFound" | "Unavailable" | "RemoteOnly"; + "MediaSourceLibraryResponseModel": { + "id": number; + "name": string; + "mediaKind": components["schemas"]["LibraryMediaKind"]; + "lastScan": null | string; + "itemCount": number; + }; + "MediaSourceResponseModel": { + "id": number; + "kind": string; + "name": string; + "connectionAddress": null | string; + "libraries": Array; + }; "MultiCollectionItemViewModel": { "multiCollectionId": number; "collection": components["schemas"]["MediaCollectionViewModel"]; @@ -294,23 +350,54 @@ export interface components { "name": null | string; }; "NormalizeLoudnessMode": "Off" | "LoudNorm"; + "PagedPlayoutItemsResponseModel": { + "totalCount": number; + "page": null | Array; + }; + "PagedPlayoutsResponseModel": { + "totalCount": number; + "page": null | Array; + }; "PlaybackOrder": "None" | "Chronological" | "Random" | "Shuffle" | "ShuffleInOrder" | "MultiEpisodeShuffle" | "SeasonEpisode" | "RandomRotation" | "Marathon"; "PlaylistViewModel": { "id": number; "playlistGroupId": number; "name": null | string; "isSystem": boolean; + }; + "PlayoutBuildMode": "Continue" | "Refresh" | "Reset"; + "PlayoutBuildStatusResponseModel": { + "lastBuild": string; + "success": boolean; + "message": null | string; + }; + "PlayoutItemResponseModel": { + "title": null | string; + "start": string; + "finish": string; + "duration": null | string; + "fillerKind": null | components["schemas"]["FillerKind"]; + }; + "PlayoutListItemResponseModel": { + "id": number; + "channelNumber": string; + "channelName": string; + "scheduleKind": components["schemas"]["PlayoutScheduleKind"]; + "scheduleName": string; + "dailyRebuildTime": null | string; + "buildStatus": null | components["schemas"]["PlayoutBuildStatusResponseModel"]; }; "PlayoutMode": "Flood" | "One" | "Multiple" | "Duration"; "PlayoutResponseModel": { "id": number; "scheduleKind": components["schemas"]["PlayoutScheduleKind"]; - "channelName": null | string; - "channelNumber": null | string; + "channelName": string; + "channelNumber": string; "playoutMode": components["schemas"]["ChannelPlayoutMode"]; - "scheduleName": null | string; + "scheduleName": string; "scheduleFile": null | string; "dailyRebuildTime": null | string; + "buildStatus": null | components["schemas"]["PlayoutBuildStatusResponseModel"]; }; "PlayoutScheduleKind": "None" | "Classic" | "Block" | "Sequential" | "Scripted" | "ExternalJson"; "ProblemDetails": { @@ -319,6 +406,10 @@ export interface components { "status"?: null | number; "detail"?: null | string; "instance"?: null | string; + }; + "ProgramScheduleItemsWithDurationViewModel": { + "items": null | Array; + "totalDurationEstimate": null | string; }; "ProgramScheduleItemViewModel": { "id"?: number; @@ -355,6 +446,7 @@ export interface components { "preferredAudioTitle"?: null | string; "preferredSubtitleLanguageCode"?: null | string; "subtitleMode"?: null | components["schemas"]["ChannelSubtitleMode"]; + "durationEstimate"?: null | string; "name"?: null | string; }; "ProgramScheduleViewModel": { @@ -523,6 +615,10 @@ export interface components { }; "VaapiDriver": "Default" | "iHD" | "i965" | "RadeonSI" | "Nouveau"; "WatermarkLocation": number; + "WatermarkResponseModel": { + "id": number; + "name": null | string; + }; "WatermarkSize": number; "WatermarkViewModel": { "id": number;