Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Series cleanup #3326

Closed
wants to merge 99 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
99 commits
Select commit Hold shift + click to select a range
e7eda12
Add: deduplicate series on server startup
nichwall Aug 23, 2024
896f2d4
Duplicate series need to have the same libraryId
nichwall Aug 23, 2024
926896e
Add: logging of how many series were removed
nichwall Aug 23, 2024
4f6297e
Update spacing
nichwall Aug 24, 2024
9b87d55
Updates to use new Library model
advplyr Aug 23, 2024
a250915
Update series and collection width to account for book aspect ratio
mikiher Aug 24, 2024
7a68dfc
Fix embed and convert for single file library items
mikiher Aug 24, 2024
9ffdf59
Updates to LibraryController to use new Library model
advplyr Aug 24, 2024
9fedeba
Updates to migrate off of old library model
advplyr Aug 24, 2024
8bfca41
Fix:Check if book is already being merged before allowing to start #3331
advplyr Aug 25, 2024
89f9d7d
Update tools endpoint status codes
advplyr Aug 26, 2024
d7b3aa5
memorystore: simplify, refactor, re-enable
itzexor Aug 19, 2024
f558c24
Fix memorystore constructor validation
advplyr Aug 27, 2024
18913fa
Translated using Weblate (Spanish)
gallegonovato Aug 9, 2024
9a3f5b4
Translated using Weblate (French)
Aug 10, 2024
3484b7f
Translated using Weblate (German)
JBlond Aug 10, 2024
36f2ecc
Translated using Weblate (German)
Vito0912 Aug 10, 2024
e32c9d1
Translated using Weblate (German)
JBlond Aug 10, 2024
4f5d22a
Translated using Weblate (Italian)
burghy86 Aug 10, 2024
5ce5f6f
Translated using Weblate (Chinese (Simplified))
springsunx Aug 11, 2024
4f2879e
Translated using Weblate (French)
Aug 11, 2024
a680f51
Translated using Weblate (German)
Vito0912 Aug 12, 2024
b9269f8
Translated using Weblate (German)
Vito0912 Aug 13, 2024
3fa7e84
Translated using Weblate (Spanish)
gallegonovato Aug 13, 2024
f39dd8a
Translated using Weblate (Swedish)
Landrash Aug 13, 2024
572c579
Translated using Weblate (Czech)
kuci-JK Aug 14, 2024
28232f5
Translated using Weblate (French)
LECOQQ Aug 14, 2024
dcf80c9
Translated using Weblate (Ukrainian)
cor-bee Aug 14, 2024
7c5fb4d
Translated using Weblate (Spanish)
gallegonovato Aug 15, 2024
364edf3
Translated using Weblate (German)
JBlond Aug 16, 2024
ce6affb
Translated using Weblate (Spanish)
gallegonovato Aug 17, 2024
4b927ea
Translated using Weblate (German)
JBlond Aug 18, 2024
e1cd075
Translated using Weblate (Polish)
ahetek Aug 18, 2024
3cd791c
Translated using Weblate (French)
ChristianWia Aug 18, 2024
394c4e7
Translated using Weblate (Norwegian Bokmål)
Aug 23, 2024
77f67d7
Translated using Weblate (Croatian)
biuklija Aug 26, 2024
8c2c643
Translated using Weblate (Croatian)
biuklija Aug 26, 2024
d3308b7
Translated using Weblate (Croatian)
biuklija Aug 26, 2024
db244ac
Translated using Weblate (Croatian)
biuklija Aug 27, 2024
95cb666
Remove old library, folder and librarysettings model
advplyr Aug 28, 2024
949f9bb
Add:Podcast latest page includes Mark as Finished button #3321
advplyr Aug 29, 2024
23e2f78
Remove old Author object & fix issue deleting empty authors
advplyr Aug 31, 2024
6c7a924
Translation strings added (#3304)
nichwall Aug 30, 2024
4ad6104
Config issue workflow (#3348)
nichwall Aug 31, 2024
681e7f2
Update:Author number of books sort fallsback to sort on name when num…
advplyr Aug 31, 2024
eb8fea2
Update:Global search author card and library stat author name links t…
advplyr Aug 31, 2024
619f824
Translations update from Hosted Weblate (#3342)
weblate Aug 31, 2024
8132d01
Delete untranslated strings
nichwall Aug 31, 2024
f2748d0
Version bump v2.13.0
advplyr Aug 31, 2024
3bb71c7
Fix:Server crash when uploading or adding new podcast #3353
advplyr Sep 1, 2024
b27243a
Translations update from Hosted Weblate (#3351)
weblate Sep 1, 2024
d097c13
Add:Slovenian language option
advplyr Sep 1, 2024
b6bd6be
Version bump v2.13.1
advplyr Sep 1, 2024
623fdd5
Translated using Weblate (Slovenian)
Sep 1, 2024
eb51877
Fix:New authors not setting lastFirst column, updates for new Series …
advplyr Sep 1, 2024
0a59d9b
Fix:Toasts for item details updated
advplyr Sep 1, 2024
4d00551
Update:Remove oldSeries model
advplyr Sep 1, 2024
88c3632
Version bump v2.13.2
advplyr Sep 1, 2024
f32e0eb
Translated using Weblate (Slovenian)
Sep 1, 2024
f4cfdb7
Add: missing default user permission property
nichwall Sep 2, 2024
e58dc47
Allow update of default permission keys missing for user
nichwall Sep 2, 2024
876f668
Update user default permissions
advplyr Sep 2, 2024
9824df1
Fix:Updating root user #3366
advplyr Sep 2, 2024
cdfef1e
Fix:Unlink OpenID button translation string
advplyr Sep 2, 2024
05aa2d9
Update:Batch edit page show confirmation before navigating away with …
advplyr Sep 2, 2024
370c6d6
Translated using Weblate (Bengali)
soaibsafi Sep 2, 2024
1ffd1ee
Translated using Weblate (Slovenian)
Sep 2, 2024
0009de1
Translated using Weblate (Polish)
Akasiek Sep 2, 2024
e99582e
Translated using Weblate (Slovenian)
Sep 2, 2024
1205959
Update translation files
weblate Sep 2, 2024
eec3d0b
Version bump v2.13.3
advplyr Sep 2, 2024
e90ef81
Clean out old unused objects
advplyr Sep 3, 2024
8d97fdd
Cleanup Collection model to remove oldCollection references
advplyr Sep 4, 2024
0ea23b5
Fix:Get all collections API endpoint crashing server #3372
advplyr Sep 5, 2024
6954569
Update:Cleanup logging on library item update #3362
advplyr Sep 6, 2024
cffc864
Update:Format number for entity total in bookshelf toolbar #3370
advplyr Sep 6, 2024
33f3f40
Fix:Byte conversion to use 1000 instead of 1024 to be accurate with a…
advplyr Sep 7, 2024
ae5556d
Convert webp images to jpeg during metadata embed
mikiher Sep 9, 2024
b5906e1
Fix crash when quick match adds new series
mikiher Sep 9, 2024
bff815e
Add a try-catch block around custom provider search
mikiher Sep 9, 2024
32e2b95
Translated using Weblate (Slovenian)
Sep 3, 2024
40d9890
Translated using Weblate (Spanish)
gallegonovato Sep 3, 2024
af1b138
Translated using Weblate (Chinese (Simplified Han script))
springsunx Sep 5, 2024
1281429
Translated using Weblate (Slovenian)
Sep 5, 2024
6c3c3d7
Translated using Weblate (Bengali)
soaibsafi Sep 6, 2024
8df12a4
Translated using Weblate (German)
JBlond Sep 9, 2024
f566b14
Version bump v2.13.4
advplyr Sep 9, 2024
c7af0a5
Add db migration management infratructure
mikiher Sep 4, 2024
59628bd
Fix some packaging and dependency issues
mikiher Sep 4, 2024
c63b1b8
Make migration management more robust
mikiher Sep 7, 2024
84a298e
Put umzug in server/libs and remove unneeded dependencies from it
mikiher Sep 8, 2024
535e679
Update migrations jsdocs
advplyr Sep 10, 2024
4ff928b
Log non-strings into log file like console.log does
mikiher Sep 11, 2024
13b933d
Resolve some weird unrelated flakiness in BookFinder test
mikiher Sep 11, 2024
68088f2
Disregard socketListener.level if level >= FATAL
mikiher Sep 11, 2024
2e02b62
npm update nuxt: 2.17.3 -> 2.18.1
wommy Sep 3, 2024
60b4061
add duration to session when creating
justcallmelarry Sep 12, 2024
37e13ed
add new setDuration and use that
justcallmelarry Sep 12, 2024
3c4a67e
Clean out old unused functions, Device updates for replacing DeviceInfo
advplyr Sep 12, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions .github/workflows/apply_comments.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Add issue comments by label
on:
issues:
types:
- labeled
jobs:
help-wanted:
if: github.event.label.name == 'help wanted'
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Help wanted comment
run: gh issue comment "$NUMBER" --body "$BODY"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.issue.number }}
BODY: >
This issue is not able to be completed due to limited bandwidth or access to the required test hardware.

This issue is available for anyone to work on.


config-issue:
if: github.event.label.name == 'config-issue'
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- name: Config issue comment
run: gh issue close "$NUMBER" --reason "not planned" --comment "$BODY"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_REPO: ${{ github.repository }}
NUMBER: ${{ github.event.issue.number }}
BODY: >
After reviewing this issue, this appears to be a problem with your setup and not Audiobookshelf. This issue is being closed to keep the issue tracker focused on Audiobookshelf itself. Please reach out on the Audiobookshelf Discord for community support.

Some common search terms to help you find the solution to your problem:
- Reverse proxy
- Enabling websockets
- SSL (https vs http)
- Configuring a static IP
- `localhost` versus IP address
- hairpin NAT
- VPN
- firewall ports
- public versus private network
- bridge versus host mode
- Docker networking
- DNS (such as EAI_AGAIN errors)

After you have followed these steps, please post the solution or steps you followed to fix the problem to help others in the future, or show that it is a problem with Audiobookshelf so we can reopen the issue.

5 changes: 2 additions & 3 deletions client/components/app/Appbar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,6 @@ export default {
libraryItems.forEach((item) => {
let subtitle = ''
if (item.mediaType === 'book') subtitle = item.media.metadata.authors.map((au) => au.name).join(', ')
else if (item.mediaType === 'music') subtitle = item.media.metadata.artists.join(', ')
queueItems.push({
libraryItemId: item.id,
libraryId: item.libraryId,
Expand Down Expand Up @@ -332,13 +331,13 @@ export default {
libraryItemIds: this.selectedMediaItems.map((i) => i.id)
})
.then(() => {
this.$toast.success('Batch delete success')
this.$toast.success(this.$strings.ToastBatchDeleteSuccess)
this.$store.commit('globals/resetSelectedMediaItems', [])
this.$eventBus.$emit('bookshelf_clear_selection')
})
.catch((error) => {
console.error('Batch delete failed', error)
this.$toast.error('Batch delete failed')
this.$toast.error(this.$strings.ToastBatchDeleteFailed)
})
.finally(() => {
this.$store.commit('setProcessingBatch', false)
Expand Down
20 changes: 8 additions & 12 deletions client/components/app/BookShelfToolbar.vue
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
{{ seriesName }}
</p>
<div class="w-6 h-6 rounded-full bg-black bg-opacity-30 flex items-center justify-center ml-3">
<span class="font-mono">{{ numShowing }}</span>
<span class="font-mono">{{ $formatNumber(numShowing) }}</span>
</div>
<div class="flex-grow" />

Expand All @@ -63,7 +63,7 @@
</template>
<!-- library & collections page -->
<template v-else-if="page !== 'search' && page !== 'podcast-search' && page !== 'recent-episodes' && !isHome">
<p class="hidden md:block">{{ numShowing }} {{ entityName }}</p>
<p class="hidden md:block">{{ $formatNumber(numShowing) }} {{ entityName }}</p>

<div class="flex-grow hidden sm:inline-block" />

Expand All @@ -80,7 +80,7 @@
<controls-sort-select v-if="isSeriesPage && !isBatchSelecting" v-model="settings.seriesSortBy" :descending.sync="settings.seriesSortDesc" :items="seriesSortItems" class="w-36 sm:w-44 md:w-48 h-7.5 ml-1 sm:ml-4" @change="updateSeriesSort" />

<!-- issues page remove all button -->
<ui-btn v-if="isIssuesFilter && userCanDelete && !isBatchSelecting" :loading="processingIssues" color="error" small class="ml-4" @click="removeAllIssues">{{ $strings.ButtonRemoveAll }} {{ numShowing }} {{ entityName }}</ui-btn>
<ui-btn v-if="isIssuesFilter && userCanDelete && !isBatchSelecting" :loading="processingIssues" color="error" small class="ml-4" @click="removeAllIssues">{{ $strings.ButtonRemoveAll }} {{ $formatNumber(numShowing) }} {{ entityName }}</ui-btn>

<ui-context-menu-dropdown v-if="contextMenuItems.length" :items="contextMenuItems" :menu-width="110" class="ml-2" @action="contextMenuAction" />
</template>
Expand Down Expand Up @@ -246,9 +246,6 @@ export default {
isPodcastLibrary() {
return this.currentLibraryMediaType === 'podcast'
},
isMusicLibrary() {
return this.currentLibraryMediaType === 'music'
},
isLibraryPage() {
return this.page === ''
},
Expand Down Expand Up @@ -281,7 +278,6 @@ export default {
},
entityName() {
if (this.isAlbumsPage) return 'Albums'
if (this.isMusicLibrary) return 'Tracks'

if (this.isPodcastLibrary) return this.$strings.LabelPodcasts
if (!this.page) return this.$strings.LabelBooks
Expand Down Expand Up @@ -473,11 +469,11 @@ export default {
this.$axios
.$get(`/api/me/series/${this.seriesId}/readd-to-continue-listening`)
.then(() => {
this.$toast.success('Series re-added to continue listening')
this.$toast.success(this.$strings.ToastItemUpdateSuccess)
})
.catch((error) => {
console.error('Failed to re-add series to continue listening', error)
this.$toast.error('Failed to re-add series to continue listening')
this.$toast.error(this.$strings.ToastItemUpdateFailed)
})
.finally(() => {
this.processingSeries = false
Expand All @@ -504,7 +500,7 @@ export default {
})
if (!response) {
console.error(`Author ${author.name} not found`)
this.$toast.error(`Author ${author.name} not found`)
this.$toast.error(this.$getString('ToastAuthorNotFound', [author.name]))
} else if (response.updated) {
if (response.author.imagePath) console.log(`Author ${response.author.name} was updated`)
else console.log(`Author ${response.author.name} was updated (no image found)`)
Expand All @@ -522,13 +518,13 @@ export default {
this.$axios
.$delete(`/api/libraries/${this.currentLibraryId}/issues`)
.then(() => {
this.$toast.success('Removed library items with issues')
this.$toast.success(this.$strings.ToastRemoveItemsWithIssuesSuccess)
this.$router.push(`/library/${this.currentLibraryId}/bookshelf`)
this.$store.dispatch('libraries/fetch', this.currentLibraryId)
})
.catch((error) => {
console.error('Failed to remove library items with issues', error)
this.$toast.error('Failed to remove library items with issues')
this.$toast.error(this.$strings.ToastRemoveItemsWithIssuesFailed)
})
.finally(() => {
this.processingIssues = false
Expand Down
13 changes: 2 additions & 11 deletions client/components/app/MediaPlayerContainer.vue
Original file line number Diff line number Diff line change
@@ -1,21 +1,19 @@
<template>
<div v-if="streamLibraryItem" id="mediaPlayerContainer" class="w-full fixed bottom-0 left-0 right-0 h-48 lg:h-40 z-50 bg-primary px-2 lg:px-4 pb-1 lg:pb-4 pt-2">
<div id="videoDock" />
<div class="absolute left-2 top-2 lg:left-4 cursor-pointer">
<covers-book-cover expand-on-click :library-item="streamLibraryItem" :width="bookCoverWidth" :book-cover-aspect-ratio="coverAspectRatio" />
</div>
<div class="flex items-start mb-6 lg:mb-0" :class="playerHandler.isVideo ? 'ml-4 pl-96' : isSquareCover ? 'pl-18 sm:pl-24' : 'pl-12 sm:pl-16'">
<div class="flex items-start mb-6 lg:mb-0" :class="isSquareCover ? 'pl-18 sm:pl-24' : 'pl-12 sm:pl-16'">
<div class="min-w-0 w-full">
<div class="flex items-center">
<nuxt-link :to="`/item/${streamLibraryItem.id}`" class="hover:underline cursor-pointer text-sm sm:text-lg block truncate">
{{ title }}
</nuxt-link>
<widgets-explicit-indicator v-if="isExplicit" />
</div>
<div v-if="!playerHandler.isVideo" class="text-gray-400 flex items-center w-1/2 sm:w-4/5 lg:w-2/5">
<div class="text-gray-400 flex items-center w-1/2 sm:w-4/5 lg:w-2/5">
<span class="material-symbols text-sm">person</span>
<div v-if="podcastAuthor" class="pl-1 sm:pl-1.5 text-xs sm:text-base">{{ podcastAuthor }}</div>
<div v-else-if="musicArtists" class="pl-1 sm:pl-1.5 text-xs sm:text-base">{{ musicArtists }}</div>
<div v-else-if="authors.length" class="pl-1 sm:pl-1.5 text-xs sm:text-base truncate">
<nuxt-link v-for="(author, index) in authors" :key="index" :to="`/author/${author.id}`" class="hover:underline">{{ author.name }}<span v-if="index < authors.length - 1">,&nbsp;</span></nuxt-link>
</div>
Expand Down Expand Up @@ -140,9 +138,6 @@ export default {
isPodcast() {
return this.streamLibraryItem?.mediaType === 'podcast'
},
isMusic() {
return this.streamLibraryItem?.mediaType === 'music'
},
isExplicit() {
return !!this.mediaMetadata.explicit
},
Expand Down Expand Up @@ -174,10 +169,6 @@ export default {
if (!this.isPodcast) return null
return this.mediaMetadata.author || 'Unknown'
},
musicArtists() {
if (!this.isMusic) return null
return this.mediaMetadata.artists.join(', ')
},
hasNextItemInQueue() {
return this.currentPlayerQueueIndex < this.playerQueueItems.length - 1
},
Expand Down
14 changes: 0 additions & 14 deletions client/components/app/SideRail.vue
Original file line number Diff line number Diff line change
Expand Up @@ -95,14 +95,6 @@
<div v-show="isPodcastSearchPage" class="h-full w-0.5 bg-yellow-400 absolute top-0 left-0" />
</nuxt-link>

<nuxt-link v-if="isMusicLibrary" :to="`/library/${currentLibraryId}/bookshelf/albums`" class="w-full h-20 flex flex-col items-center justify-center text-white text-opacity-80 border-b border-primary border-opacity-70 hover:bg-primary cursor-pointer relative" :class="isMusicAlbumsPage ? 'bg-primary bg-opacity-80' : 'bg-bg bg-opacity-60'">
<span class="material-symbols text-xl">album</span>

<p class="pt-1.5 text-center leading-4" style="font-size: 0.9rem">Albums</p>

<div v-show="isMusicAlbumsPage" class="h-full w-0.5 bg-yellow-400 absolute top-0 left-0" />
</nuxt-link>

<nuxt-link v-if="isPodcastLibrary && userIsAdminOrUp" :to="`/library/${currentLibraryId}/podcast/download-queue`" class="w-full h-20 flex flex-col items-center justify-center text-white text-opacity-80 border-b border-primary border-opacity-70 hover:bg-primary cursor-pointer relative" :class="isPodcastDownloadQueuePage ? 'bg-primary bg-opacity-80' : 'bg-bg bg-opacity-60'">
<span class="material-symbols text-2xl">&#xf090;</span>

Expand Down Expand Up @@ -172,9 +164,6 @@ export default {
isPodcastLibrary() {
return this.currentLibraryMediaType === 'podcast'
},
isMusicLibrary() {
return this.currentLibraryMediaType === 'music'
},
isPodcastDownloadQueuePage() {
return this.$route.name === 'library-library-podcast-download-queue'
},
Expand All @@ -184,9 +173,6 @@ export default {
isPodcastLatestPage() {
return this.$route.name === 'library-library-podcast-latest'
},
isMusicAlbumsPage() {
return this.paramId === 'albums'
},
homePage() {
return this.$route.name === 'library-library'
},
Expand Down
Loading
Loading