« get me outta code hell

Add --open-playlist-string option - http-music - Command-line music player + utils (not a server!)
about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorFlorrie <towerofnix@gmail.com>2017-10-24 17:33:22 -0300
committerFlorrie <towerofnix@gmail.com>2017-10-24 17:34:52 -0300
commite447c564e9823a32c25aa1c9309c9b13d5225933 (patch)
treea57eeb790830a6ca632bb73718a3d5d4ddbd9356 /src
parent85ecc1b72bd01cb9da684a56126bb9239679d513 (diff)
Add --open-playlist-string option
Lets playlists be passed to `play` by an actual string argument; e.g.
--playlist-string '{"tracks": [...]}'. Could work well with http-music's
own crawler utilities (e.g. --playlist-string
'{"source": ["crawl-local", "."]}' or with external ones (e.g.
--playlist-string "$(cool-crawler-utilith.sh)".

At the moment the only workaround is to use a temporary file to store the
playlist in, or to pipe the output of the crawler command (which might be
`echo`!) to http-music and use /dev/stdin as the --playlist-file value..
which obviously isn't cross-platform or practical!

I'd like to have some aliases in the future since
--open-playlist-string isn't really easy to type.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/play.js22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/play.js b/src/play.js
index 6d4456d..8f52e63 100755
--- a/src/play.js
+++ b/src/play.js
@@ -104,6 +104,9 @@ async function main(args) {
   ]
 
   async function openPlaylist(arg, silent = false) {
+    // Takes a playlist download argument and loads it as the source and
+    // active playlist.
+
     let playlistText
 
     if (!silent) {
@@ -121,7 +124,16 @@ async function main(args) {
       return false
     }
 
-    const openedPlaylist = updatePlaylistFormat(JSON.parse(playlistText))
+    const importedPlaylist = JSON.parse(playlistText)
+
+    await loadPlaylist(importedPlaylist)
+  }
+
+  async function loadPlaylist(importedPlaylist) {
+    // Takes an actual playlist object and sets it up as the source and active
+    // playlist.
+
+    const openedPlaylist = updatePlaylistFormat(importedPlaylist)
 
     // We also want to de-smart-ify (stupidify? - simplify?) the playlist.
     const processedPlaylist = await processSmartPlaylist(openedPlaylist)
@@ -198,6 +210,14 @@ async function main(args) {
     '-open': util => util.alias('-open-playlist'),
     'o': util => util.alias('-open-playlist'),
 
+    '-open-playlist-string': async function(util) {
+      // --open-playlist-string <string>
+      // Opens a playlist, using the given string as the JSON text of the
+      // playlist. This sets the source playlist.
+
+      await loadPlaylist(JSON.parse(util.nextArg()))
+    },
+
     '-write-playlist': function(util) {
       // --write-playlist <file>  (alias: --write, -w, --save)
       // Writes the active playlist to a file. This file can later be used