proc play*(player: string, args: openArray[string]) =
# poEchoCmd can be added to options for debugging
discard execProcess(player, args=args, options={poStdErrToStdOut, poUsePath})
- quit(0)
func urlLongen(url: string): string =
url.replace("youtu.be/", "www.youtube.com/watch?v=")
return (searchQuery, musicOnly, feelingLucky, fullScreen)
+
proc main() =
let
player = selectMediaPlayer()
let searchResults = extractTitlesAndUrls(getYoutubePage(searchQuery))
- let number =
- if feelingLucky: 0
+ proc getUserInput(): string =
+ if feelingLucky: "0"
else:
presentVideoOptions(searchResults)
stdout.styledWrite(fgYellow, "Choose video number: ")
- parseInt(readLine(stdin))
-
- styledEcho "\n", fgGreen, "Playing ", styleBright, fgMagenta, searchResults[number].title
+ readLine(stdin)
# This is a pure function with no side effects
- func buildArgs(): seq[string] =
+ func buildArgs(number: int): seq[string] =
var args = @[searchResults[number].url]
if musicOnly: args.add("--no-video")
if fullScreen: args.add("--fullscreen")
return args
- # Play the video using the preferred/available media player
- play(player, buildArgs())
+ while(true):
+ let userInput = getUserInput()
+ if userInput == "q":
+ break
+
+ let videoNumber = parseInt(userInput)
+ styledEcho "\n", fgGreen, "Playing ", styleBright, fgMagenta, searchResults[videoNumber].title
+
+ # Play the video using the preferred/available media player
+ play(player, buildArgs(videoNumber))
+ if feelingLucky:
+ break
+
when isMainModule:
main()