« get me outta code hell

Let downloader be specified manually, per-track (e.g. use youtube-dl for non-YT links) - http-music - Command-line music player + utils (not a server!)
about summary refs log tree commit diff
path: root/src/loop-play.js
diff options
context:
space:
mode:
authorliam4 <towerofnix@gmail.com>2017-07-26 12:43:44 -0300
committerliam4 <towerofnix@gmail.com>2017-07-26 12:43:44 -0300
commit07c9f7622567d822670c1021280c4dba4d161794 (patch)
tree197d1c394f266ba9f5d1fe02123acd932afb6873 /src/loop-play.js
parent943b3447c7dc6743ec7c6d1c644f2eb9cc4669cb (diff)
Let downloader be specified manually, per-track (e.g. use youtube-dl for non-YT links)
Diffstat (limited to 'src/loop-play.js')
-rw-r--r--src/loop-play.js22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/loop-play.js b/src/loop-play.js
index b0bb4dd..9328073 100644
--- a/src/loop-play.js
+++ b/src/loop-play.js
@@ -5,7 +5,10 @@
 const { spawn } = require('child_process')
 const FIFO = require('fifo-js')
 const EventEmitter = require('events')
-const { getDownloaderFor, makeConverterDownloader } = require('./downloaders')
+const {
+  getDownloaderFor, makeConverterDownloader,
+  byName: downloadersByName
+} = require('./downloaders')
 const { getItemPathString } = require('./playlist-utils')
 const promisifyProcess = require('./promisify-process')
 
@@ -114,7 +117,22 @@ class PlayController {
     if (picked === null) {
       return null
     } else {
-      let downloader = getDownloaderFor(picked.downloaderArg)
+      let downloader
+
+      if (picked.downloader) {
+        downloader = downloadersByName[picked.downloader]()
+
+        if (!downloader) {
+          console.error(
+            `Invalid downloader for track ${picked.name}:`, downloader
+          )
+
+          return false
+        }
+      } else {
+        downloader = getDownloaderFor(picked.downloaderArg)
+      }
+
       downloader = makeConverterDownloader(downloader, 'wav')
       this.downloadController.download(downloader, picked.downloaderArg)
       return picked