playlist retry-exhaustion handling
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user