+
{{ headerText }}
diff --git a/client/components/modals/AddCustomMetadataProviderModal.vue b/client/components/modals/AddCustomMetadataProviderModal.vue
new file mode 100644
index 00000000..bd870890
--- /dev/null
+++ b/client/components/modals/AddCustomMetadataProviderModal.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
Add custom metadata provider
+
+
+
+
+
+
+
diff --git a/client/components/modals/item/tabs/Match.vue b/client/components/modals/item/tabs/Match.vue
index b57e9612..8aa312b5 100644
--- a/client/components/modals/item/tabs/Match.vue
+++ b/client/components/modals/item/tabs/Match.vue
@@ -328,6 +328,17 @@ export default {
console.error('PersistProvider', error)
}
},
+ getDefaultBookProvider() {
+ let provider = localStorage.getItem('book-provider')
+ if (!provider) return 'google'
+ // Validate book provider
+ if (!this.$store.getters['scanners/checkBookProviderExists'](provider)) {
+ console.error('Stored book provider does not exist', provider)
+ localStorage.removeItem('book-provider')
+ return 'google'
+ }
+ return provider
+ },
getSearchQuery() {
if (this.isPodcast) return `term=${encodeURIComponent(this.searchTitle)}`
var searchQuery = `provider=${this.provider}&fallbackTitleOnly=1&title=${encodeURIComponent(this.searchTitle)}`
@@ -434,7 +445,9 @@ export default {
this.searchTitle = this.libraryItem.media.metadata.title
this.searchAuthor = this.libraryItem.media.metadata.authorName || ''
if (this.isPodcast) this.provider = 'itunes'
- else this.provider = localStorage.getItem('book-provider') || 'google'
+ else {
+ this.provider = this.getDefaultBookProvider()
+ }
// Prefer using ASIN if set and using audible provider
if (this.provider.startsWith('audible') && this.libraryItem.media.metadata.asin) {
diff --git a/client/components/tables/CustomMetadataProviderTable.vue b/client/components/tables/CustomMetadataProviderTable.vue
new file mode 100644
index 00000000..13414471
--- /dev/null
+++ b/client/components/tables/CustomMetadataProviderTable.vue
@@ -0,0 +1,127 @@
+
+
+
+
+ {{ $strings.LabelName }} |
+ URL |
+ Authorization Header Value |
+ |
+
+
+ {{ provider.name }} |
+ {{ provider.url }} |
+
+ {{ provider.authHeaderValue }}
+ |
+
+
+
+
+ |
+
+
+
+
No custom metadata providers
+
+
+
+
+
+
+
+
+
+
+
diff --git a/client/layouts/default.vue b/client/layouts/default.vue
index c3cc3484..41d4943a 100644
--- a/client/layouts/default.vue
+++ b/client/layouts/default.vue
@@ -328,6 +328,14 @@ export default {
this.$store.commit('libraries/setEReaderDevices', data.ereaderDevices)
},
+ customMetadataProviderAdded(provider) {
+ if (!provider?.id) return
+ this.$store.commit('scanners/addCustomMetadataProvider', provider)
+ },
+ customMetadataProviderRemoved(provider) {
+ if (!provider?.id) return
+ this.$store.commit('scanners/removeCustomMetadataProvider', provider)
+ },
initializeSocket() {
this.socket = this.$nuxtSocket({
name: process.env.NODE_ENV === 'development' ? 'dev' : 'prod',
@@ -406,6 +414,10 @@ export default {
this.socket.on('batch_quickmatch_complete', this.batchQuickMatchComplete)
this.socket.on('admin_message', this.adminMessageEvt)
+
+ // Custom metadata provider Listeners
+ this.socket.on('custom_metadata_provider_added', this.customMetadataProviderAdded)
+ this.socket.on('custom_metadata_provider_removed', this.customMetadataProviderRemoved)
},
showUpdateToast(versionData) {
var ignoreVersion = localStorage.getItem('ignoreVersion')
diff --git a/client/pages/config/item-metadata-utils/custom-metadata-providers.vue b/client/pages/config/item-metadata-utils/custom-metadata-providers.vue
new file mode 100644
index 00000000..66581dae
--- /dev/null
+++ b/client/pages/config/item-metadata-utils/custom-metadata-providers.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+ arrow_back
+
+
+
+
+
+ help_outline
+
+
+
+
+ {{ $strings.ButtonAdd }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/client/pages/config/item-metadata-utils/index.vue b/client/pages/config/item-metadata-utils/index.vue
index 3a12261b..7d0ba068 100644
--- a/client/pages/config/item-metadata-utils/index.vue
+++ b/client/pages/config/item-metadata-utils/index.vue
@@ -13,6 +13,12 @@
arrow_forward
+
+
{{ $strings.HeaderCustomMetadataProviders }}
+
arrow_forward
+
+