feat: add support for series
This commit is contained in:
85
editor/public/static/js/metadata.mjs
Normal file
85
editor/public/static/js/metadata.mjs
Normal file
@ -0,0 +1,85 @@
|
||||
export default class Metadata {
|
||||
constructor(data) {
|
||||
this.data = data
|
||||
}
|
||||
|
||||
getData() {
|
||||
return this.data
|
||||
}
|
||||
}
|
||||
|
||||
export class MediaMetadata extends Metadata {
|
||||
constructor(data) {
|
||||
super(data)
|
||||
}
|
||||
}
|
||||
|
||||
export class EpisodeMetadata extends MediaMetadata {
|
||||
REGEXP = /s(?<season>\d+)e(?<episode>\d+)/i
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {object} data
|
||||
* @param {string} episodeKey
|
||||
*/
|
||||
constructor(data, episodeKey) {
|
||||
super(data)
|
||||
this.key = episodeKey
|
||||
|
||||
let m = this.key.match(this.REGEXP) ?? this.data.filename.match(this.REGEXP)
|
||||
this.season = "xx"
|
||||
this.episode = "xx"
|
||||
if (m) {
|
||||
this.season = m.groups.season
|
||||
this.episode = m.groups.episode
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class SeriesMetadata extends Metadata {
|
||||
constructor(data) {
|
||||
super(data)
|
||||
const episodeKeys = Object.keys(data).sort()
|
||||
this.episodes = episodeKeys.map(key => {
|
||||
return new EpisodeMetadata(data[key], key)
|
||||
})
|
||||
|
||||
this.episodeIdx = 0
|
||||
}
|
||||
|
||||
getCurrentEpisode() {
|
||||
return this.episodes[this.episodeIdx]
|
||||
}
|
||||
|
||||
getData() {
|
||||
return this.getCurrentEpisode().getData()
|
||||
}
|
||||
|
||||
prev() {
|
||||
if (this.episodeIdx === 0) {
|
||||
return false
|
||||
}
|
||||
this.episodeIdx -= 1
|
||||
return true
|
||||
}
|
||||
|
||||
next() {
|
||||
if (this.episodeIdx === this.episodes.length - 1) {
|
||||
return false
|
||||
}
|
||||
this.episodeIdx += 1
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {object} data
|
||||
* @returns {Metadata}
|
||||
*/
|
||||
export function loadMetadata(data) {
|
||||
if ("filename" in data) {
|
||||
return new MediaMetadata(data)
|
||||
}
|
||||
return new SeriesMetadata(data)
|
||||
}
|
Reference in New Issue
Block a user