initial support for playlist modifiers
supported modifiers are --playlist-start, --playlist-end, --playlist-reverse, --max-downloads
This commit is contained in:
86
server/playlist/modifiers.go
Normal file
86
server/playlist/modifiers.go
Normal file
@@ -0,0 +1,86 @@
|
||||
package playlist
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"strconv"
|
||||
|
||||
"github.com/marcopiovanello/yt-dlp-web-ui/v3/server/common"
|
||||
)
|
||||
|
||||
/*
|
||||
Applicable modifiers
|
||||
|
||||
full | short | description
|
||||
---------------------------------------------------------------------------------
|
||||
--playlist-start NUMBER | -I NUMBER: | discard first N entries
|
||||
--playlist-end NUMBER | -I :NUMBER | discard last N entries
|
||||
--playlist-reverse | -I ::-1 | self explanatory
|
||||
--max-downloads NUMBER | | stops after N completed downloads
|
||||
*/
|
||||
|
||||
func ApplyModifiers(entries *[]common.DownloadInfo, args []string) error {
|
||||
for i, modifier := range args {
|
||||
switch modifier {
|
||||
case "--playlist-start":
|
||||
return playlistStart(i, modifier, args, entries)
|
||||
|
||||
case "--playlist-end":
|
||||
return playlistEnd(i, modifier, args, entries)
|
||||
|
||||
case "--max-downloads":
|
||||
return maxDownloads(i, modifier, args, entries)
|
||||
|
||||
case "--playlist-reverse":
|
||||
slices.Reverse(*entries)
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func playlistStart(i int, modifier string, args []string, entries *[]common.DownloadInfo) error {
|
||||
if !guard(i, len(modifier)) {
|
||||
return nil
|
||||
}
|
||||
|
||||
n, err := strconv.Atoi(args[i+1])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*entries = (*entries)[n:]
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func playlistEnd(i int, modifier string, args []string, entries *[]common.DownloadInfo) error {
|
||||
if !guard(i, len(modifier)) {
|
||||
return nil
|
||||
}
|
||||
|
||||
n, err := strconv.Atoi(args[i+1])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*entries = (*entries)[:n]
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func maxDownloads(i int, modifier string, args []string, entries *[]common.DownloadInfo) error {
|
||||
if !guard(i, len(modifier)) {
|
||||
return nil
|
||||
}
|
||||
|
||||
n, err := strconv.Atoi(args[i+1])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
*entries = (*entries)[0:n]
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func guard(i, len int) bool { return i+1 < len-1 }
|
||||
Reference in New Issue
Block a user