diff options
Diffstat (limited to 'playlist-utils.js')
-rw-r--r-- | playlist-utils.js | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/playlist-utils.js b/playlist-utils.js index 64c1df4..ac6a929 100644 --- a/playlist-utils.js +++ b/playlist-utils.js @@ -6,6 +6,8 @@ const fs = require('fs') const { promisify } = require('util') const unlink = promisify(fs.unlink) +const { shuffleArray } = require('./general-util') + const parentSymbol = Symbol('Parent group') function updatePlaylistFormat(playlist) { @@ -188,6 +190,17 @@ function countTotalItems(grouplike) { }).reduce((a, b) => a + b, 0) } +function shuffleOrderOfGroups(grouplike) { + if (isGroup(grouplike) && grouplike.items.every(isGroup)) { + const items = grouplike.items.map(shuffleOrderOfGroups) + const shuffled = shuffleArray(items) + + return Object.assign({}, grouplike, {items: shuffled}) + } else { + return grouplike + } +} + function collectGrouplikeChildren(grouplike, filter = null) { // Collects all descendants of a grouplike into a single flat array. // Can be passed a filter function, which will decide whether or not to add @@ -506,6 +519,7 @@ module.exports = { cloneGrouplike, filterTracks, flattenGrouplike, countTotalItems, + shuffleOrderOfGroups, partiallyFlattenGrouplike, collapseGrouplike, filterGrouplikeByProperty, filterPlaylistByPathString, filterGrouplikeByPath, |