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