supported modifiers are --playlist-start, --playlist-end, --playlist-reverse, --max-downloads
87 lines
1.8 KiB
Go
87 lines
1.8 KiB
Go
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 }
|