mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-20 19:06:06 +01:00
Merge pull request #3491 from thatguy7/unicode-author-series
retire unicode handling workaround for Author and Series title
This commit is contained in:
commit
e42db121ea
@ -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)
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user