mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2024-12-20 19:06:06 +01:00
implemented suggestions, extended CMPs with series
This commit is contained in:
parent
12c6a1baa0
commit
3b531144cf
@ -9,7 +9,7 @@
|
||||
</ui-tooltip>
|
||||
<div class="flex-grow" />
|
||||
|
||||
<ui-btn color="primary" small @click="setShowAddModal()">{{ $strings.ButtonAdd }}</ui-btn>
|
||||
<ui-btn color="primary" small @click="setShowAddModal">{{ $strings.ButtonAdd }}</ui-btn>
|
||||
</template>
|
||||
|
||||
<tables-custom-metadata-provider-table class="pt-2" />
|
||||
@ -40,6 +40,4 @@ export default {
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
<style></style>
|
||||
|
@ -96,7 +96,6 @@
|
||||
"HeaderAudiobookTools": "Audiobook File Management Tools",
|
||||
"HeaderAudioTracks": "Audio Tracks",
|
||||
"HeaderAuthentication": "Authentication",
|
||||
"HeaderCustomMetadataProviders": "Custom metadata providers",
|
||||
"HeaderBackups": "Backups",
|
||||
"HeaderChangePassword": "Change Password",
|
||||
"HeaderChapters": "Chapters",
|
||||
@ -105,6 +104,7 @@
|
||||
"HeaderCollectionItems": "Collection Items",
|
||||
"HeaderCover": "Cover",
|
||||
"HeaderCurrentDownloads": "Current Downloads",
|
||||
"HeaderCustomMetadataProviders": "Custom metadata providers",
|
||||
"HeaderDetails": "Details",
|
||||
"HeaderDownloadQueue": "Download Queue",
|
||||
"HeaderEbookFiles": "Ebook Files",
|
||||
@ -194,6 +194,7 @@
|
||||
"LabelAllUsersExcludingGuests": "All users excluding guests",
|
||||
"LabelAllUsersIncludingGuests": "All users including guests",
|
||||
"LabelAlreadyInYourLibrary": "Already in your library",
|
||||
"LabelApiKey": "API Key",
|
||||
"LabelAppend": "Append",
|
||||
"LabelAuthor": "Author",
|
||||
"LabelAuthorFirstLast": "Author (First Last)",
|
||||
@ -526,6 +527,7 @@
|
||||
"LabelUploaderDragAndDrop": "Drag & drop files or folders",
|
||||
"LabelUploaderDropFiles": "Drop files",
|
||||
"LabelUploaderItemFetchMetadataHelp": "Automatically fetch title, author, and series",
|
||||
"LabelUrl": "URL",
|
||||
"LabelUseChapterTrack": "Use chapter track",
|
||||
"LabelUseFullTrack": "Use full track",
|
||||
"LabelUser": "User",
|
||||
@ -541,8 +543,6 @@
|
||||
"LabelYourBookmarks": "Your Bookmarks",
|
||||
"LabelYourPlaylists": "Your Playlists",
|
||||
"LabelYourProgress": "Your Progress",
|
||||
"LabelUrl": "URL",
|
||||
"LabelApiKey": "API Key",
|
||||
"MessageAddToPlayerQueue": "Add to player queue",
|
||||
"MessageAppriseDescription": "To use this feature you will need to have an instance of <a href=\"https://github.com/caronc/apprise-api\" target=\"_blank\">Apprise API</a> running or an api that will handle those same requests. <br />The Apprise API Url should be the full URL path to send the notification, e.g., if your API instance is served at <code>http://192.168.1.1:8337</code> then you would put <code>http://192.168.1.1:8337/notify</code>.",
|
||||
"MessageBackupsDescription": "Backups include users, user progress, library item details, server settings, and images stored in <code>/metadata/items</code> & <code>/metadata/authors</code>. Backups <strong>do not</strong> include any files stored in your library folders.",
|
||||
|
@ -86,7 +86,7 @@ components:
|
||||
type: string
|
||||
publisher:
|
||||
type: string
|
||||
published_year:
|
||||
publishedYear:
|
||||
type: string
|
||||
description:
|
||||
type: string
|
||||
@ -107,6 +107,17 @@ components:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
series:
|
||||
type: array
|
||||
items:
|
||||
type: object
|
||||
properties:
|
||||
series:
|
||||
type: string
|
||||
required: true
|
||||
sequence:
|
||||
type: number
|
||||
format: int64
|
||||
language:
|
||||
type: string
|
||||
duration:
|
||||
|
@ -763,7 +763,7 @@ class MiscController {
|
||||
return res.sendStatus(403)
|
||||
}
|
||||
|
||||
const { name, url, apiKey } = req.body;
|
||||
const { name, url, apiKey } = req.body
|
||||
|
||||
if (!name || !url || !apiKey) {
|
||||
return res.status(500).send(`Invalid patch data`)
|
||||
@ -794,18 +794,18 @@ class MiscController {
|
||||
return res.sendStatus(403)
|
||||
}
|
||||
|
||||
const { id } = req.params;
|
||||
const { id } = req.params
|
||||
|
||||
if (!id) {
|
||||
return res.status(500).send(`Invalid delete data`)
|
||||
}
|
||||
|
||||
const provider = await Database.customMetadataProviderModel.findByPk(id);
|
||||
await Database.removeCustomMetadataProviderById(id);
|
||||
const provider = await Database.customMetadataProviderModel.findByPk(id)
|
||||
await Database.removeCustomMetadataProviderById(id)
|
||||
|
||||
SocketAuthority.adminEmitter('custom_metadata_provider_removed', provider)
|
||||
|
||||
res.json({})
|
||||
res.sendStatus(200)
|
||||
}
|
||||
}
|
||||
module.exports = new MiscController()
|
||||
|
@ -26,13 +26,7 @@ class CustomMetadataProvider extends Model {
|
||||
}
|
||||
}
|
||||
|
||||
static findByPk(id) {
|
||||
return this.findOne({
|
||||
where: {
|
||||
id,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize model
|
||||
@ -47,7 +41,7 @@ class CustomMetadataProvider extends Model {
|
||||
},
|
||||
name: DataTypes.STRING,
|
||||
url: DataTypes.STRING,
|
||||
apiKey: DataTypes.STRING
|
||||
apiKey: DataTypes.STRING,
|
||||
}, {
|
||||
sequelize,
|
||||
modelName: 'customMetadataProvider'
|
||||
|
@ -1,6 +1,6 @@
|
||||
const Database = require('../Database')
|
||||
const axios = require("axios");
|
||||
const Logger = require("../Logger");
|
||||
const axios = require("axios")
|
||||
const Logger = require("../Logger")
|
||||
|
||||
class CustomProviderAdapter {
|
||||
constructor() {
|
||||
@ -8,10 +8,10 @@ class CustomProviderAdapter {
|
||||
|
||||
async search(title, author, providerSlug) {
|
||||
const providerId = providerSlug.split("custom-")[1]
|
||||
const provider = await Database.customMetadataProviderModel.findByPk(providerId);
|
||||
const provider = await Database.customMetadataProviderModel.findByPk(providerId)
|
||||
|
||||
if (!provider) {
|
||||
throw new Error("Custom provider not found for the given id");
|
||||
throw new Error("Custom provider not found for the given id")
|
||||
}
|
||||
|
||||
const matches = await axios.get(`${provider.url}/search?query=${encodeURIComponent(title)}${!!author ? `&author=${encodeURIComponent(author)}` : ""}`, {
|
||||
@ -27,7 +27,7 @@ class CustomProviderAdapter {
|
||||
})
|
||||
|
||||
if (matches === null) {
|
||||
throw new Error("Custom provider returned malformed response");
|
||||
throw new Error("Custom provider returned malformed response")
|
||||
}
|
||||
|
||||
// re-map keys to throw out
|
||||
@ -37,13 +37,14 @@ class CustomProviderAdapter {
|
||||
author,
|
||||
narrator,
|
||||
publisher,
|
||||
published_year,
|
||||
publishedYear,
|
||||
description,
|
||||
cover,
|
||||
isbn,
|
||||
asin,
|
||||
genres,
|
||||
tags,
|
||||
series,
|
||||
language,
|
||||
duration,
|
||||
}) => {
|
||||
@ -53,13 +54,14 @@ class CustomProviderAdapter {
|
||||
author,
|
||||
narrator,
|
||||
publisher,
|
||||
publishedYear: published_year,
|
||||
publishedYear,
|
||||
description,
|
||||
cover,
|
||||
isbn,
|
||||
asin,
|
||||
genres,
|
||||
tags: tags.join(","),
|
||||
series: series.length ? series : null,
|
||||
language,
|
||||
duration,
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user