import
+ os,
parseopt,
std/[terminal],
strformat,
readLine(stdin)
# This is a pure function with no side effects
- func buildArgs(number: int): seq[string] =
+ func buildPlayerArgs(number: int): seq[string] =
var args = @[searchResults[number].url]
if options["musicOnly"]: args.add("--no-video")
if options["fullScreen"]: args.add("--fullscreen")
return args
+ func buildMusicDownloadArgs(number: int): seq[string] =
+ {.noSideEffect.}:
+ var args = @["--ignore-errors", "-f", "bestaudio", "--extract-audio", "--audio-format", "mp3", "--audio-quality", "0", "-o"]
+ let downloadLocation = &"'{expandTilde(musicDownloadDirectory)}/{searchResults[number].title}.mp3'"
+ args.add(downloadLocation)
+ args.add(searchResults[number].url)
+ return args
+
+ func buildVideoDownloadArgs(number: int): seq[string] =
+ {.noSideEffect.}:
+ var args = @["-f", "best", "-o"]
+ let downloadLocation = &"'{expandTilde(videoDownloadDirectory)}/%(title)s.%(ext)s'"
+ args.add(downloadLocation)
+ args.add(searchResults[number].url)
+ return args
+
+ proc handleUserInput(number: int) =
+ if options["download"]:
+ if options["musicOnly"]:
+ download(buildMusicDownloadArgs(number), searchResults[number].title)
+ else:
+ download(buildVideoDownloadArgs(number), searchResults[number].title)
+ else:
+ play(player, buildPlayerArgs(number), searchResults[number].title)
+
+
while(true):
let userInput = getUserInput()
if userInput == "all":
for number in 0..(len(searchResults)):
- play(player, buildArgs(number), searchResults[number].title)
+ # TODO `spawn` this?
+ handleUserInput(number)
if userInput == "q":
break
# Play the video using the preferred/available media player
let videoNumber = parseInt(userInput)
- play(player, buildArgs(videoNumber), searchResults[videoNumber].title)
+ handleUserInput(videoNumber)
if options["feelingLucky"]:
break