Create Playlist.js
This commit is contained in:
		
							
								
								
									
										44
									
								
								scripts/helpers/Playlist.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								scripts/helpers/Playlist.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | |||||||
|  | const Channel = require('./Channel') | ||||||
|  | const file = require('./file') | ||||||
|  |  | ||||||
|  | module.exports = class Playlist { | ||||||
|  |   constructor({ header, items, url, name, country }) { | ||||||
|  |     this.url = url | ||||||
|  |     this.name = name | ||||||
|  |     this.country = country | ||||||
|  |     this.header = header | ||||||
|  |     this.channels = items | ||||||
|  |       .map(item => new Channel({ data: item, header, sourceUrl: url })) | ||||||
|  |       .filter(channel => channel.url) | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   toString(options = {}) { | ||||||
|  |     const config = { raw: false, ...options } | ||||||
|  |     let parts = ['#EXTM3U'] | ||||||
|  |     for (let key in this.header.attrs) { | ||||||
|  |       let value = this.header.attrs[key] | ||||||
|  |       if (value) { | ||||||
|  |         parts.push(`${key}="${value}"`) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     let output = `${parts.join(' ')}\n` | ||||||
|  |     for (let channel of this.channels) { | ||||||
|  |       output += channel.toString(config.raw) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return output | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   save() { | ||||||
|  |     const original = file.read(this.url) | ||||||
|  |     const output = this.toString({ raw: true }) | ||||||
|  |     if (original === output) { | ||||||
|  |       return false | ||||||
|  |     } else { | ||||||
|  |       file.create(this.url, output) | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return true | ||||||
|  |   } | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user