Playlist-level retry configuration
This commit is contained in:
@@ -14,6 +14,13 @@ type playlistFile struct {
|
||||
Entries []playlistFileEntry `json:"entries"`
|
||||
Loop bool `json:"loop"`
|
||||
OnFailure string `json:"on_failure"`
|
||||
Retry *playlistFileRetry `json:"retry"`
|
||||
}
|
||||
|
||||
type playlistFileRetry struct {
|
||||
MaxAttempts *int `json:"max_attempts"`
|
||||
InitialDelay string `json:"initial_delay"`
|
||||
MaxDelay string `json:"max_delay"`
|
||||
}
|
||||
|
||||
type playlistFileEntry struct {
|
||||
@@ -73,6 +80,13 @@ func decodePlaylistFile(reader io.Reader) (playback.Playlist, error) {
|
||||
"on_failure %q: %w", file.OnFailure, playback.ErrPlaylistFailurePolicy,
|
||||
)
|
||||
}
|
||||
if file.Retry != nil {
|
||||
retry, err := decodePlaylistRetry(*file.Retry)
|
||||
if err != nil {
|
||||
return playback.Playlist{}, err
|
||||
}
|
||||
playlist.Retry = &retry
|
||||
}
|
||||
for index, entry := range file.Entries {
|
||||
duration := time.Duration(0)
|
||||
if entry.Duration != "" {
|
||||
@@ -103,6 +117,37 @@ func decodePlaylistFile(reader io.Reader) (playback.Playlist, error) {
|
||||
return playlist, nil
|
||||
}
|
||||
|
||||
func decodePlaylistRetry(file playlistFileRetry) (playback.RetryPolicy, error) {
|
||||
retry := playback.RetryPolicy{
|
||||
InitialDelay: initialRetryDelay,
|
||||
MaxDelay: maxRetryDelay,
|
||||
}
|
||||
if file.MaxAttempts != nil {
|
||||
retry.MaxAttempts = *file.MaxAttempts
|
||||
}
|
||||
var err error
|
||||
if file.InitialDelay != "" {
|
||||
retry.InitialDelay, err = time.ParseDuration(file.InitialDelay)
|
||||
if err != nil {
|
||||
return playback.RetryPolicy{}, fmt.Errorf(
|
||||
"retry initial_delay %q: %w", file.InitialDelay, err,
|
||||
)
|
||||
}
|
||||
}
|
||||
if file.MaxDelay != "" {
|
||||
retry.MaxDelay, err = time.ParseDuration(file.MaxDelay)
|
||||
if err != nil {
|
||||
return playback.RetryPolicy{}, fmt.Errorf(
|
||||
"retry max_delay %q: %w", file.MaxDelay, err,
|
||||
)
|
||||
}
|
||||
}
|
||||
if err := retry.Validate(); err != nil {
|
||||
return playback.RetryPolicy{}, fmt.Errorf("validate playlist retry: %w", err)
|
||||
}
|
||||
return retry, nil
|
||||
}
|
||||
|
||||
func playlistFileFeedToPlayback(feed *playlistFileFeed) playback.PlaylistFeed {
|
||||
if feed == nil {
|
||||
return playback.PlaylistFeed{}
|
||||
|
||||
Reference in New Issue
Block a user