« get me outta code hell

mtui - Music Text User Interface - user-friendly command line music player
about summary refs log tree commit diff
path: root/playlist-utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'playlist-utils.js')
-rw-r--r--playlist-utils.js14
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,