Merge pull request #3491 from thatguy7/unicode-author-series

retire unicode handling workaround for Author and Series title
This commit is contained in:
advplyr 2024-10-08 17:04:21 -05:00 committed by GitHub
commit e42db121ea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 3 additions and 29 deletions

View File

@ -9,7 +9,6 @@ const libraryItemsBookFilters = require('../utils/queries/libraryItemsBookFilter
const libraryItemFilters = require('../utils/queries/libraryItemFilters') const libraryItemFilters = require('../utils/queries/libraryItemFilters')
const seriesFilters = require('../utils/queries/seriesFilters') const seriesFilters = require('../utils/queries/seriesFilters')
const fileUtils = require('../utils/fileUtils') const fileUtils = require('../utils/fileUtils')
const { asciiOnlyToLowerCase } = require('../utils/index')
const { createNewSortInstance } = require('../libs/fastSort') const { createNewSortInstance } = require('../libs/fastSort')
const naturalSort = createNewSortInstance({ const naturalSort = createNewSortInstance({
comparer: new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare comparer: new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare
@ -809,7 +808,7 @@ class LibraryController {
} }
const limit = req.query.limit || 12 const limit = req.query.limit || 12
const query = asciiOnlyToLowerCase(req.query.q.trim()) const query = req.query.q.trim()
const matches = await libraryItemFilters.search(req.user, req.library, query, limit) const matches = await libraryItemFilters.search(req.user, req.library, query, limit)
res.json(matches) res.json(matches)

View File

@ -1,6 +1,5 @@
const { DataTypes, Model, where, fn, col } = require('sequelize') const { DataTypes, Model, where, fn, col } = require('sequelize')
const parseNameString = require('../utils/parsers/parseNameString') const parseNameString = require('../utils/parsers/parseNameString')
const { asciiOnlyToLowerCase } = require('../utils/index')
class Author extends Model { class Author extends Model {
constructor(values, options) { constructor(values, options) {
@ -56,7 +55,7 @@ class Author extends Model {
static async getByNameAndLibrary(authorName, libraryId) { static async getByNameAndLibrary(authorName, libraryId) {
return this.findOne({ return this.findOne({
where: [ where: [
where(fn('lower', col('name')), asciiOnlyToLowerCase(authorName)), where(fn('lower', col('name')), authorName.toLowerCase()),
{ {
libraryId libraryId
} }

View File

@ -1,7 +1,6 @@
const { DataTypes, Model, where, fn, col } = require('sequelize') const { DataTypes, Model, where, fn, col } = require('sequelize')
const { getTitlePrefixAtEnd } = require('../utils/index') const { getTitlePrefixAtEnd } = require('../utils/index')
const { asciiOnlyToLowerCase } = require('../utils/index')
class Series extends Model { class Series extends Model {
constructor(values, options) { constructor(values, options) {
@ -42,7 +41,7 @@ class Series extends Model {
static async getByNameAndLibrary(seriesName, libraryId) { static async getByNameAndLibrary(seriesName, libraryId) {
return this.findOne({ return this.findOne({
where: [ where: [
where(fn('lower', col('name')), asciiOnlyToLowerCase(seriesName)), where(fn('lower', col('name')), seriesName.toLowerCase()),
{ {
libraryId libraryId
} }

View File

@ -194,29 +194,6 @@ module.exports.getTitlePrefixAtEnd = (title) => {
return prefix ? `${sort}, ${prefix}` : title return prefix ? `${sort}, ${prefix}` : title
} }
/**
* to lower case for only ascii characters
* used to handle sqlite that doesnt support unicode lower
* @see https://github.com/advplyr/audiobookshelf/issues/2187
*
* @param {string} str
* @returns {string}
*/
module.exports.asciiOnlyToLowerCase = (str) => {
if (!str) return ''
let temp = ''
for (let chars of str) {
let value = chars.charCodeAt()
if (value >= 65 && value <= 90) {
temp += String.fromCharCode(value + 32)
} else {
temp += chars
}
}
return temp
}
/** /**
* Escape string used in RegExp * Escape string used in RegExp
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping