X-Git-Url: https://njoseph.me/gitweb/nimcoon.git/blobdiff_plain/121e06b2f5cb4a48cd9190d4a6b88ca756512d6d..d1e4d2de5ba2f22339ee543da977e8941e84bc9e:/clitube.nim diff --git a/clitube.nim b/clitube.nim index b15d5a9..f69813d 100644 --- a/clitube.nim +++ b/clitube.nim @@ -1,6 +1,7 @@ import htmlparser, httpClient, + logging, parseopt, osproc, sequtils, @@ -16,7 +17,10 @@ import preferences type SearchResult = tuple[title: string, url: string] - CommandLineOptions = tuple[searchQuery: string, musicOnly: bool, feelingLucky: bool] + CommandLineOptions = tuple[searchQuery: string, musicOnly: bool, feelingLucky: bool, fullScreen: bool] + +let logger = newConsoleLogger() +setLogFilter(lvlInfo) proc selectMediaPlayer(): string = let availablePlayers = filterIt(supportedPlayers, execProcess("which " & it).len != 0) @@ -31,6 +35,7 @@ proc parseOptions(): CommandLineOptions = searchQuery = "" musicOnly = false feelingLucky = false + fullScreen = false for kind, key, value in getopt(): case kind @@ -40,10 +45,11 @@ proc parseOptions(): CommandLineOptions = case key of "m", "music": musicOnly = true of "l", "lucky": feelingLucky = true + of "f", "full-screen": fullScreen = true of cmdEnd: discard - return (searchQuery, musicOnly, feelingLucky) + return (searchQuery, musicOnly, feelingLucky, fullScreen) proc getYoutubePage(searchQuery: string): string = let queryParam = encodeUrl(searchQuery) @@ -61,21 +67,24 @@ proc presentVideoOptions(searchResults: seq[SearchResult]) = for index, (title, url) in searchResults: styledEcho $index, ". ", styleBright, fgMagenta, title, "\n", resetStyle, fgCyan, url, "\n" +proc play(command: string) = + logger.log(lvlDebug, &"Executing: ${command}") + discard execProcess(command) + quit(0) + proc directPlay(searchQuery: string, player: string) = - styledEcho "\n", fgGreen, "Playing ", styleBright, fgMagenta, searchQuery if "watch?" in searchQuery or "videos/watch" in searchQuery : - discard execProcess(&"{player} {searchQuery}") - quit(0) + play(&"{player} {searchQuery}") elif searchQuery.startswith("magnet:"): - discard execProcess(&"peerflix \"{searchQuery}\" --{player}") - quit(0) + play(&"peerflix \"{searchQuery}\" --{player}") proc main() = let player = selectMediaPlayer() - (searchQuery, musicOnly, feelingLucky) = parseOptions() + (searchQuery, musicOnly, feelingLucky, fullScreen) = parseOptions() - directPlay(searchQuery, player) + if searchQuery.startswith("https:") or searchQuery.startswith("magnet:"): + directPlay(searchQuery, player) let searchResults = extractTitlesAndUrls(getYoutubePage(searchQuery)) @@ -93,7 +102,13 @@ proc main() = if musicOnly: command.add("--no-video") + if fullScreen: + if player == "cvlc": + command.add("--fullscreen") + if player == "mpv": + command.add("--fs") + # Play the video using the preferred/available media player - discard execProcess(command.join(" ")) + play(command.join(" ")) main()