]> njoseph.me Git - nimcoon.git/blobdiff - clitube.nim
Add a fullScreen option
[nimcoon.git] / clitube.nim
index b15d5a9a47756692adf75feb416a4e5efee5c019..f69813dbf4566702e67cacd161e6ca545e80e026 100644 (file)
@@ -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()