mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-11-03 19:07:00 -05: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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user