X-Git-Url: http://njoseph.me/gitweb/nimcoon.git/blobdiff_plain/3b2781aa21ac6a1c30883af80e22ad4cd14715c2..26229fac9c93a427a85e86b899ed54639116de9a:/src/lib.nim diff --git a/src/lib.nim b/src/lib.nim index 0f6ae15..16082c5 100644 --- a/src/lib.nim +++ b/src/lib.nim @@ -1,5 +1,4 @@ import - htmlparser, httpClient, json, os, @@ -8,22 +7,12 @@ import sequtils, std/[terminal], strformat, - strtabs, strutils, - sugar, - tables, - uri, - xmltree + tables -import config - - -type - Options* = Table[string, bool] - SearchResult* = tuple[title: string, url: string] - SearchResults* = seq[tuple[title: string, url: string]] - CommandLineOptions* = tuple[searchQuery: string, options: Options] - SelectionRange* = tuple[begin: int, until: int] +import + config, + types let @@ -44,13 +33,6 @@ proc selectMediaPlayer*(): string = return availablePlayers[0] -proc getYoutubePage*(searchQuery: string): string = - let queryParam = encodeUrl(searchQuery) - let client = newHttpClient() - let response = get(client, &"https://invidious.snopyta.org/search?q={queryParam}") - $response.body - - proc getPeerTubeMagnetLink(url: string): string = ## Gets the magnet link of the best possible resolution from PeerTube let uuid = url.substr(find(url, PEERTUBE_REGEX) + "videos/watch/".len) @@ -62,32 +44,12 @@ proc getPeerTubeMagnetLink(url: string): string = jsonNode["files"][0]["magnetUri"].getStr() -func extractTitlesAndUrls*(html: string): SearchResults = - {.noSideEffect.}: - # TODO Pick an invidious instance from config. Using YouTube directly for now. - parseHtml(html).findAll("a"). - filter(a => "watch" in a.attrs["href"] and len(a) == 1). - map(a => (innerText(a), "https://www.youtube.com" & a.attrs["href"])) - - proc presentVideoOptions*(searchResults: SearchResults) = eraseScreen() for index, (title, url) in searchResults: styledEcho $index, ". ", styleBright, fgMagenta, title, "\n", resetStyle, fgCyan, " ", url, "\n" - -func isPlaylist(url: string): bool = - ##[ Identifies if video is part of a playlist. - Only YouTube playlists are supported for now. ]## - "www.youtube.com" in url and "&list=" in url - - func buildPlayerArgs(url: string, options: Table[string, bool], player: string): seq[string] = - let url = - # Playlists are only supported by MPV player. VLC needs a plugin. - if isPlaylist(url) and player == "mpv": - "https://www.youtube.com/playlist?" & url.split('&')[1] - else: url let musicOnly = if options["musicOnly"]: "--no-video" else: "" let fullScreen = if options["fullScreen"]: "--fullscreen" else: "" filterIt([url, musicOnly, fullScreen], it != "") @@ -100,7 +62,7 @@ proc play*(player: string, options: Table[string, bool], url: string, title: str if "--no-video" in args: discard execShellCmd(&"{player} {args.join(\" \")}") else: - discard execProcess(player, args=args, options=processOptions) + discard startProcess(player, args=args, options=processOptions) func buildMusicDownloadArgs(url: string): seq[string] =