Example of potential plugin implementation

This commit is contained in:
advplyr 2024-12-19 17:48:18 -06:00
parent 71b943f434
commit 62bd7e73f4
15 changed files with 347 additions and 7 deletions

View file

@ -364,6 +364,9 @@ export default {
showCollectionsButton() {
return this.isBook && this.userCanUpdate
},
pluginExtensions() {
return this.$store.getters['getPluginExtensions']('item.detail.actions')
},
contextMenuItems() {
const items = []
@ -429,6 +432,18 @@ export default {
})
}
if (this.pluginExtensions.length) {
this.pluginExtensions.forEach((plugin) => {
const pluginSlug = plugin.slug
plugin.extensions.forEach((pext) => {
items.push({
text: pext.label,
action: `plugin-${pluginSlug}-action-${pext.name}`
})
})
})
}
return items
}
},
@ -763,7 +778,31 @@ export default {
} else if (action === 'share') {
this.$store.commit('setSelectedLibraryItem', this.libraryItem)
this.$store.commit('globals/setShareModal', this.mediaItemShare)
} else if (action.startsWith('plugin-')) {
const actionStrSplit = action.replace('plugin-', '').split('-action-')
const pluginSlug = actionStrSplit[0]
const pluginAction = actionStrSplit[1]
console.log('Plugin action for', pluginSlug, 'with action', pluginAction)
this.onPluginAction(pluginSlug, pluginAction)
}
},
onPluginAction(pluginSlug, pluginAction) {
this.$axios
.$post(`/api/plugins/action`, {
pluginSlug,
pluginAction,
target: 'item.detail.actions',
data: {
entityId: this.libraryItemId,
entityType: 'libraryItem'
}
})
.then((data) => {
console.log('Plugin action response', data)
})
.catch((error) => {
console.error('Plugin action failed', error)
})
}
},
mounted() {

View file

@ -166,10 +166,11 @@ export default {
location.reload()
},
setUser({ user, userDefaultLibraryId, serverSettings, Source, ereaderDevices }) {
setUser({ user, userDefaultLibraryId, serverSettings, Source, ereaderDevices, pluginExtensions }) {
this.$store.commit('setServerSettings', serverSettings)
this.$store.commit('setSource', Source)
this.$store.commit('libraries/setEReaderDevices', ereaderDevices)
this.$store.commit('setPluginExtensions', pluginExtensions)
this.$setServerLanguageCode(serverSettings.language)
if (serverSettings.chromecastEnabled) {