mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	Update:Show RSS feed icon on collection card & update API endpoint for fetching collections
This commit is contained in:
		
							parent
							
								
									f806e4cce3
								
							
						
					
					
						commit
						8bbfee334c
					
				| @ -318,7 +318,7 @@ export default { | |||||||
| 
 | 
 | ||||||
|       const entityPath = this.entityName === 'books' || this.entityName === 'series-books' ? 'items' : this.entityName |       const entityPath = this.entityName === 'books' || this.entityName === 'series-books' ? 'items' : this.entityName | ||||||
|       const sfQueryString = this.currentSFQueryString ? this.currentSFQueryString + '&' : '' |       const sfQueryString = this.currentSFQueryString ? this.currentSFQueryString + '&' : '' | ||||||
|       const fullQueryString = `?${sfQueryString}limit=${this.booksPerFetch}&page=${page}&minified=1` |       const fullQueryString = `?${sfQueryString}limit=${this.booksPerFetch}&page=${page}&minified=1&include=rssfeed` | ||||||
| 
 | 
 | ||||||
|       const payload = await this.$axios.$get(`/api/libraries/${this.currentLibraryId}/${entityPath}${fullQueryString}`).catch((error) => { |       const payload = await this.$axios.$get(`/api/libraries/${this.currentLibraryId}/${entityPath}${fullQueryString}`).catch((error) => { | ||||||
|         console.error('failed to fetch books', error) |         console.error('failed to fetch books', error) | ||||||
| @ -340,7 +340,7 @@ export default { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         for (let i = 0; i < payload.results.length; i++) { |         for (let i = 0; i < payload.results.length; i++) { | ||||||
|           var index = i + startIndex |           const index = i + startIndex | ||||||
|           this.entities[index] = payload.results[i] |           this.entities[index] = payload.results[i] | ||||||
|           if (this.entityComponentRefs[index]) { |           if (this.entityComponentRefs[index]) { | ||||||
|             this.entityComponentRefs[index].setEntity(this.entities[index]) |             this.entityComponentRefs[index].setEntity(this.entities[index]) | ||||||
|  | |||||||
| @ -9,6 +9,9 @@ | |||||||
|         <span class="material-icons text-xl text-white text-opacity-75 hover:text-opacity-100">edit</span> |         <span class="material-icons text-xl text-white text-opacity-75 hover:text-opacity-100">edit</span> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|  | 
 | ||||||
|  |     <span v-if="!isHovering && rssFeed" class="absolute z-10 material-icons text-success" :style="{ top: 0.5 * sizeMultiplier + 'rem', left: 0.5 * sizeMultiplier + 'rem', fontSize: 1.5 * sizeMultiplier + 'rem' }">rss_feed</span> | ||||||
|  | 
 | ||||||
|     <div v-if="!isAlternativeBookshelfView" class="categoryPlacard absolute z-30 left-0 right-0 mx-auto -bottom-6 h-6 rounded-md font-book text-center" :style="{ width: Math.min(200, width) + 'px' }"> |     <div v-if="!isAlternativeBookshelfView" class="categoryPlacard absolute z-30 left-0 right-0 mx-auto -bottom-6 h-6 rounded-md font-book text-center" :style="{ width: Math.min(200, width) + 'px' }"> | ||||||
|       <div class="w-full h-full shinyBlack flex items-center justify-center rounded-sm border" :style="{ padding: `0rem ${0.5 * sizeMultiplier}rem` }"> |       <div class="w-full h-full shinyBlack flex items-center justify-center rounded-sm border" :style="{ padding: `0rem ${0.5 * sizeMultiplier}rem` }"> | ||||||
|         <p class="truncate" :style="{ fontSize: labelFontSize + 'rem' }">{{ title }}</p> |         <p class="truncate" :style="{ fontSize: labelFontSize + 'rem' }">{{ title }}</p> | ||||||
| @ -72,6 +75,9 @@ export default { | |||||||
|     }, |     }, | ||||||
|     userCanUpdate() { |     userCanUpdate() { | ||||||
|       return this.store.getters['user/getUserCanUpdate'] |       return this.store.getters['user/getUserCanUpdate'] | ||||||
|  |     }, | ||||||
|  |     rssFeed() { | ||||||
|  |       return this.collection ? this.collection.rssFeed : null | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|  | |||||||
| @ -124,7 +124,7 @@ export default { | |||||||
|           action: 'create-playlist' |           action: 'create-playlist' | ||||||
|         } |         } | ||||||
|       ] |       ] | ||||||
|       if (this.userIsAdminOrUp) { |       if (this.userIsAdminOrUp || this.rssFeed) { | ||||||
|         items.push({ |         items.push({ | ||||||
|           text: this.$strings.LabelOpenRSSFeed, |           text: this.$strings.LabelOpenRSSFeed, | ||||||
|           action: 'open-rss-feed' |           action: 'open-rss-feed' | ||||||
|  | |||||||
| @ -406,9 +406,11 @@ class LibraryController { | |||||||
| 
 | 
 | ||||||
|   // api/libraries/:id/collections
 |   // api/libraries/:id/collections
 | ||||||
|   async getCollectionsForLibrary(req, res) { |   async getCollectionsForLibrary(req, res) { | ||||||
|     var libraryItems = req.libraryItems |     const libraryItems = req.libraryItems | ||||||
| 
 | 
 | ||||||
|     var payload = { |     const include = (req.query.include || '').split(',').map(v => v.trim().toLowerCase()).filter(v => !!v) | ||||||
|  | 
 | ||||||
|  |     const payload = { | ||||||
|       results: [], |       results: [], | ||||||
|       total: 0, |       total: 0, | ||||||
|       limit: req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 0, |       limit: req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 0, | ||||||
| @ -416,20 +418,27 @@ class LibraryController { | |||||||
|       sortBy: req.query.sort, |       sortBy: req.query.sort, | ||||||
|       sortDesc: req.query.desc === '1', |       sortDesc: req.query.desc === '1', | ||||||
|       filterBy: req.query.filter, |       filterBy: req.query.filter, | ||||||
|       minified: req.query.minified === '1' |       minified: req.query.minified === '1', | ||||||
|  |       include: include.join(',') | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     var collections = this.db.collections.filter(c => c.libraryId === req.library.id).map(c => { |     let collections = this.db.collections.filter(c => c.libraryId === req.library.id).map(c => { | ||||||
|       var expanded = c.toJSONExpanded(libraryItems, payload.minified) |       const expanded = c.toJSONExpanded(libraryItems, payload.minified) | ||||||
|  | 
 | ||||||
|       // If all books restricted to user in this collection then hide this collection
 |       // If all books restricted to user in this collection then hide this collection
 | ||||||
|       if (!expanded.books.length && c.books.length) return null |       if (!expanded.books.length && c.books.length) return null | ||||||
|  | 
 | ||||||
|  |       if (include.includes('rssfeed')) { | ||||||
|  |         expanded.rssFeed = this.rssFeedManager.findFeedForEntityId(c.id) | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|       return expanded |       return expanded | ||||||
|     }).filter(c => !!c) |     }).filter(c => !!c) | ||||||
| 
 | 
 | ||||||
|     payload.total = collections.length |     payload.total = collections.length | ||||||
| 
 | 
 | ||||||
|     if (payload.limit) { |     if (payload.limit) { | ||||||
|       var startIndex = payload.page * payload.limit |       const startIndex = payload.page * payload.limit | ||||||
|       collections = collections.slice(startIndex, startIndex + payload.limit) |       collections = collections.slice(startIndex, startIndex + payload.limit) | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user