mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-03-03 22:49:42 +00:00
Add support to custom episode cover art
This commit is contained in:
parent
0c7b738b7c
commit
f703fb60da
16 changed files with 446 additions and 20 deletions
133
server/migrations/v2.30.1-episode-cover-support.js
Normal file
133
server/migrations/v2.30.1-episode-cover-support.js
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
/**
|
||||
* @typedef MigrationContext
|
||||
* @property {import('sequelize').QueryInterface} queryInterface - a Sequelize QueryInterface object.
|
||||
* @property {import('../Logger')} logger - a Logger object.
|
||||
*
|
||||
* @typedef MigrationOptions
|
||||
* @property {MigrationContext} context - an object containing the migration context.
|
||||
*/
|
||||
|
||||
const migrationVersion = '2.30.1'
|
||||
const migrationName = `${migrationVersion}-episode-cover-support`
|
||||
const loggerPrefix = `[${migrationVersion} migration]`
|
||||
|
||||
/**
|
||||
* This migration adds support for episode-specific cover art by adding:
|
||||
* - coverPath and imageURL columns to podcastEpisodes table
|
||||
* - episodeCoverURL column to feedEpisodes table
|
||||
*
|
||||
* @param {MigrationOptions} options - an object containing the migration context.
|
||||
* @returns {Promise<void>} - A promise that resolves when the migration is complete.
|
||||
*/
|
||||
async function up({ context: { queryInterface, logger } }) {
|
||||
logger.info(`${loggerPrefix} UPGRADE BEGIN: ${migrationName}`)
|
||||
|
||||
// Upgrade podcastEpisodes table
|
||||
if (await queryInterface.tableExists('podcastEpisodes')) {
|
||||
const podcastEpisodesDescription = await queryInterface.describeTable('podcastEpisodes')
|
||||
|
||||
// Add coverPath column if it doesn't exist
|
||||
if (!podcastEpisodesDescription.coverPath) {
|
||||
logger.info(`${loggerPrefix} Adding coverPath column to podcastEpisodes table`)
|
||||
await queryInterface.addColumn('podcastEpisodes', 'coverPath', {
|
||||
type: queryInterface.sequelize.Sequelize.DataTypes.STRING,
|
||||
allowNull: true
|
||||
})
|
||||
logger.info(`${loggerPrefix} Added coverPath column to podcastEpisodes table`)
|
||||
} else {
|
||||
logger.info(`${loggerPrefix} coverPath column already exists in podcastEpisodes table`)
|
||||
}
|
||||
|
||||
// Add imageURL column if it doesn't exist
|
||||
if (!podcastEpisodesDescription.imageURL) {
|
||||
logger.info(`${loggerPrefix} Adding imageURL column to podcastEpisodes table`)
|
||||
await queryInterface.addColumn('podcastEpisodes', 'imageURL', {
|
||||
type: queryInterface.sequelize.Sequelize.DataTypes.STRING,
|
||||
allowNull: true
|
||||
})
|
||||
logger.info(`${loggerPrefix} Added imageURL column to podcastEpisodes table`)
|
||||
} else {
|
||||
logger.info(`${loggerPrefix} imageURL column already exists in podcastEpisodes table`)
|
||||
}
|
||||
} else {
|
||||
logger.info(`${loggerPrefix} podcastEpisodes table does not exist`)
|
||||
}
|
||||
|
||||
// Upgrade feedEpisodes table
|
||||
if (await queryInterface.tableExists('feedEpisodes')) {
|
||||
const feedEpisodesDescription = await queryInterface.describeTable('feedEpisodes')
|
||||
|
||||
// Add episodeCoverURL column if it doesn't exist
|
||||
if (!feedEpisodesDescription.episodeCoverURL) {
|
||||
logger.info(`${loggerPrefix} Adding episodeCoverURL column to feedEpisodes table`)
|
||||
await queryInterface.addColumn('feedEpisodes', 'episodeCoverURL', {
|
||||
type: queryInterface.sequelize.Sequelize.DataTypes.STRING,
|
||||
allowNull: true
|
||||
})
|
||||
logger.info(`${loggerPrefix} Added episodeCoverURL column to feedEpisodes table`)
|
||||
} else {
|
||||
logger.info(`${loggerPrefix} episodeCoverURL column already exists in feedEpisodes table`)
|
||||
}
|
||||
} else {
|
||||
logger.info(`${loggerPrefix} feedEpisodes table does not exist`)
|
||||
}
|
||||
|
||||
logger.info(`${loggerPrefix} UPGRADE END: ${migrationName}`)
|
||||
}
|
||||
|
||||
/**
|
||||
* This migration removes episode-specific cover art support by removing:
|
||||
* - coverPath and imageURL columns from podcastEpisodes table
|
||||
* - episodeCoverURL column from feedEpisodes table
|
||||
*
|
||||
* @param {MigrationOptions} options - an object containing the migration context.
|
||||
* @returns {Promise<void>} - A promise that resolves when the migration is complete.
|
||||
*/
|
||||
async function down({ context: { queryInterface, logger } }) {
|
||||
logger.info(`${loggerPrefix} DOWNGRADE BEGIN: ${migrationName}`)
|
||||
|
||||
// Downgrade podcastEpisodes table
|
||||
if (await queryInterface.tableExists('podcastEpisodes')) {
|
||||
const podcastEpisodesDescription = await queryInterface.describeTable('podcastEpisodes')
|
||||
|
||||
// Remove coverPath column if it exists
|
||||
if (podcastEpisodesDescription.coverPath) {
|
||||
logger.info(`${loggerPrefix} Removing coverPath column from podcastEpisodes table`)
|
||||
await queryInterface.removeColumn('podcastEpisodes', 'coverPath')
|
||||
logger.info(`${loggerPrefix} Removed coverPath column from podcastEpisodes table`)
|
||||
} else {
|
||||
logger.info(`${loggerPrefix} coverPath column does not exist in podcastEpisodes table`)
|
||||
}
|
||||
|
||||
// Remove imageURL column if it exists
|
||||
if (podcastEpisodesDescription.imageURL) {
|
||||
logger.info(`${loggerPrefix} Removing imageURL column from podcastEpisodes table`)
|
||||
await queryInterface.removeColumn('podcastEpisodes', 'imageURL')
|
||||
logger.info(`${loggerPrefix} Removed imageURL column from podcastEpisodes table`)
|
||||
} else {
|
||||
logger.info(`${loggerPrefix} imageURL column does not exist in podcastEpisodes table`)
|
||||
}
|
||||
} else {
|
||||
logger.info(`${loggerPrefix} podcastEpisodes table does not exist`)
|
||||
}
|
||||
|
||||
// Downgrade feedEpisodes table
|
||||
if (await queryInterface.tableExists('feedEpisodes')) {
|
||||
const feedEpisodesDescription = await queryInterface.describeTable('feedEpisodes')
|
||||
|
||||
// Remove episodeCoverURL column if it exists
|
||||
if (feedEpisodesDescription.episodeCoverURL) {
|
||||
logger.info(`${loggerPrefix} Removing episodeCoverURL column from feedEpisodes table`)
|
||||
await queryInterface.removeColumn('feedEpisodes', 'episodeCoverURL')
|
||||
logger.info(`${loggerPrefix} Removed episodeCoverURL column from feedEpisodes table`)
|
||||
} else {
|
||||
logger.info(`${loggerPrefix} episodeCoverURL column does not exist in feedEpisodes table`)
|
||||
}
|
||||
} else {
|
||||
logger.info(`${loggerPrefix} feedEpisodes table does not exist`)
|
||||
}
|
||||
|
||||
logger.info(`${loggerPrefix} DOWNGRADE END: ${migrationName}`)
|
||||
}
|
||||
|
||||
module.exports = { up, down }
|
||||
Loading…
Add table
Add a link
Reference in a new issue