diff --git a/server/utils/queries/libraryItemsBookFilters.js b/server/utils/queries/libraryItemsBookFilters.js index 73d36c58..7fa5eb41 100644 --- a/server/utils/queries/libraryItemsBookFilters.js +++ b/server/utils/queries/libraryItemsBookFilters.js @@ -251,6 +251,15 @@ module.exports = { */ getOrder(sortBy, sortDesc, collapseseries) { const dir = sortDesc ? 'DESC' : 'ASC' + + const getTitleOrder = () => { + if (global.ServerSettings.sortingIgnorePrefix) { + return [Sequelize.literal('`libraryItem`.`titleIgnorePrefix` COLLATE NOCASE'), dir] + } else { + return [Sequelize.literal('`libraryItem`.`title` COLLATE NOCASE'), dir] + } + } + if (sortBy === 'addedAt') { return [[Sequelize.literal('libraryItem.createdAt'), dir]] } else if (sortBy === 'size') { @@ -264,25 +273,16 @@ module.exports = { } else if (sortBy === 'media.metadata.publishedYear') { return [[Sequelize.literal(`CAST(\`book\`.\`publishedYear\` AS INTEGER)`), dir]] } else if (sortBy === 'media.metadata.authorNameLF') { - return [ - [Sequelize.literal('`libraryItem`.`authorNamesLastFirst` COLLATE NOCASE'), dir], - [Sequelize.literal('`libraryItem`.`title` COLLATE NOCASE'), dir] - ] + // Sort by author name last first, secondary sort by title + return [[Sequelize.literal('`libraryItem`.`authorNamesLastFirst` COLLATE NOCASE'), dir], getTitleOrder()] } else if (sortBy === 'media.metadata.authorName') { - return [ - [Sequelize.literal('`libraryItem`.`authorNamesFirstLast` COLLATE NOCASE'), dir], - [Sequelize.literal('`libraryItem`.`title` COLLATE NOCASE'), dir] - ] + // Sort by author name first last, secondary sort by title + return [[Sequelize.literal('`libraryItem`.`authorNamesFirstLast` COLLATE NOCASE'), dir], getTitleOrder()] } else if (sortBy === 'media.metadata.title') { if (collapseseries) { return [[Sequelize.literal('display_title COLLATE NOCASE'), dir]] } - - if (global.ServerSettings.sortingIgnorePrefix) { - return [[Sequelize.literal('`libraryItem`.`titleIgnorePrefix` COLLATE NOCASE'), dir]] - } else { - return [[Sequelize.literal('`libraryItem`.`title` COLLATE NOCASE'), dir]] - } + return [getTitleOrder()] } else if (sortBy === 'sequence') { const nullDir = sortDesc ? 'DESC NULLS FIRST' : 'ASC NULLS LAST' return [[Sequelize.literal(`CAST(\`series.bookSeries.sequence\` AS FLOAT) ${nullDir}`)]]