wip
This commit is contained in:
		
							parent
							
								
									b56b7bdfc6
								
							
						
					
					
						commit
						748d805be6
					
				| 
						 | 
				
			
			@ -4,15 +4,16 @@ const { toArray, toUnix, parseNumber } = require('./utils')
 | 
			
		|||
class Program {
 | 
			
		||||
	constructor(p) {
 | 
			
		||||
		const data = {
 | 
			
		||||
			channel: p.channel,
 | 
			
		||||
			title: p.title,
 | 
			
		||||
			site: p.site || '',
 | 
			
		||||
			channel: p.channel || '',
 | 
			
		||||
			title: p.title || '',
 | 
			
		||||
			sub_title: p.sub_title || '',
 | 
			
		||||
			description: [p.description, p.desc, ''].find(i => i !== undefined),
 | 
			
		||||
			description: [p.description, p.desc].find(i => i) || '',
 | 
			
		||||
			icon: toIconObject(p.icon),
 | 
			
		||||
			episodeNumbers: getEpisodeNumbers(p.season, p.episode),
 | 
			
		||||
			episodeNumbers: p.episodeNumbers || getEpisodeNumbers(p.season, p.episode),
 | 
			
		||||
			date: p.date ? toUnix(p.date) : null,
 | 
			
		||||
			start: toUnix(p.start),
 | 
			
		||||
			stop: toUnix(p.stop),
 | 
			
		||||
			start: p.start ? toUnix(p.start) : null,
 | 
			
		||||
			stop: p.stop ? toUnix(p.stop) : null,
 | 
			
		||||
			urls: toArray(p.urls || p.url).map(toUrlObject),
 | 
			
		||||
			ratings: toArray(p.ratings || p.rating).map(toRatingObject),
 | 
			
		||||
			categories: toArray(p.categories || p.category),
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +85,8 @@ function toUrlObject(url) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
function toIconObject(icon) {
 | 
			
		||||
	if (!icon || typeof icon === 'string') return { src: icon }
 | 
			
		||||
	if (!icon) return { src: '' }
 | 
			
		||||
	if (typeof icon === 'string') return { src: icon }
 | 
			
		||||
 | 
			
		||||
	return {
 | 
			
		||||
		src: icon.src || ''
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,9 +4,13 @@ const { parseChannels, parsePrograms } = require('./parser')
 | 
			
		|||
const { generate: generateXMLTV } = require('./xmltv')
 | 
			
		||||
const { load: loadConfig } = require('./config')
 | 
			
		||||
const { sleep, isPromise } = require('./utils')
 | 
			
		||||
const Channel = require('./Channel')
 | 
			
		||||
const Program = require('./Program')
 | 
			
		||||
 | 
			
		||||
module.exports.generateXMLTV = generateXMLTV
 | 
			
		||||
module.exports.parseChannels = parseChannels
 | 
			
		||||
module.exports.Channel = Channel
 | 
			
		||||
module.exports.Program = Program
 | 
			
		||||
 | 
			
		||||
class EPGGrabber {
 | 
			
		||||
  constructor(config = {}) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -44,6 +44,7 @@ async function parsePrograms(data) {
 | 
			
		|||
  return programs
 | 
			
		||||
    .filter(i => i)
 | 
			
		||||
    .map(p => {
 | 
			
		||||
      p.site = channel.site
 | 
			
		||||
      p.channel = p.channel || channel.id
 | 
			
		||||
 | 
			
		||||
      return new Program(p)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,11 +12,16 @@ module.exports.parseNumber = parseNumber
 | 
			
		|||
module.exports.formatDate = formatDate
 | 
			
		||||
module.exports.toArray = toArray
 | 
			
		||||
module.exports.toUnix = toUnix
 | 
			
		||||
module.exports.isDate = isDate
 | 
			
		||||
 | 
			
		||||
function sleep(ms) {
 | 
			
		||||
  return new Promise(resolve => setTimeout(resolve, ms))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function isDate(d) {
 | 
			
		||||
  return dayjs(d).isValid()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function isObject(a) {
 | 
			
		||||
  return !!a && a.constructor === Object
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										16
									
								
								src/xmltv.js
								
								
								
								
							
							
						
						
									
										16
									
								
								src/xmltv.js
								
								
								
								
							| 
						 | 
				
			
			@ -1,9 +1,23 @@
 | 
			
		|||
const { escapeString, getUTCDate, formatDate } = require('./utils')
 | 
			
		||||
const Channel = require('./Channel')
 | 
			
		||||
const Program = require('./Program')
 | 
			
		||||
const { escapeString, getUTCDate, formatDate, isDate } = require('./utils')
 | 
			
		||||
const el = createElement
 | 
			
		||||
 | 
			
		||||
module.exports.generate = generate
 | 
			
		||||
 | 
			
		||||
function generate({ channels, programs, date = getUTCDate() }) {
 | 
			
		||||
	if (!channels.every(c => c instanceof Channel)) {
 | 
			
		||||
		throw new Error('"channels" must be an array of Channels')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!programs.every(p => p instanceof Program)) {
 | 
			
		||||
		throw new Error('"programs" must be an array of Programs')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!isDate(date)) {
 | 
			
		||||
		throw new Error('"date" must be a valid date')
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	let output = `<?xml version="1.0" encoding="UTF-8" ?>`
 | 
			
		||||
	output += createElements(channels, programs, date)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,11 @@
 | 
			
		|||
import Channel from '../src/Channel'
 | 
			
		||||
import Program from '../src/Program'
 | 
			
		||||
 | 
			
		||||
const channel = new Channel({ xmltv_id: '1tv', lang: 'en' })
 | 
			
		||||
const channel = new Channel({ xmltv_id: '1tv', lang: 'en', site: 'example.com' })
 | 
			
		||||
 | 
			
		||||
it('can create new Program', () => {
 | 
			
		||||
  const program = new Program({
 | 
			
		||||
    site: channel.site,
 | 
			
		||||
    channel: channel.id,
 | 
			
		||||
    title: 'Title',
 | 
			
		||||
    sub_title: 'Subtitle',
 | 
			
		||||
| 
						 | 
				
			
			@ -48,6 +49,7 @@ it('can create new Program', () => {
 | 
			
		|||
  })
 | 
			
		||||
 | 
			
		||||
  expect(program).toMatchObject({
 | 
			
		||||
    site: 'example.com',
 | 
			
		||||
    channel: '1tv',
 | 
			
		||||
    title: 'Title',
 | 
			
		||||
    sub_title: 'Subtitle',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue