playlist retry-exhaustion handling

This commit is contained in:
Dmitry Sergeev
2026-09-01 23:35:41 +03:00
parent abdfc8e2de
commit 179768ca4a
9 changed files with 346 additions and 45 deletions
+13 -2
View File
@@ -11,8 +11,9 @@ import (
)
type playlistFile struct {
Entries []playlistFileEntry `json:"entries"`
Loop bool `json:"loop"`
Entries []playlistFileEntry `json:"entries"`
Loop bool `json:"loop"`
OnFailure string `json:"on_failure"`
}
type playlistFileEntry struct {
@@ -62,6 +63,16 @@ func decodePlaylistFile(reader io.Reader) (playback.Playlist, error) {
Entries: make([]playback.PlaylistEntry, len(file.Entries)),
Loop: file.Loop,
}
switch file.OnFailure {
case "", "wait":
playlist.OnFailure = playback.PlaylistFailureWait
case "next":
playlist.OnFailure = playback.PlaylistFailureNext
default:
return playback.Playlist{}, fmt.Errorf(
"on_failure %q: %w", file.OnFailure, playback.ErrPlaylistFailurePolicy,
)
}
for index, entry := range file.Entries {
duration := time.Duration(0)
if entry.Duration != "" {