X-Git-Url: https://njoseph.me/gitweb/nimcoon.git/blobdiff_plain/fe1a5856767d3a6873963b4f66f48296f0aac26b..9e6b85681599066dee4fca75097286e5c823875b:/lib.nim diff --git a/lib.nim b/lib.nim index fc00385..fe9d5c0 100644 --- a/lib.nim +++ b/lib.nim @@ -17,6 +17,8 @@ type 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: @@ -31,20 +33,21 @@ proc getYoutubePage*(searchQuery: string): string = let response = get(client, &"https://www.youtube.com/results?hl=en&search_query={queryParam}") return $response.body -proc extractTitlesAndUrls*(html: string): seq[SearchResult] = - parseHtml(html).findAll("a"). - filter(a => "watch" in a.attrs["href"] and a.attrs.hasKey "title"). - map(a => (a.attrs["title"], "https://www.youtube.com" & a.attrs["href"]))[..(limit-1)] +func extractTitlesAndUrls*(html: string): seq[SearchResult] = + {.noSideEffect.}: + parseHtml(html).findAll("a"). + filter(a => "watch" in a.attrs["href"] and a.attrs.hasKey "title"). + map(a => (a.attrs["title"], "https://www.youtube.com" & a.attrs["href"])) proc presentVideoOptions*(searchResults: seq[SearchResult]) = echo "" 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}) - quit(0) + 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=") @@ -58,6 +61,6 @@ func sanitizeURL*(url: string): string = 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)