133 lines
3.2 KiB
JavaScript
133 lines
3.2 KiB
JavaScript
|
"use-strict";
|
||
|
const { objSerialize, objBulkSet } = require("./util.js")
|
||
|
const { RadioMetadata } = require("./RadioMetadata.js")
|
||
|
const { RadioMiscInfo } = require("./RadioMiscInfo.js")
|
||
|
|
||
|
/**
|
||
|
* @public
|
||
|
* @constructor
|
||
|
* @params {string} id
|
||
|
* @returns {RadioItem}
|
||
|
*/
|
||
|
const RadioItem = function (id, miscInfo) {
|
||
|
this.id = id
|
||
|
this.metadata = undefined
|
||
|
this.info = undefined
|
||
|
this.misc = miscInfo || undefined
|
||
|
this.tags = undefined
|
||
|
this.sources = []
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @public
|
||
|
* @params {string} id
|
||
|
* @returns {RadioItem}
|
||
|
*/
|
||
|
RadioItem.new = id => new RadioItem(id)
|
||
|
|
||
|
/**
|
||
|
* @public
|
||
|
* @params {string|undefined} title
|
||
|
* @params {string|undefined} artist
|
||
|
* @params {URL|string|undefined} [href] href
|
||
|
* @params {string} [extra] extra Playback effects. i.e: Pitch, speed
|
||
|
* @returns {RadioItem}
|
||
|
*/
|
||
|
RadioItem.prototype.setMetadata = function (title, artist, href, extra) {
|
||
|
if (!this.metadata)
|
||
|
this.metadata = RadioMetadata.new()
|
||
|
objBulkSet(this, "metadata", { title, artist, href, extra });
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @public
|
||
|
* @params {RadioMetadata} metadata
|
||
|
* @returns {RadioItem}
|
||
|
*/
|
||
|
RadioItem.prototype.addItemInfo = function (metadata) {
|
||
|
if (!this.info)
|
||
|
this.info = []
|
||
|
this.info.push(metadata)
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @public
|
||
|
* @params {RadioMiscInfo} miscInfo
|
||
|
* @returns {RadioItem}
|
||
|
*/
|
||
|
RadioItem.prototype.setMiscInfo = function (miscInfo) {
|
||
|
this.misc = miscInfo
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @public
|
||
|
* @returns {RadioItem}
|
||
|
*/
|
||
|
RadioItem.prototype.hoistMiscInfo = function () {
|
||
|
return this.misc ? this.misc : this.misc = RadioMiscInfo.new()
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @public
|
||
|
* @params {string[]} tags
|
||
|
* @returns {RadioItem}
|
||
|
*/
|
||
|
RadioItem.prototype.addTags = function (tags) { this.tags = this.tags ? [ ...(this.tags), ...tags ] : tags; return this }
|
||
|
|
||
|
/**
|
||
|
* Alias for addTags; prefixes all items with "radio-media-style-"
|
||
|
* @public
|
||
|
* @params {string[]} tags
|
||
|
* @returns {RadioItem}
|
||
|
* @see RadioItem.prototype.addTags
|
||
|
*/
|
||
|
RadioItem.prototype.addStyleTags = function (tags) { return this.addTags(tags.map(a => `radio-media-style-${a}`)); return this }
|
||
|
|
||
|
/**
|
||
|
* @public
|
||
|
* @params {RadioSource} source
|
||
|
* @returns {RadioItem}
|
||
|
*/
|
||
|
RadioItem.prototype.addSource = function (source) { this.sources.push(source); return this }
|
||
|
|
||
|
/**
|
||
|
* Set metadata for songs that were previously on nigge.rs; adds the "niggers" tag.
|
||
|
* @public
|
||
|
* @params {string|undefined} nigid
|
||
|
* @params {string|undefined} nigkey
|
||
|
* @returns {RadioItem}
|
||
|
*/
|
||
|
RadioItem.prototype.setNiggadata = function (nigid, nigkey) {
|
||
|
this.setMetadata()
|
||
|
this.metadata._nigid = nigid
|
||
|
this.metadata._nigkey = nigkey
|
||
|
//this.addTags([ "niggers" ])
|
||
|
this.hoistMiscInfo().bNiggersSong()
|
||
|
return this
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @deprecated
|
||
|
* @returns {Object}
|
||
|
*/
|
||
|
RadioItem.prototype.serialize = function (index) {
|
||
|
const self = this
|
||
|
return objSerialize(this, [
|
||
|
"id",
|
||
|
"tags",
|
||
|
"metadata"
|
||
|
], obj => ({
|
||
|
index,
|
||
|
...obj,
|
||
|
"misc": self.misc ? self.misc.serialize() : undefined,
|
||
|
"info": self.info?.length ? self.info.map(info => info.serialize()) : undefined,
|
||
|
"sources": self.sources.map(source => source.serialize())
|
||
|
}))
|
||
|
}
|
||
|
|
||
|
module.exports = { RadioItem }
|