mirror of
https://github.com/Kuingsmile/PicList.git
synced 2026-06-06 00:02:03 +08:00
Added: guiApi for plugins
This commit is contained in:
85
src/main/utils/guiApi.js
Normal file
85
src/main/utils/guiApi.js
Normal file
@@ -0,0 +1,85 @@
|
||||
import {
|
||||
dialog,
|
||||
BrowserWindow,
|
||||
clipboard,
|
||||
Notification
|
||||
} from 'electron'
|
||||
import db from '../../datastore'
|
||||
import Uploader from './uploader'
|
||||
import pasteTemplate from './pasteTemplate'
|
||||
const WEBCONTENTS = Symbol('WEBCONTENTS')
|
||||
const IPCMAIN = Symbol('IPCMAIN')
|
||||
|
||||
class GuiApi {
|
||||
constructor (ipcMain, webcontents) {
|
||||
this[WEBCONTENTS] = webcontents
|
||||
this[IPCMAIN] = ipcMain
|
||||
}
|
||||
|
||||
/**
|
||||
* for plugin showInputBox
|
||||
* @param {object} options
|
||||
* return type is string or ''
|
||||
*/
|
||||
showInputBox (options) {
|
||||
if (options === undefined) {
|
||||
options = {
|
||||
title: '',
|
||||
placeholder: ''
|
||||
}
|
||||
}
|
||||
this[WEBCONTENTS].send('showInputBox', options)
|
||||
return new Promise((resolve, reject) => {
|
||||
this[IPCMAIN].once('showInputBox', (event, value) => {
|
||||
resolve(value)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* for plugin show file explorer
|
||||
* @param {object} options
|
||||
*/
|
||||
showFileExplorer (options) {
|
||||
if (options === undefined) {
|
||||
options = {}
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
dialog.showOpenDialog(BrowserWindow.fromWebContents(this[WEBCONTENTS]), options, filename => {
|
||||
resolve(filename)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* for plugin to upload file
|
||||
* @param {array} input
|
||||
*/
|
||||
async upload (input) {
|
||||
const imgs = await new Uploader(input, this[WEBCONTENTS]).upload()
|
||||
if (imgs !== false) {
|
||||
const pasteStyle = db.read().get('settings.pasteStyle').value() || 'markdown'
|
||||
let pasteText = ''
|
||||
for (let i in imgs) {
|
||||
const url = imgs[i].url || imgs[i].imgUrl
|
||||
pasteText += pasteTemplate(pasteStyle, url) + '\r\n'
|
||||
const notification = new Notification({
|
||||
title: '上传成功',
|
||||
body: imgs[i].imgUrl,
|
||||
icon: imgs[i].imgUrl
|
||||
})
|
||||
setTimeout(() => {
|
||||
notification.show()
|
||||
}, i * 100)
|
||||
db.read().get('uploaded').insert(imgs[i]).write()
|
||||
}
|
||||
clipboard.writeText(pasteText)
|
||||
this[WEBCONTENTS].send('uploadFiles', imgs)
|
||||
this[WEBCONTENTS].send('updateGallery')
|
||||
return imgs
|
||||
}
|
||||
return []
|
||||
}
|
||||
}
|
||||
|
||||
export default GuiApi
|
||||
@@ -1,4 +1,5 @@
|
||||
import path from 'path'
|
||||
import GuiApi from './guiApi'
|
||||
|
||||
// eslint-disable-next-line
|
||||
const requireFunc = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require
|
||||
@@ -50,6 +51,7 @@ const handleGetPluginList = (ipcMain, STORE_PATH, CONFIG_PATH) => {
|
||||
description: pluginPKG.description,
|
||||
logo: 'file://' + path.join(pluginPath, 'logo.png').split(path.sep).join('/'),
|
||||
version: pluginPKG.version,
|
||||
gui: pluginPKG.gui || false,
|
||||
config: {
|
||||
plugin: {
|
||||
name: pluginList[i].replace(/picgo-plugin-/, ''),
|
||||
@@ -66,6 +68,7 @@ const handleGetPluginList = (ipcMain, STORE_PATH, CONFIG_PATH) => {
|
||||
},
|
||||
enabled: picgo.getConfig(`plugins.${pluginList[i]}`),
|
||||
homepage: pluginPKG.homepage ? pluginPKG.homepage : '',
|
||||
guiActions: typeof plugin.guiActions === 'function',
|
||||
ing: false
|
||||
}
|
||||
list.push(obj)
|
||||
@@ -125,6 +128,17 @@ const handleGetPicBedConfig = (ipcMain, CONFIG_PATH) => {
|
||||
})
|
||||
}
|
||||
|
||||
const handlePluginActions = (ipcMain, CONFIG_PATH) => {
|
||||
ipcMain.on('pluginActions', (event, name) => {
|
||||
const picgo = new PicGo(CONFIG_PATH)
|
||||
const plugin = picgo.pluginLoader.getPlugin(`picgo-plugin-${name}`)
|
||||
const guiApi = new GuiApi(ipcMain, event.sender)
|
||||
if (plugin.guiActions && typeof plugin.guiActions === 'function') {
|
||||
plugin.guiActions(picgo, guiApi)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
export default (app, ipcMain) => {
|
||||
const STORE_PATH = app.getPath('userData')
|
||||
const CONFIG_PATH = path.join(STORE_PATH, '/data.json')
|
||||
@@ -133,4 +147,5 @@ export default (app, ipcMain) => {
|
||||
handlePluginUninstall(ipcMain, CONFIG_PATH)
|
||||
handlePluginUpdate(ipcMain, CONFIG_PATH)
|
||||
handleGetPicBedConfig(ipcMain, CONFIG_PATH)
|
||||
handlePluginActions(ipcMain, CONFIG_PATH)
|
||||
}
|
||||
|
||||
@@ -75,9 +75,8 @@ const waitForRename = (window, id) => {
|
||||
}
|
||||
|
||||
class Uploader {
|
||||
constructor (img, type, webContents) {
|
||||
constructor (img, webContents) {
|
||||
this.img = img
|
||||
this.type = type
|
||||
this.webContents = webContents
|
||||
}
|
||||
|
||||
@@ -142,7 +141,11 @@ class Uploader {
|
||||
}
|
||||
})
|
||||
picgo.on('failed', ctx => {
|
||||
console.log(ctx)
|
||||
const notification = new Notification({
|
||||
title: '上传失败',
|
||||
body: '请检查配置和上传的文件是否符合要求'
|
||||
})
|
||||
notification.show()
|
||||
resolve(false)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user