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
+32 -2
View File
@@ -11,8 +11,34 @@ var (
ErrPlaylistEntryEmpty = errors.New("playlist entry must contain at least one feed")
ErrPlaylistSyncFeedsRequired = errors.New("synchronized playlist entry requires both video and audio feeds")
ErrPlaylistDurationNegative = errors.New("playlist entry duration cannot be negative")
ErrPlaylistFailurePolicy = errors.New("invalid playlist failure policy")
)
type PlaylistFailurePolicy uint8
const (
PlaylistFailureWait PlaylistFailurePolicy = iota
PlaylistFailureNext
)
func (p PlaylistFailurePolicy) String() string {
switch p {
case PlaylistFailureWait:
return "wait"
case PlaylistFailureNext:
return "next"
default:
return fmt.Sprintf("PlaylistFailurePolicy(%d)", uint8(p))
}
}
func (p PlaylistFailurePolicy) Validate() error {
if p != PlaylistFailureWait && p != PlaylistFailureNext {
return ErrPlaylistFailurePolicy
}
return nil
}
type PlaylistFeed struct {
Domain string
UUID string
@@ -27,8 +53,9 @@ type PlaylistEntry struct {
}
type Playlist struct {
Entries []PlaylistEntry
Loop bool
Entries []PlaylistEntry
Loop bool
OnFailure PlaylistFailurePolicy
}
func (f PlaylistFeed) IsConfigured() bool {
@@ -65,6 +92,9 @@ func (e PlaylistEntry) Validate() error {
}
func (p Playlist) Validate() error {
if err := p.OnFailure.Validate(); err != nil {
return err
}
for index, entry := range p.Entries {
if err := entry.Validate(); err != nil {
return fmt.Errorf("playlist entry %d: %w", index, err)