const api = require('../core/api') const _ = require('lodash') module.exports = async function (streams = []) { streams = _.filter(streams, stream => stream.is_nsfw === false) await api.regions.load() let regions = await api.regions.all() regions = _.keyBy(regions, 'code') let items = [] streams.forEach(stream => { if (!stream.broadcast_area.length) { const item = _.cloneDeep(stream) item.group_title = 'Undefined' items.push(item) return } getChannelRegions(stream, { regions }).forEach(region => { const item = _.cloneDeep(stream) item.group_title = region.name items.push(item) }) }) items = _.sortBy(items, i => { if (i.group_title === 'Undefined') return '' return i.group_title }) return { filepath: 'index.region.m3u', items } } function getChannelRegions(stream, { regions }) { return stream.broadcast_area .reduce((acc, item) => { const [type, code] = item.split('/') switch (type) { case 'r': acc.push(regions[code]) break case 's': const [c] = code.split('-') const r1 = _.filter(regions, { countries: [c] }) acc = acc.concat(r1) break case 'c': const r2 = _.filter(regions, { countries: [code] }) acc = acc.concat(r2) break } return acc }, []) .filter(i => i) }