SearchResult* = tuple[title: string, url: string]
CommandLineOptions* = tuple[searchQuery: string, musicOnly: bool, feelingLucky: bool, fullScreen: bool]
+let processOptions = {poStdErrToStdOut, poUsePath}
+
proc selectMediaPlayer*(): string =
let availablePlayers = filterIt(supportedPlayers, execProcess("which " & it).len != 0)
if len(availablePlayers) == 0:
for index, (title, url) in searchResults:
styledEcho $index, ". ", styleBright, fgMagenta, title, "\n", resetStyle, fgCyan, url, "\n"
-proc play*(player: string, args: openArray[string]) =
+proc play*(player: string, args: openArray[string], title: string) =
# poEchoCmd can be added to options for debugging
- discard execProcess(player, args=args, options={poStdErrToStdOut, poUsePath})
+ styledEcho "\n", fgGreen, "Playing ", styleBright, fgMagenta, title
+ discard execProcess(player, args=args, options=processOptions)
func urlLongen(url: string): string =
url.replace("youtu.be/", "www.youtube.com/watch?v=")
proc directPlay*(searchQuery: string, player: string) =
let url = sanitizeURL(searchQuery)
if searchQuery.startswith("magnet:"):
- play("peerflix", args=[url, &"--{player}"])
+ discard execProcess("peerflix", args=[url, &"--{player}"], options=processOptions)
else:
- play(player, args=[url])
+ discard execProcess("peerflix", args=[url], options=processOptions)
if searchQuery.startswith("https:") or searchQuery.startswith("magnet:"):
directPlay(searchQuery, player)
+ quit(0)
let searchResults = extractTitlesAndUrls(getYoutubePage(searchQuery))
if userInput == "all":
for number in 0..(len(searchResults)):
- play(player, buildArgs(number))
+ play(player, buildArgs(number), searchResults[number].title)
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))
+ let videoNumber = parseInt(userInput)
+ play(player, buildArgs(videoNumber), searchResults[videoNumber].title)
if feelingLucky:
break