mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Merge pull request #1680 from lukeIam/region_authors
Use region for author queries
This commit is contained in:
		
						commit
						eb5f257b8c
					
				| @ -189,6 +189,9 @@ export default { | ||||
|     currentLibraryId() { | ||||
|       return this.$store.state.libraries.currentLibraryId | ||||
|     }, | ||||
|     libraryProvider() { | ||||
|       return this.$store.getters['libraries/getLibraryProvider'](this.currentLibraryId) || 'google' | ||||
|     }, | ||||
|     currentLibraryMediaType() { | ||||
|       return this.$store.getters['libraries/getCurrentLibraryMediaType'] | ||||
|     }, | ||||
| @ -323,7 +326,11 @@ export default { | ||||
|         const payload = {} | ||||
|         if (author.asin) payload.asin = author.asin | ||||
|         else payload.q = author.name | ||||
|         console.log('Payload', payload, 'author', author) | ||||
| 
 | ||||
|         payload.region = 'us' | ||||
|         if (this.libraryProvider.startsWith('audible.')) { | ||||
|           payload.region = this.libraryProvider.split('.').pop() || 'us' | ||||
|         } | ||||
| 
 | ||||
|         this.$eventBus.$emit(`searching-author-${author.id}`, true) | ||||
| 
 | ||||
|  | ||||
| @ -77,6 +77,12 @@ export default { | ||||
|     }, | ||||
|     userCanUpdate() { | ||||
|       return this.$store.getters['user/getUserCanUpdate'] | ||||
|     }, | ||||
|     currentLibraryId() { | ||||
|       return this.$store.state.libraries.currentLibraryId | ||||
|     }, | ||||
|     libraryProvider() { | ||||
|       return this.$store.getters['libraries/getLibraryProvider'](this.currentLibraryId) || 'google' | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
| @ -92,6 +98,11 @@ export default { | ||||
|       if (this.asin) payload.asin = this.asin | ||||
|       else payload.q = this.name | ||||
| 
 | ||||
|       payload.region = 'us' | ||||
|       if (this.libraryProvider.startsWith('audible.')) { | ||||
|         payload.region = this.libraryProvider.split('.').pop() || 'us' | ||||
|       } | ||||
| 
 | ||||
|       var response = await this.$axios.$post(`/api/authors/${this.authorId}/match`, payload).catch((error) => { | ||||
|         console.error('Failed', error) | ||||
|         return null | ||||
|  | ||||
| @ -85,6 +85,12 @@ export default { | ||||
|     }, | ||||
|     title() { | ||||
|       return this.$strings.HeaderUpdateAuthor | ||||
|     }, | ||||
|     currentLibraryId() { | ||||
|       return this.$store.state.libraries.currentLibraryId | ||||
|     }, | ||||
|     libraryProvider() { | ||||
|       return this.$store.getters['libraries/getLibraryProvider'](this.currentLibraryId) || 'google' | ||||
|     } | ||||
|   }, | ||||
|   methods: { | ||||
| @ -151,6 +157,11 @@ export default { | ||||
|       if (this.authorCopy.asin) payload.asin = this.authorCopy.asin | ||||
|       else payload.q = this.authorCopy.name | ||||
| 
 | ||||
|       payload.region = 'us' | ||||
|       if (this.libraryProvider.startsWith('audible.')) { | ||||
|         payload.region = this.libraryProvider.split('.').pop() || 'us' | ||||
|       } | ||||
| 
 | ||||
|       var response = await this.$axios.$post(`/api/authors/${this.authorId}/match`, payload).catch((error) => { | ||||
|         console.error('Failed', error) | ||||
|         return null | ||||
|  | ||||
| @ -167,18 +167,19 @@ class AuthorController { | ||||
|   } | ||||
| 
 | ||||
|   async match(req, res) { | ||||
|     var authorData = null | ||||
|     let authorData = null | ||||
|     const region = req.body.region || 'us' | ||||
|     if (req.body.asin) { | ||||
|       authorData = await this.authorFinder.findAuthorByASIN(req.body.asin) | ||||
|       authorData = await this.authorFinder.findAuthorByASIN(req.body.asin, region) | ||||
|     } else { | ||||
|       authorData = await this.authorFinder.findAuthorByName(req.body.q) | ||||
|       authorData = await this.authorFinder.findAuthorByName(req.body.q, region) | ||||
|     } | ||||
|     if (!authorData) { | ||||
|       return res.status(404).send('Author not found') | ||||
|     } | ||||
|     Logger.debug(`[AuthorController] match author with "${req.body.q || req.body.asin}"`, authorData) | ||||
| 
 | ||||
|     var hasUpdates = false | ||||
|     let hasUpdates = false | ||||
|     if (authorData.asin && req.author.asin !== authorData.asin) { | ||||
|       req.author.asin = authorData.asin | ||||
|       hasUpdates = true | ||||
| @ -188,7 +189,7 @@ class AuthorController { | ||||
|     if (authorData.image && (!req.author.imagePath || hasUpdates)) { | ||||
|       this.cacheManager.purgeImageCache(req.author.id) | ||||
| 
 | ||||
|       var imageData = await this.authorFinder.saveAuthorImage(req.author.id, authorData.image) | ||||
|       const imageData = await this.authorFinder.saveAuthorImage(req.author.id, authorData.image) | ||||
|       if (imageData) { | ||||
|         req.author.imagePath = imageData.path | ||||
|         hasUpdates = true | ||||
| @ -204,7 +205,7 @@ class AuthorController { | ||||
|       req.author.updatedAt = Date.now() | ||||
| 
 | ||||
|       await this.db.updateEntity('author', req.author) | ||||
|       var numBooks = this.db.libraryItems.filter(li => { | ||||
|       const numBooks = this.db.libraryItems.filter(li => { | ||||
|         return li.media.metadata.hasAuthor && li.media.metadata.hasAuthor(req.author.id) | ||||
|       }).length | ||||
|       SocketAuthority.emitter('author_updated', req.author.toJSONExpanded(numBooks)) | ||||
|  | ||||
| @ -20,16 +20,16 @@ class AuthorFinder { | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   findAuthorByASIN(asin) { | ||||
|   findAuthorByASIN(asin, region) { | ||||
|     if (!asin) return null | ||||
|     return this.audnexus.findAuthorByASIN(asin) | ||||
|     return this.audnexus.findAuthorByASIN(asin, region) | ||||
|   } | ||||
| 
 | ||||
|   async findAuthorByName(name, options = {}) { | ||||
|   async findAuthorByName(name, region, options = {}) { | ||||
|     if (!name) return null | ||||
|     const maxLevenshtein = !isNaN(options.maxLevenshtein) ? Number(options.maxLevenshtein) : 3 | ||||
| 
 | ||||
|     var author = await this.audnexus.findAuthorByName(name, maxLevenshtein) | ||||
|     const author = await this.audnexus.findAuthorByName(name, region, maxLevenshtein) | ||||
|     if (!author || !author.name) { | ||||
|       return null | ||||
|     } | ||||
|  | ||||
| @ -7,9 +7,12 @@ class Audnexus { | ||||
|     this.baseUrl = 'https://api.audnex.us' | ||||
|   } | ||||
| 
 | ||||
|   authorASINsRequest(name) { | ||||
|     name = encodeURIComponent(name); | ||||
|     return axios.get(`${this.baseUrl}/authors?name=${name}`).then((res) => { | ||||
|   authorASINsRequest(name, region) { | ||||
|     name = encodeURIComponent(name) | ||||
|     const regionQuery = region ? `®ion=${region}` : '' | ||||
|     const authorRequestUrl = `${this.baseUrl}/authors?name=${name}${regionQuery}` | ||||
|     Logger.info(`[Audnexus] Searching for author "${authorRequestUrl}"`) | ||||
|     return axios.get(authorRequestUrl).then((res) => { | ||||
|       return res.data || [] | ||||
|     }).catch((error) => { | ||||
|       Logger.error(`[Audnexus] Author ASIN request failed for ${name}`, error) | ||||
| @ -17,9 +20,12 @@ class Audnexus { | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   authorRequest(asin) { | ||||
|     asin = encodeURIComponent(asin); | ||||
|     return axios.get(`${this.baseUrl}/authors/${asin}`).then((res) => { | ||||
|   authorRequest(asin, region) { | ||||
|     asin = encodeURIComponent(asin) | ||||
|     const regionQuery = region ? `?region=${region}` : '' | ||||
|     const authorRequestUrl = `${this.baseUrl}/authors/${asin}${regionQuery}` | ||||
|     Logger.info(`[Audnexus] Searching for author "${authorRequestUrl}"`) | ||||
|     return axios.get(authorRequestUrl).then((res) => { | ||||
|       return res.data | ||||
|     }).catch((error) => { | ||||
|       Logger.error(`[Audnexus] Author request failed for ${asin}`, error) | ||||
| @ -27,8 +33,8 @@ class Audnexus { | ||||
|     }) | ||||
|   } | ||||
| 
 | ||||
|   async findAuthorByASIN(asin) { | ||||
|     var author = await this.authorRequest(asin) | ||||
|   async findAuthorByASIN(asin, region) { | ||||
|     const author = await this.authorRequest(asin, region) | ||||
|     if (!author) { | ||||
|       return null | ||||
|     } | ||||
| @ -40,14 +46,14 @@ class Audnexus { | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   async findAuthorByName(name, maxLevenshtein = 3) { | ||||
|   async findAuthorByName(name, region, maxLevenshtein = 3) { | ||||
|     Logger.debug(`[Audnexus] Looking up author by name ${name}`) | ||||
|     var asins = await this.authorASINsRequest(name) | ||||
|     var matchingAsin = asins.find(obj => levenshteinDistance(obj.name, name) <= maxLevenshtein) | ||||
|     const asins = await this.authorASINsRequest(name, region) | ||||
|     const matchingAsin = asins.find(obj => levenshteinDistance(obj.name, name) <= maxLevenshtein) | ||||
|     if (!matchingAsin) { | ||||
|       return null | ||||
|     } | ||||
|     var author = await this.authorRequest(matchingAsin.asin) | ||||
|     const author = await this.authorRequest(matchingAsin.asin) | ||||
|     if (!author) { | ||||
|       return null | ||||
|     } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user