mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2026-03-04 06:59:41 +00:00
feat: implement duplicate title normalized filter
This commit is contained in:
parent
aa85106681
commit
ead215e777
13 changed files with 276 additions and 1 deletions
|
|
@ -146,6 +146,7 @@ class Book extends Model {
|
|||
},
|
||||
title: DataTypes.STRING,
|
||||
titleIgnorePrefix: DataTypes.STRING,
|
||||
titleNormalized: DataTypes.STRING,
|
||||
subtitle: DataTypes.STRING,
|
||||
publishedYear: DataTypes.STRING,
|
||||
publishedDate: DataTypes.STRING,
|
||||
|
|
@ -407,7 +408,9 @@ class Book extends Model {
|
|||
this[key] = payload.metadata[key] || null
|
||||
|
||||
if (key === 'title') {
|
||||
const { getTitleIgnorePrefix, getNormalizedTitle } = require('../utils')
|
||||
this.titleIgnorePrefix = getTitleIgnorePrefix(this.title)
|
||||
this.titleNormalized = getNormalizedTitle(this.title)
|
||||
}
|
||||
|
||||
hasUpdates = true
|
||||
|
|
|
|||
|
|
@ -78,6 +78,8 @@ class LibraryItem extends Model {
|
|||
/** @type {string} */
|
||||
this.titleIgnorePrefix // Only used for sorting
|
||||
/** @type {string} */
|
||||
this.titleNormalized // Only used for sorting
|
||||
/** @type {string} */
|
||||
this.authorNamesFirstLast // Only used for sorting
|
||||
/** @type {string} */
|
||||
this.authorNamesLastFirst // Only used for sorting
|
||||
|
|
@ -687,6 +689,7 @@ class LibraryItem extends Model {
|
|||
extraData: DataTypes.JSON,
|
||||
title: DataTypes.STRING,
|
||||
titleIgnorePrefix: DataTypes.STRING,
|
||||
titleNormalized: DataTypes.STRING,
|
||||
authorNamesFirstLast: DataTypes.STRING,
|
||||
authorNamesLastFirst: DataTypes.STRING,
|
||||
isNotConsolidated: {
|
||||
|
|
@ -719,6 +722,9 @@ class LibraryItem extends Model {
|
|||
{
|
||||
fields: ['libraryId', 'mediaType', { name: 'titleIgnorePrefix', collate: 'NOCASE' }]
|
||||
},
|
||||
{
|
||||
fields: ['libraryId', 'mediaType', { name: 'titleNormalized', collate: 'NOCASE' }]
|
||||
},
|
||||
{
|
||||
fields: ['libraryId', 'mediaType', { name: 'authorNamesFirstLast', collate: 'NOCASE' }]
|
||||
},
|
||||
|
|
@ -795,6 +801,7 @@ class LibraryItem extends Model {
|
|||
if (instance.media) {
|
||||
instance.title = instance.media.title
|
||||
instance.titleIgnorePrefix = instance.media.titleIgnorePrefix
|
||||
instance.titleNormalized = instance.media.titleNormalized
|
||||
if (instance.isBook) {
|
||||
if (instance.media.authors !== undefined) {
|
||||
instance.authorNamesFirstLast = instance.media.authorName
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
const { DataTypes, Model } = require('sequelize')
|
||||
const { getTitlePrefixAtEnd, getTitleIgnorePrefix } = require('../utils')
|
||||
const { getTitlePrefixAtEnd, getTitleIgnorePrefix, getNormalizedTitle } = require('../utils')
|
||||
const Logger = require('../Logger')
|
||||
const libraryItemsPodcastFilters = require('../utils/queries/libraryItemsPodcastFilters')
|
||||
const htmlSanitizer = require('../utils/htmlSanitizer')
|
||||
|
|
@ -93,6 +93,7 @@ class Podcast extends Model {
|
|||
{
|
||||
title,
|
||||
titleIgnorePrefix: getTitleIgnorePrefix(title),
|
||||
titleNormalized: getNormalizedTitle(title),
|
||||
author: typeof payload.metadata.author === 'string' ? payload.metadata.author : null,
|
||||
releaseDate: typeof payload.metadata.releaseDate === 'string' ? payload.metadata.releaseDate : null,
|
||||
feedURL: typeof payload.metadata.feedUrl === 'string' ? payload.metadata.feedUrl : null,
|
||||
|
|
@ -130,6 +131,7 @@ class Podcast extends Model {
|
|||
},
|
||||
title: DataTypes.STRING,
|
||||
titleIgnorePrefix: DataTypes.STRING,
|
||||
titleNormalized: DataTypes.STRING,
|
||||
author: DataTypes.STRING,
|
||||
releaseDate: DataTypes.STRING,
|
||||
feedURL: DataTypes.STRING,
|
||||
|
|
@ -257,6 +259,7 @@ class Podcast extends Model {
|
|||
|
||||
if (key === 'title') {
|
||||
this.titleIgnorePrefix = getTitleIgnorePrefix(this.title)
|
||||
this.titleNormalized = getNormalizedTitle(this.title)
|
||||
}
|
||||
|
||||
hasUpdates = true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue