@ -1,22 +1,19 @@
const { create : createPlaylist } = require ( '../core/playlist' )
const { db , logger , generator , file , api } = require ( '../core' )
const { db , generator , api } = require ( '../core' )
const _ = require ( 'lodash' )
async function main ( ) {
const streams = await loadStreams ( )
// console.log(streams)
await generator . generate ( 'categories' , streams )
await generator . generate ( 'countries' , streams )
await generator . generate ( 'languages' , streams )
await generator . generate ( 'regions' , streams )
await generator . generate ( 'index_m3u' , streams )
await generator . generate ( 'index_nsfw_m3u' , streams )
await generator . generate ( 'index_category_m3u' , streams )
await generator . generate ( 'index_country_m3u' , streams )
// await generateIndexCountry()
// await generateIndexLanguage()
// await generateIndexRegion()
await generator . generate ( 'index_language_m3u' , streams )
await generator . generate ( 'index_m3u' , streams )
await generator . generate ( 'index_nsfw_m3u' , streams )
await generator . generate ( 'index_region_m3u' , streams )
}
main ( )
@ -38,6 +35,10 @@ async function loadStreams() {
let languages = await api . languages . all ( )
languages = _ . keyBy ( languages , 'code' )
await api . regions . load ( )
let regions = await api . regions . all ( )
regions = _ . keyBy ( regions , 'code' )
await api . guides . load ( )
let guides = await api . guides . all ( )
guides = _ . groupBy ( guides , 'channel' )
@ -54,6 +55,26 @@ async function loadStreams() {
const [ _ , code ] = item . split ( '/' )
return code
} )
stream . regions = channel . broadcast _area
. reduce ( ( acc , item ) => {
const [ type , code ] = item . split ( '/' )
switch ( type ) {
case 'r' :
acc . push ( regions [ code ] )
break
case 's' :
const [ c ] = item . 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 )
stream . categories = channel . categories . map ( id => categories [ id ] )
stream . languages = channel . languages . map ( code => languages [ code ] )
stream . guides = guides [ stream . channel _id ] ? guides [ stream . channel _id ] . map ( g => g . url ) : [ ]
@ -61,90 +82,10 @@ async function loadStreams() {
stream . broadcast _area = [ ]
stream . categories = [ ]
stream . languages = [ ]
stream . regions = [ ]
stream . guides = [ ]
}
return stream
} )
}
// async function generateIndexLanguage() {
// logger.info(`Generating index.language.m3u...`)
// await generator.generate(
// `${PUBLIC_PATH}/index.language.m3u`,
// {},
// {
// onLoad: function (items) {
// let results = items
// .filter(item => !item.languages || !item.languages.length)
// .map(item => {
// const newItem = _.cloneDeep(item)
// newItem.group_title = 'Undefined'
// newItem.categories = []
// return newItem
// })
// for (const language of languages) {
// let filtered = items
// .filter(item => {
// return (
// Array.isArray(item.languages) &&
// item.languages.map(c => c.code).includes(language.code)
// )
// })
// .map(item => {
// const newItem = _.cloneDeep(item)
// newItem.group_title = language.name
// return newItem
// })
// results = results.concat(filtered)
// }
// return results
// },
// sortBy: item => {
// if (item.group_title === 'Undefined') return '_'
// return item.group_title
// }
// }
// )
// }
// async function generateIndexRegion() {
// logger.info(`Generating index.region.m3u...`)
// await generator.generate(
// `${PUBLIC_PATH}/index.region.m3u`,
// {},
// {
// onLoad: function (items) {
// let results = items
// .filter(item => !item.regions.length)
// .map(item => {
// const newItem = _.cloneDeep(item)
// newItem.group_title = 'Undefined'
// newItem.categories = []
// return newItem
// })
// for (const region of regions) {
// let filtered = items
// .filter(item => {
// return item.regions.map(c => c.code).includes(region.code)
// })
// .map(item => {
// const newItem = _.cloneDeep(item)
// newItem.group_title = region.name
// return newItem
// })
// results = results.concat(filtered)
// }
// return results
// },
// sortBy: item => {
// if (item.group_title === 'Undefined') return '_'
// return item.group_title
// }
// }
// )
// }