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)