]> njoseph.me Git - nimcoon.git/blobdiff - src/nimcoon.nim
Add option to download video
[nimcoon.git] / src / nimcoon.nim
index 2143c12ad6c9d990e15e379b65dd701fc5e32098..2ddafc94d4384968048b25f2665ea83eb7d413bd 100644 (file)
@@ -1,4 +1,5 @@
 import
+  os,
   parseopt,
   std/[terminal],
   strformat,
@@ -61,25 +62,52 @@ proc main() =
       readLine(stdin)
 
   # This is a pure function with no side effects
-  func buildArgs(number: int): seq[string] =
+  func buildPlayerArgs(number: int): seq[string] =
     var args = @[searchResults[number].url]
     if options["musicOnly"]: args.add("--no-video")
     if options["fullScreen"]: args.add("--fullscreen")
     return args
 
+  func buildMusicDownloadArgs(number: int): seq[string] =
+    {.noSideEffect.}:
+      var args = @["--ignore-errors", "-f", "bestaudio", "--extract-audio", "--audio-format", "mp3", "--audio-quality", "0", "-o"]
+      let downloadLocation = &"'{expandTilde(musicDownloadDirectory)}/{searchResults[number].title}.mp3'"
+      args.add(downloadLocation)
+      args.add(searchResults[number].url)
+      return args
+
+  func buildVideoDownloadArgs(number: int): seq[string] =
+    {.noSideEffect.}:
+      var args = @["-f", "best", "-o"]
+      let downloadLocation = &"'{expandTilde(videoDownloadDirectory)}/%(title)s.%(ext)s'"
+      args.add(downloadLocation)
+      args.add(searchResults[number].url)
+      return args
+
+  proc handleUserInput(number: int) =
+    if options["download"]:
+      if options["musicOnly"]:
+        download(buildMusicDownloadArgs(number), searchResults[number].title)
+      else:
+        download(buildVideoDownloadArgs(number), searchResults[number].title)
+    else:
+      play(player, buildPlayerArgs(number), searchResults[number].title)
+
+
   while(true):
     let userInput = getUserInput()
 
     if userInput == "all":
       for number in 0..(len(searchResults)):
-        play(player, buildArgs(number), searchResults[number].title)
+        # TODO `spawn` this?
+        handleUserInput(number)
 
     if userInput == "q":
       break
 
     # Play the video using the preferred/available media player
     let videoNumber = parseInt(userInput)
-    play(player, buildArgs(videoNumber), searchResults[videoNumber].title)
+    handleUserInput(videoNumber)
     if options["feelingLucky"]:
       break