🎨 Clean up code
This commit is contained in:
parent
7657ffedef
commit
5e3075dad1
1 changed files with 80 additions and 90 deletions
170
src/Track.js
170
src/Track.js
|
@ -6,99 +6,89 @@ const Player = require('./Player')
|
|||
* Represents a track.
|
||||
*/
|
||||
class Track {
|
||||
/**
|
||||
* @param {Object} videoData The video data for this track
|
||||
* @param {Discord.User | null} user The user who requested the track
|
||||
* @param {Player} player
|
||||
*/
|
||||
constructor(videoData, user, player) {
|
||||
/**
|
||||
* The player instantiating the track
|
||||
* @type {Player}
|
||||
* @param {Object} videoData The video data for this track
|
||||
* @param {Discord.User | null} user The user who requested the track
|
||||
* @param {Player} player
|
||||
*/
|
||||
this.player = player
|
||||
/**
|
||||
* The track title
|
||||
* @type {string}
|
||||
*/
|
||||
this.title = videoData.title
|
||||
/**
|
||||
* The Youtube URL of the track
|
||||
* @type {string}
|
||||
*/
|
||||
this.url = videoData.url
|
||||
/**
|
||||
* The video duration (formatted).
|
||||
* @type {string}
|
||||
*/
|
||||
this.duration =
|
||||
videoData.durationFormatted ||
|
||||
`${Math.floor(parseInt(videoData.videoDetails.lengthSeconds) / 60)}:${
|
||||
parseInt(videoData.videoDetails.lengthSeconds) % 60
|
||||
}`
|
||||
/**
|
||||
* The video description
|
||||
* @type {string}
|
||||
*/
|
||||
this.description = videoData.description;
|
||||
/**
|
||||
* The video thumbnail
|
||||
* @type {string}
|
||||
*/
|
||||
this.thumbnail =
|
||||
typeof videoData.thumbnail === "object"
|
||||
? videoData.thumbnail.url
|
||||
: videoData.thumbnail
|
||||
/**
|
||||
* The video views
|
||||
* @type {?number}
|
||||
*/
|
||||
this.views = parseInt(videoData.views)
|
||||
/**
|
||||
* The video channel
|
||||
* @type {string}
|
||||
*/
|
||||
this.author = videoData.channel
|
||||
? videoData.channel.name
|
||||
: videoData.author.name
|
||||
/**
|
||||
* The user who requested the track
|
||||
* @type {Discord.User?}
|
||||
*/
|
||||
this.requestedBy = user
|
||||
/**
|
||||
* Whether the track was added from a playlist
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.fromPlaylist = videoData.fromPlaylist || false
|
||||
}
|
||||
|
||||
/**
|
||||
* The queue in which the track is
|
||||
* @type {Queue}
|
||||
*/
|
||||
get queue() {
|
||||
return this.player.queues.find((queue) => queue.tracks.includes(this))
|
||||
}
|
||||
|
||||
/**
|
||||
* The track duration
|
||||
* @type {number}
|
||||
*/
|
||||
get durationMS() {
|
||||
const args = this.duration.split(":")
|
||||
if (args.length === 3) {
|
||||
return (
|
||||
parseInt(args[0]) * 60 * 60 * 1000 +
|
||||
parseInt(args[1]) * 60 * 1000 +
|
||||
parseInt(args[2]) * 1000
|
||||
);
|
||||
} else if (args.length === 2) {
|
||||
return parseInt(args[0]) * 60 * 1000 + parseInt(args[1]) * 1000
|
||||
} else {
|
||||
return parseInt(args[0]) * 1000
|
||||
constructor (videoData, user, player) {
|
||||
/**
|
||||
* The player instantiating the track
|
||||
* @type {Player}
|
||||
*/
|
||||
this.player = player
|
||||
/**
|
||||
* The track title
|
||||
* @type {string}
|
||||
*/
|
||||
this.title = videoData.title
|
||||
/**
|
||||
* The Youtube URL of the track
|
||||
* @type {string}
|
||||
*/
|
||||
this.url = videoData.url
|
||||
/**
|
||||
* The video duration (formatted).
|
||||
* @type {string}
|
||||
*/
|
||||
this.duration = videoData.durationFormatted ||
|
||||
`${Math.floor(parseInt(videoData.videoDetails.lengthSeconds) / 60)}:${parseInt(videoData.videoDetails.lengthSeconds) % 60}`
|
||||
/**
|
||||
* The video description
|
||||
* @type {string}
|
||||
*/
|
||||
this.description = videoData.description
|
||||
/**
|
||||
* The video thumbnail
|
||||
* @type {string}
|
||||
*/
|
||||
this.thumbnail = typeof videoData.thumbnail === 'object'
|
||||
? videoData.thumbnail.url
|
||||
: videoData.thumbnail
|
||||
/**
|
||||
* The video views
|
||||
* @type {?number}
|
||||
*/
|
||||
this.views = parseInt(videoData.views)
|
||||
/**
|
||||
* The video channel
|
||||
* @type {string}
|
||||
*/
|
||||
this.author = videoData.channel
|
||||
? videoData.channel.name
|
||||
: videoData.author.name
|
||||
/**
|
||||
* The user who requested the track
|
||||
* @type {Discord.User?}
|
||||
*/
|
||||
this.requestedBy = user
|
||||
/**
|
||||
* Whether the track was added from a playlist
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.fromPlaylist = videoData.fromPlaylist || false
|
||||
}
|
||||
|
||||
/**
|
||||
* The queue in which the track is
|
||||
* @type {Queue}
|
||||
*/
|
||||
get queue () {
|
||||
return this.player.queues.find((queue) => queue.tracks.includes(this))
|
||||
}
|
||||
|
||||
/**
|
||||
* The track duration
|
||||
* @type {number}
|
||||
*/
|
||||
get durationMS () {
|
||||
const args = this.duration.split(':')
|
||||
switch (args.length) {
|
||||
case 3: return parseInt(args[0]) * 60 * 60 * 1000 + parseInt(args[1]) * 60 * 1000 + parseInt(args[2]) * 1000
|
||||
case 2: return parseInt(args[0]) * 60 * 1000 + parseInt(args[1]) * 1000
|
||||
default: return parseInt(args[0]) * 1000
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Track
|
||||
|
|
Loading…
Reference in a new issue