58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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)
 | 
						|
}
 |