mpd-api
Version:
MPD api module for Node.js
50 lines (43 loc) • 1.17 kB
JavaScript
const debug = require('../../debug')('mutate:reducer')
const { parseStickerString } = require('./parser')
const getListInfoTarget = item => item.playlist
? 'playlist'
: item.directory
? 'directory'
: 'file'
exports.pickBy = key => list => list.map(item => item[key])
exports.pickFirst = obj => obj[Object.keys(obj)[0]]
exports.dbList = list => list.map(entry => {
if (entry.file && entry.file instanceof Array) {
entry.file = entry.file.map(item => item.file)
}
return entry
})
exports.dbListInfo = list => list.reduce((memo, item) => {
let target = getListInfoTarget(item)
memo[target].push(item)
return memo
}, {
playlist: [],
file: [],
directory: []
})
// exports.dbListInfoFull = list => list.reduce((memo, item) => {
// let target = getListInfoTarget(item)
// memo[target].push(item)
// return memo
// }, {
// playlist: [],
// file: [],
// directory: []
// })
exports.stickerList = stickers => stickers.reduce((acc, entry) => {
let keyval = parseStickerString(entry.sticker)
if (keyval === null) {
debug('ignoring invaid sticker')
return acc
}
acc[keyval.key] = keyval.val
return acc
}, {})