From 6c972c977d8028b310314f2bc409fe4352fa9fbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wo=C5=BAniak?= Date: Tue, 29 Oct 2019 21:46:53 +0100 Subject: [PATCH] Fix for simple m3u playlists parsing --- modules/file-explorer.js | 14 ++++++++++---- package.json | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/modules/file-explorer.js b/modules/file-explorer.js index f8905ab..3895340 100644 --- a/modules/file-explorer.js +++ b/modules/file-explorer.js @@ -4,7 +4,7 @@ const fe = require("path"); const archiver = require('archiver'); const winston = require('winston'); const mkdirp = require('make-dir'); -const m3uread = require('m3u8-reader'); +const m3u8Parser = require('m3u8-parser'); const masterFileTypesArray = ["mp3", "flac", "wav", "ogg", "aac", "m4a", "opus", "m3u"]; @@ -26,9 +26,15 @@ exports.setup = function(mstream, program) { } function readPlaylistSongs(pathString) { - return m3uread(fs.readFileSync(pathString)) - .filter(function (item) { return typeof item === "string" }) - .map(function (item) { return item.replace(/\\/g, fe.sep) }) // m3u path separated by \ + const parser = new m3u8Parser.Parser(); + const fileContents = fs.readFileSync(pathString).toString(); + parser.push(fileContents); + parser.end(); + let items = parser.manifest.segments.map(function (segment) { return segment.uri; }); + if (items.length == 0) { + items = fileContents.split(/\r?\n/).filter(Boolean); + } + return items.map(function (item) { return item.replace(/\\/g, "/"); }); } function handleError(error, res) { diff --git a/package.json b/package.json index 128ab2b..aeb6391 100644 --- a/package.json +++ b/package.json @@ -89,7 +89,7 @@ "inquirer-select-directory": "^1.2.0", "jsonwebtoken": "^8.5.1", "lokijs": "^1.5.7", - "m3u8-reader": "^1.1.0", + "m3u8-parser": "^4.4.0", "make-dir": "^3.0.0", "mime-types": "^2.1.24", "music-metadata": "^4.8.2",