Fix multiple bugs

This commit is contained in:
Tiberiu Ichim 2026-02-06 22:43:24 +02:00
parent f511e0046d
commit 653db18679
4 changed files with 18 additions and 4 deletions

View file

@ -72,6 +72,8 @@ POST /api/items/batch/move
| `client/pages/item/_id/index.vue` | Single item page context menu integration |
| `client/layouts/default.vue` | Modal registration |
| `client/strings/en-us.json` | Localization strings |
| `client/components/app/LazyBookshelf.vue` | Enhanced selection payload (added libraryId) |
| `client/components/app/BookShelfCategorized.vue` | Enhanced selection payload (added libraryId) |
### Localization Strings Added
@ -160,6 +162,13 @@ Following the initial implementation, several critical areas were improved:
- **Issue**: Nested paths like `media.coverPath` and `libraryFiles.metadata.relPath` were not being updated during moves.
- **Fix**: Improved `handleMoveLibraryItem` to perform recursive path replacement on all associated metadata objects.
### 8. Improved Library Picker Filtering - FIXED
- **Issue**: The "Move to Library" dialog showed all libraries of the same type, including the source library itself, which was redundant and confusing.
- **Fix**:
- Updated selection logic in `LazyBookshelf.vue` and `BookShelfCategorized.vue` to include the source `libraryId` in the selection payload.
- Refactored `MoveToLibraryModal.vue` to compare the source library with available targets and automatically omit the source from the dropdown list.
- Added robust media type detection in the modal to ensure compatibility even when items are moved from mixed-content views like search results.
---
## Known Limitations / Future Work

View file

@ -135,6 +135,7 @@ export default {
if (thisEntity) {
const mediaItem = {
id: thisEntity.id,
libraryId: thisEntity.libraryId,
mediaType: thisEntity.mediaType,
hasTracks: thisEntity.mediaType === 'podcast' || thisEntity.media.audioFile || thisEntity.media.numTracks || (thisEntity.media.tracks && thisEntity.media.tracks.length)
}
@ -146,6 +147,7 @@ export default {
} else {
const mediaItem = {
id: entity.id,
libraryId: entity.libraryId,
mediaType: entity.mediaType,
hasTracks: entity.mediaType === 'podcast' || entity.media.audioFile || entity.media.numTracks || (entity.media.tracks && entity.media.tracks.length)
}

View file

@ -293,6 +293,7 @@ export default {
const mediaItem = {
id: thisEntity.id,
libraryId: thisEntity.libraryId,
mediaType: thisEntity.mediaType,
hasTracks: thisEntity.mediaType === 'podcast' || thisEntity.media.audioFile || thisEntity.media.numTracks || (thisEntity.media.tracks && thisEntity.media.tracks.length)
}
@ -304,6 +305,7 @@ export default {
} else {
const mediaItem = {
id: entity.id,
libraryId: entity.libraryId,
mediaType: entity.mediaType,
hasTracks: entity.mediaType === 'podcast' || entity.media.audioFile || entity.media.numTracks || (entity.media.tracks && entity.media.tracks.length)
}

View file

@ -97,12 +97,13 @@ export default {
if (this.isBatchMode && this.selectedItems.length > 0) {
return this.selectedItems[0].libraryId
}
return this.libraryItem?.libraryId
return this.libraryItem?.libraryId || this.$store.state.libraries.currentLibraryId
},
currentMediaType() {
// Get media type from the current library
const currentLibrary = this.$store.state.libraries.libraries.find((l) => l.id === this.currentLibraryId)
return currentLibrary?.mediaType || 'book'
if (this.isBatchMode && this.selectedItems.length > 0) {
return this.selectedItems[0].mediaType
}
return this.libraryItem?.mediaType || 'book'
},
targetLibraries() {
// Filter libraries to only show compatible ones (same media type, different library)