+import htmlparser
+import httpClient
+import os
+import osproc
+import strtabs
+import strutils
+import uri
+import xmltree
+import sequtils, sugar
+
+# TODO Pretty colors in terminal
+# import terminal
+
+# Supported video players in order of preference
+# TODO Should go into a config file
+let supported_players = @["mpv", "mplayer", "vlc"]
+
+proc find_supported_player(): string =
+ for player in supported_players:
+ let player_bin = execProcess("which " & player)
+ if player_bin.len != 0:
+ return strip(player_bin)
+
+proc get_youtube_page(search_query: string): string =
+ let query_param = encodeUrl(search_query)
+ var client = newHttpClient()
+ let response = get(client, "https://www.youtube.com/results?hl=en&search_query=" & query_param)
+ # TODO Get rid of temp file or make one temp file per user
+ writeFile("/tmp/cli-tube-page.html", response.body)
+ return "/tmp/cli-tube-page.html"
+
+proc extract_titles_and_urls(html_file: string): seq[tuple[title: string, url: string]] =
+ loadHtml(html_file).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 present_video_options(titles_and_urls: seq[tuple[title: string, url: string]]) =
+ for number, (title, url) in titles_and_urls:
+ echo number, ". ", title, "\n", url, "\n"
+
+present_video_options(
+ extract_titles_and_urls(
+ get_youtube_page(
+ paramStr(1))))