61 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const store = require('./store')
 | 
						|
const m3u = require('./m3u')
 | 
						|
const _ = require('lodash')
 | 
						|
 | 
						|
const playlist = {}
 | 
						|
 | 
						|
class Playlist {
 | 
						|
  constructor(items = [], options = {}) {
 | 
						|
    this.header = {}
 | 
						|
    if (options.public) {
 | 
						|
      let guides = items
 | 
						|
        .map(item => (item.guides.length ? item.guides[0].url : null))
 | 
						|
        .filter(i => i)
 | 
						|
      this.header['x-tvg-url'] = _.uniq(guides).sort().join(',')
 | 
						|
    }
 | 
						|
 | 
						|
    this.links = []
 | 
						|
    for (const item of items) {
 | 
						|
      const stream = store.create(item)
 | 
						|
 | 
						|
      let attrs
 | 
						|
      if (options.public) {
 | 
						|
        attrs = {
 | 
						|
          'tvg-id': stream.get('tvg_id'),
 | 
						|
          'tvg-logo': stream.get('tvg_logo'),
 | 
						|
          'group-title': stream.get('group_title'),
 | 
						|
          'user-agent': stream.get('user_agent') || undefined
 | 
						|
        }
 | 
						|
      } else {
 | 
						|
        attrs = {
 | 
						|
          'tvg-id': stream.get('tvg_id'),
 | 
						|
          status: stream.get('status'),
 | 
						|
          'user-agent': stream.get('user_agent') || undefined
 | 
						|
        }
 | 
						|
      }
 | 
						|
 | 
						|
      const vlcOpts = {
 | 
						|
        'http-referrer': stream.get('http_referrer') || undefined,
 | 
						|
        'http-user-agent': stream.get('user_agent') || undefined
 | 
						|
      }
 | 
						|
 | 
						|
      this.links.push({
 | 
						|
        url: stream.get('url'),
 | 
						|
        title: stream.get('title'),
 | 
						|
        attrs,
 | 
						|
        vlcOpts
 | 
						|
      })
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  toString() {
 | 
						|
    return m3u.create(this.links, this.header)
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
playlist.create = function (items, options) {
 | 
						|
  return new Playlist(items, options)
 | 
						|
}
 | 
						|
 | 
						|
module.exports = playlist
 |