import
config,
- types
+ types,
+ youtube
let
proc handleUserInput(searchResult: SearchResult, options: Table[string, bool], player: string) =
- if options["download"]:
+ if options["autoPlay"]:
+ play(player, options, searchResult.url, searchResult.title)
+ let nextResult = getAutoPlayVideo(searchResult)
+ handleUserInput(nextResult, options, player) # inifinite playlist till user quits
+ elif options["download"]:
if options["musicOnly"]:
download(buildMusicDownloadArgs(searchResult.url), searchResult.title)
else:
proc isValidOptions*(options: Options): bool =
# Check for invalid combinations of options
- var invalidCombinations = [("musicOnly", "fullScreen"), ("download", "fullScreen")]
+ var invalidCombinations = [("musicOnly", "fullScreen"), ("download", "fullScreen"), ("download", "autoPlay")]
result = true
for combination in invalidCombinations:
if options[combination[0]] and options[combination[1]]:
stderr.writeLine fmt"Incompatible options provided: {combination[0]} and {combination[1]}"
result = false
+ # TODO Make this overridable in configuration
+ if options["autoPlay"] and not options["musicOnly"]:
+ stderr.writeLine "--music-only must be provided with --auto-play. This is to prevent binge-watching."
+ result = false
proc updateOptions(options: Options, newOptions: string): Options =
result = options
+ # Interactive options
for option in newOptions:
case option
of 'm': result["musicOnly"] = true
of 'f': result["fullScreen"] = true
of 'd': result["download"] = true
+ of 'a': result["autoPlay"] = true
else:
- echo "Invalid option provided!"
+ stderr.writeLine "Invalid option provided!"
quit(2)
if(not isValidOptions(result)):