mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Merge pull request #742 from mrdth/feature/fetch-author-image
Fetch author photo from external URL
This commit is contained in:
		
						commit
						825641f2a9
					
				| @ -25,6 +25,9 @@ | ||||
|                 <ui-text-input-with-label v-model="authorCopy.asin" :disabled="processing" label="ASIN" /> | ||||
|               </div> | ||||
|             </div> | ||||
|             <div class="p-2"> | ||||
|               <ui-text-input-with-label v-model="authorCopy.imagePath" :disabled="processing" label="Photo Path/URL" /> | ||||
|             </div> | ||||
|             <div class="p-2"> | ||||
|               <ui-textarea-with-label v-model="authorCopy.description" :disabled="processing" label="Description" :rows="8" /> | ||||
|             </div> | ||||
| @ -43,19 +46,13 @@ | ||||
| 
 | ||||
| <script> | ||||
| export default { | ||||
|   // props: { | ||||
|   //   value: Boolean, | ||||
|   //   author: { | ||||
|   //     type: Object, | ||||
|   //     default: () => {} | ||||
|   //   } | ||||
|   // }, | ||||
|   data() { | ||||
|     return { | ||||
|       authorCopy: { | ||||
|         name: '', | ||||
|         asin: '', | ||||
|         description: '' | ||||
|         description: '', | ||||
|         imagePath: '' | ||||
|       }, | ||||
|       processing: false | ||||
|     } | ||||
| @ -95,9 +92,10 @@ export default { | ||||
|       this.authorCopy.name = this.author.name | ||||
|       this.authorCopy.asin = this.author.asin | ||||
|       this.authorCopy.description = this.author.description | ||||
|       this.authorCopy.imagePath = this.author.imagePath | ||||
|     }, | ||||
|     async submitForm() { | ||||
|       var keysToCheck = ['name', 'asin', 'description'] | ||||
|       var keysToCheck = ['name', 'asin', 'description', 'imagePath'] | ||||
|       var updatePayload = {} | ||||
|       keysToCheck.forEach((key) => { | ||||
|         if (this.authorCopy[key] !== this.author[key]) { | ||||
| @ -167,4 +165,4 @@ export default { | ||||
|   mounted() {}, | ||||
|   beforeDestroy() {} | ||||
| } | ||||
| </script> | ||||
| </script> | ||||
| @ -63,15 +63,27 @@ class AuthorController { | ||||
|     // If updating or removing cover image then clear cache
 | ||||
|     if (payload.imagePath !== undefined && req.author.imagePath && payload.imagePath !== req.author.imagePath) { | ||||
|       this.cacheManager.purgeImageCache(req.author.id) | ||||
| 
 | ||||
|       if (!payload.imagePath) { // If removing image then remove file
 | ||||
|         var currentImagePath = req.author.imagePath | ||||
|         await this.coverManager.removeFile(currentImagePath) | ||||
|       } else if (payload.imagePath.startsWith('http')) { // Check if image path is a url
 | ||||
|         var imageData = await this.authorFinder.saveAuthorImage(req.author.id, payload.imagePath) | ||||
|         if (imageData) { | ||||
|           req.author.imagePath = imageData.path | ||||
|           req.author.relImagePath = imageData.relPath | ||||
|           hasUpdated = hasUpdated || true; | ||||
|         } else { | ||||
|           req.author.imagePath = null | ||||
|           req.author.relImagePath = null | ||||
|         } | ||||
|       } | ||||
|     } | ||||
| 
 | ||||
|     var authorNameUpdate = payload.name !== undefined && payload.name !== req.author.name | ||||
| 
 | ||||
|     var hasUpdated = req.author.update(payload) | ||||
| 
 | ||||
|     if (hasUpdated) { | ||||
|       if (authorNameUpdate) { // Update author name on all books
 | ||||
|         var itemsWithAuthor = this.db.libraryItems.filter(li => li.mediaType === 'book' && li.media.metadata.hasAuthor(req.author.id)) | ||||
|  | ||||
| @ -4,6 +4,7 @@ const Path = require('path') | ||||
| const Audnexus = require('../providers/Audnexus') | ||||
| 
 | ||||
| const { downloadFile } = require('../utils/fileUtils') | ||||
| const filePerms = require('../utils/filePerms') | ||||
| 
 | ||||
| class AuthorFinder { | ||||
|   constructor() { | ||||
| @ -38,7 +39,11 @@ class AuthorFinder { | ||||
|   async saveAuthorImage(authorId, url) { | ||||
|     var authorDir = this.AuthorPath | ||||
|     var relAuthorDir = Path.posix.join('/metadata', 'authors') | ||||
|     await fs.ensureDir(authorDir) | ||||
| 
 | ||||
|     if (!await fs.pathExists(authorDir)) { | ||||
|       await fs.ensureDir(authorDir) | ||||
|       await filePerms.setDefault(authorDir) | ||||
|     } | ||||
| 
 | ||||
|     var imageExtension = url.toLowerCase().split('.').pop() | ||||
|     var ext = imageExtension === 'png' ? 'png' : 'jpg' | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user