mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-27 09:08:57 +01:00
95 lines
2.7 KiB
JavaScript
95 lines
2.7 KiB
JavaScript
const { DataTypes, Model } = require('sequelize')
|
|
|
|
module.exports = (sequelize) => {
|
|
class PodcastEpisode extends Model {
|
|
getOldPodcastEpisode(libraryItemId = null) {
|
|
let enclosure = null
|
|
if (this.enclosureURL) {
|
|
enclosure = {
|
|
url: this.enclosureURL,
|
|
type: this.enclosureType,
|
|
length: this.enclosureSize !== null ? String(this.enclosureSize) : null
|
|
}
|
|
}
|
|
return {
|
|
libraryItemId: libraryItemId || null,
|
|
podcastId: this.podcastId,
|
|
id: this.id,
|
|
index: this.index,
|
|
season: this.season,
|
|
episode: this.episode,
|
|
episodeType: this.episodeType,
|
|
title: this.title,
|
|
subtitle: this.subtitle,
|
|
description: this.description,
|
|
enclosure,
|
|
pubDate: this.pubDate,
|
|
chapters: this.chapters,
|
|
audioFile: this.audioFile,
|
|
publishedAt: this.publishedAt?.valueOf() || null,
|
|
addedAt: this.createdAt.valueOf(),
|
|
updatedAt: this.updatedAt.valueOf()
|
|
}
|
|
}
|
|
|
|
static createFromOld(oldEpisode) {
|
|
const podcastEpisode = this.getFromOld(oldEpisode)
|
|
return this.create(podcastEpisode)
|
|
}
|
|
|
|
static getFromOld(oldEpisode) {
|
|
return {
|
|
id: oldEpisode.id,
|
|
index: oldEpisode.index,
|
|
season: oldEpisode.season,
|
|
episode: oldEpisode.episode,
|
|
episodeType: oldEpisode.episodeType,
|
|
title: oldEpisode.title,
|
|
subtitle: oldEpisode.subtitle,
|
|
description: oldEpisode.description,
|
|
pubDate: oldEpisode.pubDate,
|
|
enclosureURL: oldEpisode.enclosure?.url || null,
|
|
enclosureSize: oldEpisode.enclosure?.length || null,
|
|
enclosureType: oldEpisode.enclosure?.type || null,
|
|
publishedAt: oldEpisode.publishedAt,
|
|
podcastId: oldEpisode.podcastId,
|
|
audioFile: oldEpisode.audioFile?.toJSON() || null,
|
|
chapters: oldEpisode.chapters
|
|
}
|
|
}
|
|
}
|
|
|
|
PodcastEpisode.init({
|
|
id: {
|
|
type: DataTypes.UUID,
|
|
defaultValue: DataTypes.UUIDV4,
|
|
primaryKey: true
|
|
},
|
|
index: DataTypes.INTEGER,
|
|
season: DataTypes.STRING,
|
|
episode: DataTypes.STRING,
|
|
episodeType: DataTypes.STRING,
|
|
title: DataTypes.STRING,
|
|
subtitle: DataTypes.STRING(1000),
|
|
description: DataTypes.TEXT,
|
|
pubDate: DataTypes.STRING,
|
|
enclosureURL: DataTypes.STRING,
|
|
enclosureSize: DataTypes.BIGINT,
|
|
enclosureType: DataTypes.STRING,
|
|
publishedAt: DataTypes.DATE,
|
|
|
|
audioFile: DataTypes.JSON,
|
|
chapters: DataTypes.JSON
|
|
}, {
|
|
sequelize,
|
|
modelName: 'podcastEpisode'
|
|
})
|
|
|
|
const { podcast } = sequelize.models
|
|
podcast.hasMany(PodcastEpisode, {
|
|
onDelete: 'CASCADE'
|
|
})
|
|
PodcastEpisode.belongsTo(podcast)
|
|
|
|
return PodcastEpisode
|
|
} |