mirror of
https://github.com/Kuingsmile/PicList.git
synced 2025-01-23 14:48:13 -05:00
🚧 WIP: gallery db in progress
This commit is contained in:
parent
12cecc27e7
commit
76964ff1a5
@ -34,6 +34,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@picgo/store": "^1.0.0-alpha.3",
|
||||||
"axios": "^0.19.0",
|
"axios": "^0.19.0",
|
||||||
"core-js": "^3.3.2",
|
"core-js": "^3.3.2",
|
||||||
"element-ui": "^2.13.0",
|
"element-ui": "^2.13.0",
|
||||||
@ -44,6 +45,7 @@
|
|||||||
"lowdb": "^1.0.0",
|
"lowdb": "^1.0.0",
|
||||||
"picgo": "^1.4.21",
|
"picgo": "^1.4.21",
|
||||||
"qrcode.vue": "^1.7.0",
|
"qrcode.vue": "^1.7.0",
|
||||||
|
"uuidv4": "^6.2.11",
|
||||||
"vue": "^2.6.10",
|
"vue": "^2.6.10",
|
||||||
"vue-gallery": "^2.0.1",
|
"vue-gallery": "^2.0.1",
|
||||||
"vue-lazyload": "^1.2.6",
|
"vue-lazyload": "^1.2.6",
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import App from './renderer/App.vue'
|
import App from './renderer/App.vue'
|
||||||
import router from './renderer/router'
|
import router from './renderer/router'
|
||||||
import db from '#/datastore/index'
|
|
||||||
import ElementUI from 'element-ui'
|
import ElementUI from 'element-ui'
|
||||||
import { webFrame } from 'electron'
|
import { webFrame } from 'electron'
|
||||||
import 'element-ui/lib/theme-chalk/index.css'
|
import 'element-ui/lib/theme-chalk/index.css'
|
||||||
@ -10,6 +9,7 @@ import axios from 'axios'
|
|||||||
import mainMixin from './renderer/utils/mainMixin'
|
import mainMixin from './renderer/utils/mainMixin'
|
||||||
import bus from '@/utils/bus'
|
import bus from '@/utils/bus'
|
||||||
import { initTalkingData } from './renderer/utils/analytics'
|
import { initTalkingData } from './renderer/utils/analytics'
|
||||||
|
import db from './renderer/utils/db'
|
||||||
|
|
||||||
webFrame.setVisualZoomLevelLimits(1, 1)
|
webFrame.setVisualZoomLevelLimits(1, 1)
|
||||||
webFrame.setLayoutZoomLevelLimits(0, 0)
|
webFrame.setLayoutZoomLevelLimits(0, 0)
|
||||||
@ -17,7 +17,6 @@ webFrame.setLayoutZoomLevelLimits(0, 0)
|
|||||||
Vue.config.productionTip = false
|
Vue.config.productionTip = false
|
||||||
Vue.prototype.$builtInPicBed = [
|
Vue.prototype.$builtInPicBed = [
|
||||||
'smms',
|
'smms',
|
||||||
'weibo',
|
|
||||||
'imgur',
|
'imgur',
|
||||||
'qiniu',
|
'qiniu',
|
||||||
'tcyun',
|
'tcyun',
|
||||||
@ -25,7 +24,7 @@ Vue.prototype.$builtInPicBed = [
|
|||||||
'aliyun',
|
'aliyun',
|
||||||
'github'
|
'github'
|
||||||
]
|
]
|
||||||
Vue.prototype.$db = db
|
Vue.prototype.$$db = db
|
||||||
Vue.prototype.$http = axios
|
Vue.prototype.$http = axios
|
||||||
Vue.prototype.$bus = bus
|
Vue.prototype.$bus = bus
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import {
|
|||||||
} from 'electron'
|
} from 'electron'
|
||||||
import logger from '@core/picgo/logger'
|
import logger from '@core/picgo/logger'
|
||||||
import GuiApi from '../../gui'
|
import GuiApi from '../../gui'
|
||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants'
|
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants'
|
||||||
import shortKeyService from './shortKeyService'
|
import shortKeyService from './shortKeyService'
|
||||||
import picgo from '@core/picgo'
|
import picgo from '@core/picgo'
|
||||||
|
@ -9,7 +9,7 @@ import {
|
|||||||
} from 'electron'
|
} from 'electron'
|
||||||
import uploader from 'apis/app/uploader'
|
import uploader from 'apis/app/uploader'
|
||||||
import getPicBeds from '~/main/utils/getPicBeds'
|
import getPicBeds from '~/main/utils/getPicBeds'
|
||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import windowManager from 'apis/app/window/windowManager'
|
import windowManager from 'apis/app/window/windowManager'
|
||||||
import { IWindowList } from 'apis/app/window/constants'
|
import { IWindowList } from 'apis/app/window/constants'
|
||||||
import picgo from '@core/picgo'
|
import picgo from '@core/picgo'
|
||||||
|
@ -6,7 +6,7 @@ import windowManager from 'apis/app/window/windowManager'
|
|||||||
import { IWindowList } from 'apis/app/window/constants'
|
import { IWindowList } from 'apis/app/window/constants'
|
||||||
import uploader from '.'
|
import uploader from '.'
|
||||||
import pasteTemplate from '#/utils/pasteTemplate'
|
import pasteTemplate from '#/utils/pasteTemplate'
|
||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import { handleCopyUrl } from '~/main/utils/common'
|
import { handleCopyUrl } from '~/main/utils/common'
|
||||||
import { handleUrlEncode } from '#/utils/common'
|
import { handleUrlEncode } from '#/utils/common'
|
||||||
export const uploadClipboardFiles = async (): Promise<string> => {
|
export const uploadClipboardFiles = async (): Promise<string> => {
|
||||||
|
@ -6,7 +6,7 @@ import {
|
|||||||
} from 'electron'
|
} from 'electron'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import picgo from '@core/picgo'
|
import picgo from '@core/picgo'
|
||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import windowManager from 'apis/app/window/windowManager'
|
import windowManager from 'apis/app/window/windowManager'
|
||||||
import { IWindowList } from 'apis/app/window/constants'
|
import { IWindowList } from 'apis/app/window/constants'
|
||||||
import util from 'util'
|
import util from 'util'
|
||||||
|
@ -8,7 +8,7 @@ import {
|
|||||||
import { IWindowListItem } from '#/types/electron'
|
import { IWindowListItem } from '#/types/electron'
|
||||||
import bus from '@core/bus'
|
import bus from '@core/bus'
|
||||||
import { CREATE_APP_MENU } from '@core/bus/constants'
|
import { CREATE_APP_MENU } from '@core/bus/constants'
|
||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants'
|
import { TOGGLE_SHORTKEY_MODIFIED_MODE } from '#/events/constants'
|
||||||
import { app } from 'electron'
|
import { app } from 'electron'
|
||||||
|
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
import { app } from 'electron'
|
import { remote, app } from 'electron'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
const APP = process.type === 'renderer' ? remote.app : app
|
||||||
|
const STORE_PATH = APP.getPath('userData')
|
||||||
|
const configFilePath = path.join(STORE_PATH, 'data.json')
|
||||||
|
const configFileBackupPath = path.join(STORE_PATH, 'data.bak.json')
|
||||||
|
|
||||||
const errorMsg = {
|
const errorMsg = {
|
||||||
broken: 'PicGo 配置文件损坏,已经恢复为默认配置',
|
broken: 'PicGo 配置文件损坏,已经恢复为默认配置',
|
||||||
@ -11,9 +15,6 @@ const errorMsg = {
|
|||||||
function dbChecker () {
|
function dbChecker () {
|
||||||
if (process.type !== 'renderer') {
|
if (process.type !== 'renderer') {
|
||||||
if (!global.notificationList) global.notificationList = []
|
if (!global.notificationList) global.notificationList = []
|
||||||
const STORE_PATH = app.getPath('userData')
|
|
||||||
const configFilePath = path.join(STORE_PATH, 'data.json')
|
|
||||||
const configFileBackupPath = path.join(STORE_PATH, 'data.bak.json')
|
|
||||||
if (!fs.existsSync(configFilePath)) {
|
if (!fs.existsSync(configFilePath)) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -50,6 +51,37 @@ function dbChecker () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export {
|
/**
|
||||||
dbChecker
|
* Get config path
|
||||||
|
*/
|
||||||
|
function dbPathChecker (): string {
|
||||||
|
const defaultConfigPath = configFilePath
|
||||||
|
if (process.type !== 'renderer') {
|
||||||
|
// if defaultConfig path is not exit
|
||||||
|
// do not parse the content of config
|
||||||
|
if (!fs.existsSync(defaultConfigPath)) {
|
||||||
|
return defaultConfigPath
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
const configString = fs.readFileSync(configFilePath, { encoding: 'utf-8' })
|
||||||
|
const config = JSON.parse(configString)
|
||||||
|
const userConfigPath: string = config.configPath || ''
|
||||||
|
if (userConfigPath) {
|
||||||
|
if (fs.existsSync(userConfigPath) && userConfigPath.endsWith('.json')) {
|
||||||
|
return userConfigPath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return defaultConfigPath
|
||||||
|
} catch (e) {
|
||||||
|
// TODO: local logger is needed
|
||||||
|
console.error(e)
|
||||||
|
return defaultConfigPath
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return defaultConfigPath
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
dbChecker,
|
||||||
|
dbPathChecker
|
||||||
}
|
}
|
@ -2,25 +2,27 @@ import Datastore from 'lowdb'
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import LodashId from 'lodash-id'
|
import LodashId from 'lodash-id'
|
||||||
import FileSync from 'lowdb/adapters/FileSync'
|
import FileSync from 'lowdb/adapters/FileSync'
|
||||||
import path from 'path'
|
|
||||||
import fs from 'fs-extra'
|
import fs from 'fs-extra'
|
||||||
import { remote, app } from 'electron'
|
import path from 'path'
|
||||||
import { dbChecker } from './dbChecker'
|
import { app } from 'electron'
|
||||||
|
import { dbPathChecker } from './dbChecker'
|
||||||
|
import { DBStore } from '@picgo/store'
|
||||||
|
|
||||||
const APP = process.type === 'renderer' ? remote.app : app
|
const APP = app
|
||||||
const STORE_PATH = APP.getPath('userData')
|
const STORE_PATH = APP.getPath('userData')
|
||||||
|
|
||||||
if (process.type !== 'renderer') {
|
|
||||||
if (!fs.pathExistsSync(STORE_PATH)) {
|
if (!fs.pathExistsSync(STORE_PATH)) {
|
||||||
fs.mkdirpSync(STORE_PATH)
|
fs.mkdirpSync(STORE_PATH)
|
||||||
}
|
}
|
||||||
dbChecker()
|
const CONFIG_PATH: string = dbPathChecker()
|
||||||
}
|
const CONFIG_DIR = path.dirname(CONFIG_PATH)
|
||||||
|
const DB_PATH = path.join(CONFIG_DIR, 'picgo.db')
|
||||||
|
|
||||||
class DB {
|
// TODO: use JSONStore with @picgo/store
|
||||||
|
class ConfigStore {
|
||||||
private db: Datastore.LowdbSync<Datastore.AdapterSync>
|
private db: Datastore.LowdbSync<Datastore.AdapterSync>
|
||||||
constructor () {
|
constructor () {
|
||||||
const adapter = new FileSync(path.join(STORE_PATH, '/data.json'))
|
const adapter = new FileSync(CONFIG_PATH)
|
||||||
|
|
||||||
this.db = Datastore(adapter)
|
this.db = Datastore(adapter)
|
||||||
this.db._.mixin(LodashId)
|
this.db._.mixin(LodashId)
|
||||||
@ -77,4 +79,11 @@ class DB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new DB()
|
export default new ConfigStore()
|
||||||
|
|
||||||
|
// v2.3.0 add gallery db
|
||||||
|
const dbStore = new DBStore(DB_PATH, 'gallery')
|
||||||
|
|
||||||
|
export {
|
||||||
|
dbStore
|
||||||
|
}
|
@ -1,14 +1,10 @@
|
|||||||
import PicGoCore from '~/universal/types/picgo'
|
import PicGoCore from '~/universal/types/picgo'
|
||||||
import {
|
import { dbPathChecker } from 'apis/core/datastore/dbChecker'
|
||||||
app
|
|
||||||
} from 'electron'
|
|
||||||
import path from 'path'
|
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
const requireFunc = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require
|
const requireFunc = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require
|
||||||
const PicGo = requireFunc('picgo') as typeof PicGoCore
|
const PicGo = requireFunc('picgo') as typeof PicGoCore
|
||||||
const STORE_PATH = app.getPath('userData')
|
|
||||||
|
|
||||||
const CONFIG_PATH = path.join(STORE_PATH, '/data.json')
|
const CONFIG_PATH = dbPathChecker()
|
||||||
|
|
||||||
const picgo = new PicGo(CONFIG_PATH)
|
const picgo = new PicGo(CONFIG_PATH)
|
||||||
picgo.saveConfig({
|
picgo.saveConfig({
|
||||||
@ -16,7 +12,6 @@ picgo.saveConfig({
|
|||||||
PICGO_ENV: 'GUI'
|
PICGO_ENV: 'GUI'
|
||||||
})
|
})
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
picgo.GUI_VERSION = global.PICGO_GUI_VERSION
|
picgo.GUI_VERSION = global.PICGO_GUI_VERSION
|
||||||
|
|
||||||
export default picgo! as PicGoCore
|
export default picgo! as PicGoCore
|
||||||
|
@ -4,7 +4,7 @@ import {
|
|||||||
Notification,
|
Notification,
|
||||||
ipcMain
|
ipcMain
|
||||||
} from 'electron'
|
} from 'electron'
|
||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import uploader from 'apis/app/uploader'
|
import uploader from 'apis/app/uploader'
|
||||||
import pasteTemplate from '#/utils/pasteTemplate'
|
import pasteTemplate from '#/utils/pasteTemplate'
|
||||||
import { handleCopyUrl } from '~/main/utils/common'
|
import { handleCopyUrl } from '~/main/utils/common'
|
||||||
|
@ -8,7 +8,7 @@ import windowManager from 'apis/app/window/windowManager'
|
|||||||
import { IWindowList } from 'apis/app/window/constants'
|
import { IWindowList } from 'apis/app/window/constants'
|
||||||
import uploader from 'apis/app/uploader'
|
import uploader from 'apis/app/uploader'
|
||||||
import pasteTemplate from '#/utils/pasteTemplate'
|
import pasteTemplate from '#/utils/pasteTemplate'
|
||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import server from '~/main/server'
|
import server from '~/main/server'
|
||||||
import getPicBeds from '~/main/utils/getPicBeds'
|
import getPicBeds from '~/main/utils/getPicBeds'
|
||||||
import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler'
|
import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler'
|
||||||
|
@ -16,6 +16,7 @@ import { IGuiMenuItem } from 'picgo/dist/src/types'
|
|||||||
import windowManager from 'apis/app/window/windowManager'
|
import windowManager from 'apis/app/window/windowManager'
|
||||||
import { IWindowList } from 'apis/app/window/constants'
|
import { IWindowList } from 'apis/app/window/constants'
|
||||||
import { showNotification } from '~/main/utils/common'
|
import { showNotification } from '~/main/utils/common'
|
||||||
|
import { PICGO_SAVE_CONFIG, PICGO_GET_CONFIG } from '#/events/constants'
|
||||||
|
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
const requireFunc = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require
|
const requireFunc = typeof __webpack_require__ === 'function' ? __non_webpack_require__ : require
|
||||||
@ -229,12 +230,19 @@ const handleRemoveFiles = () => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const handlePicGoSaveData = () => {
|
const handlePicGoSaveConfig = () => {
|
||||||
ipcMain.on('picgoSaveData', (event: IpcMainEvent, data: IObj) => {
|
ipcMain.on(PICGO_SAVE_CONFIG, (event: IpcMainEvent, data: IObj) => {
|
||||||
picgo.saveConfig(data)
|
picgo.saveConfig(data)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handlePicGoGetConfig = () => {
|
||||||
|
ipcMain.on(PICGO_GET_CONFIG, (event: IpcMainEvent, key: string | undefined, callbackId: string) => {
|
||||||
|
const result = picgo.getConfig(key)
|
||||||
|
event.sender.send(PICGO_GET_CONFIG, result, callbackId)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const handleImportLocalPlugin = () => {
|
const handleImportLocalPlugin = () => {
|
||||||
ipcMain.on('importLocalPlugin', (event: IpcMainEvent) => {
|
ipcMain.on('importLocalPlugin', (event: IpcMainEvent) => {
|
||||||
const settingWindow = windowManager.get(IWindowList.SETTING_WINDOW)!
|
const settingWindow = windowManager.get(IWindowList.SETTING_WINDOW)!
|
||||||
@ -271,7 +279,8 @@ export default {
|
|||||||
handleGetPicBedConfig()
|
handleGetPicBedConfig()
|
||||||
handlePluginActions()
|
handlePluginActions()
|
||||||
handleRemoveFiles()
|
handleRemoveFiles()
|
||||||
handlePicGoSaveData()
|
handlePicGoSaveConfig()
|
||||||
|
handlePicGoGetConfig()
|
||||||
handleImportLocalPlugin()
|
handleImportLocalPlugin()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ const LOG_PATH = path.join(STORE_PATH, '/picgo.log')
|
|||||||
|
|
||||||
// since the error may occur in picgo-core
|
// since the error may occur in picgo-core
|
||||||
// so we can't use the log from picgo
|
// so we can't use the log from picgo
|
||||||
const loggerWriter = (error: Error) => {
|
export const loggerWriter = (error: Error) => {
|
||||||
let log = `${dayjs().format('YYYY-MM-DD HH:mm:ss')} [PicGo ERROR] startup error`
|
let log = `${dayjs().format('YYYY-MM-DD HH:mm:ss')} [PicGo ERROR] startup error`
|
||||||
if (error?.stack) {
|
if (error?.stack) {
|
||||||
log += `\n------Error Stack Begin------\n${util.format(error.stack)}\n-------Error Stack End-------\n`
|
log += `\n------Error Stack Begin------\n${util.format(error.stack)}\n-------Error Stack End-------\n`
|
||||||
|
@ -29,7 +29,7 @@ import server from '~/main/server/index'
|
|||||||
import updateChecker from '~/main/utils/updateChecker'
|
import updateChecker from '~/main/utils/updateChecker'
|
||||||
import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler'
|
import shortKeyHandler from 'apis/app/shortKey/shortKeyHandler'
|
||||||
import { getUploadFiles } from '~/main/utils/handleArgv'
|
import { getUploadFiles } from '~/main/utils/handleArgv'
|
||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import bus from '@core/bus'
|
import bus from '@core/bus'
|
||||||
import { privacyManager } from '~/main/utils/privacyManager'
|
import { privacyManager } from '~/main/utils/privacyManager'
|
||||||
import logger from 'apis/core/picgo/logger'
|
import logger from 'apis/core/picgo/logger'
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import DB from '#/datastore'
|
import DB from '~/main/apis/core/datastore'
|
||||||
// from v2.1.2
|
// from v2.1.2
|
||||||
const updateShortKeyFromVersion212 = (db: typeof DB, shortKeyConfig: IShortKeyConfigs | IOldShortKeyConfigs) => {
|
const updateShortKeyFromVersion212 = (db: typeof DB, shortKeyConfig: IShortKeyConfigs | IOldShortKeyConfigs) => {
|
||||||
// #557 极端情况可能会出现配置不存在,需要重新写入
|
// #557 极端情况可能会出现配置不存在,需要重新写入
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import { clipboard, Notification, dialog } from 'electron'
|
import { clipboard, Notification, dialog } from 'electron'
|
||||||
|
|
||||||
export const handleCopyUrl = (str: string): void => {
|
export const handleCopyUrl = (str: string): void => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import { ipcMain } from 'electron'
|
import { ipcMain } from 'electron'
|
||||||
import { showMessageBox } from '~/main/utils/common'
|
import { showMessageBox } from '~/main/utils/common'
|
||||||
import { SHOW_PRIVACY_MESSAGE } from '~/universal/events/constants'
|
import { SHOW_PRIVACY_MESSAGE } from '~/universal/events/constants'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { dialog, shell } from 'electron'
|
import { dialog, shell } from 'electron'
|
||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
import pkg from 'root/package.json'
|
import pkg from 'root/package.json'
|
||||||
import { lt } from 'semver'
|
import { lt } from 'semver'
|
||||||
|
@ -8,33 +8,29 @@
|
|||||||
</el-switch>
|
</el-switch>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script lang="ts">
|
||||||
export default {
|
import { Component, Vue, Prop } from 'vue-property-decorator'
|
||||||
name: 'choose-pic-bed',
|
@Component({
|
||||||
props: {
|
name: 'choose-pic-bed'
|
||||||
type: String,
|
})
|
||||||
label: String
|
export default class extends Vue {
|
||||||
},
|
value = false
|
||||||
data () {
|
@Prop() type!: string
|
||||||
return {
|
@Prop() label!: string
|
||||||
value: false
|
async created () {
|
||||||
}
|
const current = await this.getConfig<string>('picBed.current')
|
||||||
},
|
if (this.type === current) {
|
||||||
created () {
|
|
||||||
if (this.type === this.$db.get('picBed.current')) {
|
|
||||||
this.value = true
|
this.value = true
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
methods: {
|
choosePicBed (val: string) {
|
||||||
choosePicBed (val) {
|
this.saveConfig({
|
||||||
this.letPicGoSaveData({
|
|
||||||
'picBed.current': this.type,
|
'picBed.current': this.type,
|
||||||
'picBed.uploader': this.type
|
'picBed.uploader': this.type
|
||||||
})
|
})
|
||||||
this.$emit('update:choosed', this.type)
|
this.$emit('update:choosed', this.type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
<style lang='stylus'>
|
<style lang='stylus'>
|
||||||
</style>
|
</style>
|
||||||
|
@ -80,10 +80,10 @@ export default class extends Vue {
|
|||||||
deep: true,
|
deep: true,
|
||||||
immediate: true
|
immediate: true
|
||||||
})
|
})
|
||||||
handleConfigChange (val: any) {
|
async handleConfigChange (val: any) {
|
||||||
this.ruleForm = Object.assign({}, {})
|
this.ruleForm = Object.assign({}, {})
|
||||||
const config = this.$db.get(`picBed.${this.id}`)
|
const config = await this.getConfig<IPicGoPluginConfig>(`picBed.${this.id}`)
|
||||||
if (val.length > 0) {
|
if (val.length > 0 && config) {
|
||||||
this.configList = cloneDeep(val).map((item: any) => {
|
this.configList = cloneDeep(val).map((item: any) => {
|
||||||
let defaultValue = item.default !== undefined
|
let defaultValue = item.default !== undefined
|
||||||
? item.default : item.type === 'checkbox'
|
? item.default : item.type === 'checkbox'
|
||||||
|
@ -91,35 +91,6 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-dialog
|
|
||||||
title="自定义链接格式"
|
|
||||||
:visible.sync="customLinkVisible"
|
|
||||||
>
|
|
||||||
<el-form
|
|
||||||
label-position="top"
|
|
||||||
:model="customLink"
|
|
||||||
ref="customLink"
|
|
||||||
:rules="rules"
|
|
||||||
>
|
|
||||||
<el-form-item
|
|
||||||
label="用占位符$url来表示url的位置"
|
|
||||||
prop="value"
|
|
||||||
>
|
|
||||||
<el-input
|
|
||||||
class="align-center"
|
|
||||||
v-model="customLink.value"
|
|
||||||
:autofocus="true"
|
|
||||||
></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
<div>
|
|
||||||
如[]($url)
|
|
||||||
</div>
|
|
||||||
<span slot="footer">
|
|
||||||
<el-button @click="cancelCustomLink">取消</el-button>
|
|
||||||
<el-button type="primary" @click="confirmCustomLink">确定</el-button>
|
|
||||||
</span>
|
|
||||||
</el-dialog>
|
|
||||||
<el-dialog
|
<el-dialog
|
||||||
class="qrcode-dialog"
|
class="qrcode-dialog"
|
||||||
top="3vh"
|
top="3vh"
|
||||||
@ -183,12 +154,13 @@ import {
|
|||||||
IpcRendererEvent,
|
IpcRendererEvent,
|
||||||
clipboard
|
clipboard
|
||||||
} from 'electron'
|
} from 'electron'
|
||||||
import db from '#/datastore'
|
// import db from '#/datastore'
|
||||||
import mixin from '@/utils/mixin'
|
import mixin from '@/utils/mixin'
|
||||||
import InputBoxDialog from '@/components/InputBoxDialog.vue'
|
import InputBoxDialog from '@/components/InputBoxDialog.vue'
|
||||||
import {
|
import {
|
||||||
SHOW_PRIVACY_MESSAGE
|
SHOW_PRIVACY_MESSAGE
|
||||||
} from '~/universal/events/constants'
|
} from '~/universal/events/constants'
|
||||||
|
import { IConfig } from 'picgo/dist/src/types/index'
|
||||||
const { Menu, dialog, BrowserWindow } = remote
|
const { Menu, dialog, BrowserWindow } = remote
|
||||||
const customLinkRule = (rule: string, value: string, callback: (arg0?: Error) => void) => {
|
const customLinkRule = (rule: string, value: string, callback: (arg0?: Error) => void) => {
|
||||||
if (!/\$url/.test(value)) {
|
if (!/\$url/.test(value)) {
|
||||||
@ -212,18 +184,7 @@ export default class extends Vue {
|
|||||||
visible = false
|
visible = false
|
||||||
keyBindingVisible = false
|
keyBindingVisible = false
|
||||||
customLinkVisible = false
|
customLinkVisible = false
|
||||||
customLink = {
|
|
||||||
value: db.get('customLink') || '$url'
|
|
||||||
}
|
|
||||||
rules = {
|
|
||||||
value: [
|
|
||||||
{ validator: customLinkRule, trigger: 'blur' }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
os = ''
|
os = ''
|
||||||
shortKey: IShortKeyMap = {
|
|
||||||
upload: db.get('shortKey.upload')
|
|
||||||
}
|
|
||||||
picBed: IPicBedType[] = []
|
picBed: IPicBedType[] = []
|
||||||
qrcodeVisible = false
|
qrcodeVisible = false
|
||||||
picBedConfigString = ''
|
picBedConfigString = ''
|
||||||
@ -238,8 +199,8 @@ export default class extends Vue {
|
|||||||
@Watch('choosedPicBedForQRCode')
|
@Watch('choosedPicBedForQRCode')
|
||||||
choosedPicBedForQRCodeChange (val: string[], oldVal: string[]) {
|
choosedPicBedForQRCodeChange (val: string[], oldVal: string[]) {
|
||||||
if (val.length > 0) {
|
if (val.length > 0) {
|
||||||
this.$nextTick(() => {
|
this.$nextTick(async () => {
|
||||||
const picBedConfig = db.get('picBed')
|
const picBedConfig = await this.getConfig('picBed')
|
||||||
const config = pick(picBedConfig, ...this.choosedPicBedForQRCode)
|
const config = pick(picBedConfig, ...this.choosedPicBedForQRCode)
|
||||||
this.picBedConfigString = JSON.stringify(config)
|
this.picBedConfigString = JSON.stringify(config)
|
||||||
})
|
})
|
||||||
@ -318,29 +279,6 @@ export default class extends Vue {
|
|||||||
// this.menu!.popup(remote.getCurrentWindow())
|
// this.menu!.popup(remote.getCurrentWindow())
|
||||||
this.menu!.popup()
|
this.menu!.popup()
|
||||||
}
|
}
|
||||||
keyDetect (type: string, event: KeyboardEvent) {
|
|
||||||
this.shortKey[type] = keyDetect(event).join('+')
|
|
||||||
}
|
|
||||||
cancelKeyBinding () {
|
|
||||||
this.keyBindingVisible = false
|
|
||||||
this.shortKey = db.get('shortKey')
|
|
||||||
}
|
|
||||||
cancelCustomLink () {
|
|
||||||
this.customLinkVisible = false
|
|
||||||
this.customLink.value = db.get('customLink') || '$url'
|
|
||||||
}
|
|
||||||
confirmCustomLink () {
|
|
||||||
// @ts-ignore
|
|
||||||
this.$refs.customLink.validate((valid: boolean) => {
|
|
||||||
if (valid) {
|
|
||||||
db.set('customLink', this.customLink.value)
|
|
||||||
this.customLinkVisible = false
|
|
||||||
ipcRenderer.send('updateCustomLink')
|
|
||||||
} else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
openMiniWindow () {
|
openMiniWindow () {
|
||||||
ipcRenderer.send('openMiniWindow')
|
ipcRenderer.send('openMiniWindow')
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,9 @@
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
import gallerys from 'vue-gallery'
|
import gallerys from 'vue-gallery'
|
||||||
import pasteStyle from '#/utils/pasteTemplate'
|
import pasteStyle from '#/utils/pasteTemplate'
|
||||||
|
import { IPasteStyle } from '#/types/enum'
|
||||||
import { Component, Vue, Watch } from 'vue-property-decorator'
|
import { Component, Vue, Watch } from 'vue-property-decorator'
|
||||||
|
import { IResult } from '@picgo/store/dist/types'
|
||||||
import {
|
import {
|
||||||
ipcRenderer,
|
ipcRenderer,
|
||||||
clipboard,
|
clipboard,
|
||||||
@ -194,6 +196,7 @@ export default class extends Vue {
|
|||||||
getPicBeds (event: IpcRendererEvent, picBeds: IPicBedType[]) {
|
getPicBeds (event: IpcRendererEvent, picBeds: IPicBedType[]) {
|
||||||
this.picBed = picBeds
|
this.picBed = picBeds
|
||||||
}
|
}
|
||||||
|
// FIXME: gallery db && async computed - -||.....
|
||||||
getGallery () {
|
getGallery () {
|
||||||
if (this.choosedPicBed.length > 0) {
|
if (this.choosedPicBed.length > 0) {
|
||||||
let arr: ImgInfo[] = []
|
let arr: ImgInfo[] = []
|
||||||
@ -204,7 +207,6 @@ export default class extends Vue {
|
|||||||
if (this.searchText) {
|
if (this.searchText) {
|
||||||
obj.fileName = this.searchText
|
obj.fileName = this.searchText
|
||||||
}
|
}
|
||||||
// @ts-ignore
|
|
||||||
arr = arr.concat(this.$db.read().get('uploaded').filter(obj => {
|
arr = arr.concat(this.$db.read().get('uploaded').filter(obj => {
|
||||||
return obj.fileName.indexOf(this.searchText) !== -1 && obj.type === item
|
return obj.fileName.indexOf(this.searchText) !== -1 && obj.type === item
|
||||||
}).reverse().value())
|
}).reverse().value())
|
||||||
@ -212,6 +214,7 @@ export default class extends Vue {
|
|||||||
this.images = arr
|
this.images = arr
|
||||||
} else {
|
} else {
|
||||||
if (this.searchText) {
|
if (this.searchText) {
|
||||||
|
// FIXME: gallery db
|
||||||
let data = this.$db.read().get('uploaded')
|
let data = this.$db.read().get('uploaded')
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
.filter(item => {
|
.filter(item => {
|
||||||
@ -219,7 +222,7 @@ export default class extends Vue {
|
|||||||
}).reverse().value()
|
}).reverse().value()
|
||||||
this.images = data
|
this.images = data
|
||||||
} else {
|
} else {
|
||||||
// @ts-ignore
|
// FIXME: gallery db
|
||||||
this.images = this.$db.read().get('uploaded').slice().reverse().value()
|
this.images = this.$db.read().get('uploaded').slice().reverse().value()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -267,8 +270,8 @@ export default class extends Vue {
|
|||||||
this.idx = null
|
this.idx = null
|
||||||
this.changeZIndexForGallery(false)
|
this.changeZIndexForGallery(false)
|
||||||
}
|
}
|
||||||
copy (item: ImgInfo) {
|
async copy (item: ImgInfo) {
|
||||||
const style = this.$db.get('settings.pasteStyle') || 'markdown'
|
const style = await this.getConfig<IPasteStyle>('settings.pasteStyle') || IPasteStyle.MARKDOWN
|
||||||
const copyLink = pasteStyle(style, item)
|
const copyLink = pasteStyle(style, item)
|
||||||
const obj = {
|
const obj = {
|
||||||
title: '复制链接成功',
|
title: '复制链接成功',
|
||||||
@ -286,9 +289,9 @@ export default class extends Vue {
|
|||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
}).then(() => {
|
}).then(async () => {
|
||||||
const file = this.$db.getById('uploaded', id)
|
const file = await this.$$db.getById(id)
|
||||||
this.$db.removeById('uploaded', id)
|
await this.$$db.removeById(id)
|
||||||
ipcRenderer.send('removeFiles', [file])
|
ipcRenderer.send('removeFiles', [file])
|
||||||
const obj = {
|
const obj = {
|
||||||
title: '操作结果',
|
title: '操作结果',
|
||||||
@ -309,12 +312,10 @@ export default class extends Vue {
|
|||||||
this.imgInfo.imgUrl = item.imgUrl as string
|
this.imgInfo.imgUrl = item.imgUrl as string
|
||||||
this.dialogVisible = true
|
this.dialogVisible = true
|
||||||
}
|
}
|
||||||
confirmModify () {
|
async confirmModify () {
|
||||||
this.$db.read().get('uploaded')
|
await this.$$db.updateById(this.imgInfo.id, {
|
||||||
// @ts-ignore
|
imgUrl: this.imgInfo.imgUrl
|
||||||
.getById(this.imgInfo.id)
|
})
|
||||||
.assign({ imgUrl: this.imgInfo.imgUrl })
|
|
||||||
.write()
|
|
||||||
const obj = {
|
const obj = {
|
||||||
title: '修改图片URL成功',
|
title: '修改图片URL成功',
|
||||||
body: this.imgInfo.imgUrl,
|
body: this.imgInfo.imgUrl,
|
||||||
@ -355,15 +356,19 @@ export default class extends Vue {
|
|||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
cancelButtonText: '取消',
|
cancelButtonText: '取消',
|
||||||
type: 'warning'
|
type: 'warning'
|
||||||
}).then(() => {
|
}).then(async () => {
|
||||||
let files: ImgInfo[] = []
|
let files: IResult<ImgInfo>[] = []
|
||||||
Object.keys(this.choosedList).forEach(key => {
|
const imageIDList = Object.keys(this.choosedList)
|
||||||
|
for (let i = 0; i < imageIDList.length; i++) {
|
||||||
|
const key = imageIDList[i]
|
||||||
if (this.choosedList[key]) {
|
if (this.choosedList[key]) {
|
||||||
const file = this.$db.getById('uploaded', key)
|
const file = await this.$$db.getById<ImgInfo>(key)
|
||||||
|
if (file) {
|
||||||
files.push(file)
|
files.push(file)
|
||||||
this.$db.removeById('uploaded', key)
|
await this.$$db.removeById(key)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
|
||||||
this.clearChoosedList()
|
this.clearChoosedList()
|
||||||
this.choosedList = {} // 只有删除才能将这个置空
|
this.choosedList = {} // 只有删除才能将这个置空
|
||||||
this.getGallery()
|
this.getGallery()
|
||||||
@ -381,18 +386,22 @@ export default class extends Vue {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
multiCopy () {
|
async multiCopy () {
|
||||||
if (Object.values(this.choosedList).some(item => item)) {
|
if (Object.values(this.choosedList).some(item => item)) {
|
||||||
const copyString: string[] = []
|
const copyString: string[] = []
|
||||||
const style = this.$db.get('settings.pasteStyle') || 'markdown'
|
const style = await this.getConfig<IPasteStyle>('settings.pasteStyle') || IPasteStyle.MARKDOWN
|
||||||
// choosedList -> { [id]: true or false }; true means choosed. false means not choosed.
|
// choosedList -> { [id]: true or false }; true means choosed. false means not choosed.
|
||||||
Object.keys(this.choosedList).forEach(key => {
|
const imageIDList = Object.keys(this.choosedList)
|
||||||
|
for (let i = 0; i < imageIDList.length; i++) {
|
||||||
|
const key = imageIDList[i]
|
||||||
if (this.choosedList[key]) {
|
if (this.choosedList[key]) {
|
||||||
const item = this.$db.getById('uploaded', key)
|
const item = await this.$$db.getById<ImgInfo>(key)
|
||||||
|
if (item) {
|
||||||
copyString.push(pasteStyle(style, item))
|
copyString.push(pasteStyle(style, item))
|
||||||
this.choosedList[key] = false
|
this.choosedList[key] = false
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
|
}
|
||||||
const obj = {
|
const obj = {
|
||||||
title: '批量复制链接成功',
|
title: '批量复制链接成功',
|
||||||
body: copyString.join('\n')
|
body: copyString.join('\n')
|
||||||
@ -407,11 +416,11 @@ export default class extends Vue {
|
|||||||
toggleHandleBar () {
|
toggleHandleBar () {
|
||||||
this.handleBarActive = !this.handleBarActive
|
this.handleBarActive = !this.handleBarActive
|
||||||
}
|
}
|
||||||
getPasteStyle () {
|
// getPasteStyle () {
|
||||||
this.pasteStyle = this.$db.get('settings.pasteStyle') || 'markdown'
|
// this.pasteStyle = this.$db.get('settings.pasteStyle') || 'markdown'
|
||||||
}
|
// }
|
||||||
handlePasteStyleChange (val: string) {
|
async handlePasteStyleChange (val: string) {
|
||||||
this.$db.set('settings.pasteStyle', val)
|
this.saveConfig('settings.pasteStyle', val)
|
||||||
this.pasteStyle = val
|
this.pasteStyle = val
|
||||||
}
|
}
|
||||||
beforeDestroy () {
|
beforeDestroy () {
|
||||||
|
@ -136,15 +136,16 @@ export default class extends Vue {
|
|||||||
openContextMenu () {
|
openContextMenu () {
|
||||||
this.menu!.popup()
|
this.menu!.popup()
|
||||||
}
|
}
|
||||||
buildMenu () {
|
async buildMenu () {
|
||||||
const _this = this
|
const _this = this
|
||||||
|
const current = await this.getConfig('picBed.current')
|
||||||
const submenu = this.picBed.filter(item => item.visible).map(item => {
|
const submenu = this.picBed.filter(item => item.visible).map(item => {
|
||||||
return {
|
return {
|
||||||
label: item.name,
|
label: item.name,
|
||||||
type: 'radio',
|
type: 'radio',
|
||||||
checked: this.$db.get('picBed.current') === item.type,
|
checked: current === item.type,
|
||||||
click () {
|
click () {
|
||||||
_this.letPicGoSaveData({
|
_this.saveConfig({
|
||||||
'picBed.current': item.type,
|
'picBed.current': item.type,
|
||||||
'picBed.uploader': item.type
|
'picBed.uploader': item.type
|
||||||
})
|
})
|
||||||
|
@ -339,12 +339,13 @@
|
|||||||
import keyDetect from '@/utils/key-binding'
|
import keyDetect from '@/utils/key-binding'
|
||||||
import pkg from 'root/package.json'
|
import pkg from 'root/package.json'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
|
import { IConfig } from 'picgo/dist/src/types/index'
|
||||||
import {
|
import {
|
||||||
ipcRenderer,
|
ipcRenderer,
|
||||||
remote
|
remote
|
||||||
} from 'electron'
|
} from 'electron'
|
||||||
import { Component, Vue } from 'vue-property-decorator'
|
import { Component, Vue } from 'vue-property-decorator'
|
||||||
import db from '#/datastore'
|
// import db from '#/datastore'
|
||||||
const releaseUrl = 'https://api.github.com/repos/Molunerfinn/PicGo/releases/latest'
|
const releaseUrl = 'https://api.github.com/repos/Molunerfinn/PicGo/releases/latest'
|
||||||
const releaseUrlBackup = 'https://cdn.jsdelivr.net/gh/Molunerfinn/PicGo@latest/package.json'
|
const releaseUrlBackup = 'https://cdn.jsdelivr.net/gh/Molunerfinn/PicGo@latest/package.json'
|
||||||
const downloadUrl = 'https://github.com/Molunerfinn/PicGo/releases/latest'
|
const downloadUrl = 'https://github.com/Molunerfinn/PicGo/releases/latest'
|
||||||
@ -355,30 +356,22 @@ const customLinkRule = (rule: string, value: string, callback: (arg0?: Error) =>
|
|||||||
return callback()
|
return callback()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let logLevel = db.get('settings.logLevel')
|
|
||||||
if (!Array.isArray(logLevel)) {
|
|
||||||
if (logLevel && logLevel.length > 0) {
|
|
||||||
logLevel = [logLevel]
|
|
||||||
} else {
|
|
||||||
logLevel = ['all']
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
name: 'picgo-setting'
|
name: 'picgo-setting'
|
||||||
})
|
})
|
||||||
export default class extends Vue {
|
export default class extends Vue {
|
||||||
form: ISettingForm = {
|
form: ISettingForm = {
|
||||||
updateHelper: db.get('settings.showUpdateTip'),
|
updateHelper: false,
|
||||||
showPicBedList: [],
|
showPicBedList: [],
|
||||||
autoStart: db.get('settings.autoStart') || false,
|
autoStart: false,
|
||||||
rename: db.get('settings.rename') || false,
|
rename: false,
|
||||||
autoRename: db.get('settings.autoRename') || false,
|
autoRename: false,
|
||||||
uploadNotification: db.get('settings.uploadNotification') || false,
|
uploadNotification: false,
|
||||||
miniWindowOntop: db.get('settings.miniWindowOntop') || false,
|
miniWindowOntop: false,
|
||||||
logLevel,
|
logLevel: ['all'],
|
||||||
autoCopyUrl: db.get('settings.autoCopy') === undefined ? true : db.get('settings.autoCopy'),
|
autoCopyUrl: true,
|
||||||
checkBetaUpdate: db.get('settings.checkBetaUpdate') === undefined ? true : db.get('settings.checkBetaUpdate')
|
checkBetaUpdate: true
|
||||||
}
|
}
|
||||||
picBed: IPicBedType[] = []
|
picBed: IPicBedType[] = []
|
||||||
logFileVisible = false
|
logFileVisible = false
|
||||||
@ -388,14 +381,14 @@ export default class extends Vue {
|
|||||||
serverVisible = false
|
serverVisible = false
|
||||||
proxyVisible = false
|
proxyVisible = false
|
||||||
customLink = {
|
customLink = {
|
||||||
value: db.get('settings.customLink') || '$url'
|
value: '$url'
|
||||||
}
|
}
|
||||||
shortKey: IShortKeyMap = {
|
shortKey: IShortKeyMap = {
|
||||||
upload: db.get('settings.shortKey.upload')
|
upload: ''
|
||||||
}
|
}
|
||||||
proxy = db.get('picBed.proxy') || ''
|
proxy = ''
|
||||||
npmRegistry = db.get('settings.registry') || ''
|
npmRegistry = ''
|
||||||
npmProxy = db.get('settings.proxy') || ''
|
npmProxy = ''
|
||||||
rules = {
|
rules = {
|
||||||
value: [
|
value: [
|
||||||
{ validator: customLinkRule, trigger: 'blur' }
|
{ validator: customLinkRule, trigger: 'blur' }
|
||||||
@ -409,7 +402,7 @@ export default class extends Vue {
|
|||||||
warn: '提醒-Warn',
|
warn: '提醒-Warn',
|
||||||
none: '不记录日志-None'
|
none: '不记录日志-None'
|
||||||
}
|
}
|
||||||
server = db.get('settings.server') || {
|
server = {
|
||||||
port: 36677,
|
port: 36677,
|
||||||
host: '127.0.0.1',
|
host: '127.0.0.1',
|
||||||
enable: true
|
enable: true
|
||||||
@ -430,6 +423,45 @@ export default class extends Vue {
|
|||||||
ipcRenderer.send('getPicBeds')
|
ipcRenderer.send('getPicBeds')
|
||||||
ipcRenderer.on('getPicBeds', this.getPicBeds)
|
ipcRenderer.on('getPicBeds', this.getPicBeds)
|
||||||
}
|
}
|
||||||
|
async initData () {
|
||||||
|
const config = (await this.getConfig<IConfig>())!
|
||||||
|
if (config !== undefined) {
|
||||||
|
const settings = config.settings || {}
|
||||||
|
const picBed = config.picBed
|
||||||
|
this.form.updateHelper = settings.showUpdateTip || false
|
||||||
|
this.form.autoStart = settings.autoStart || false
|
||||||
|
this.form.rename = settings.rename || false
|
||||||
|
this.form.autoRename = settings.autoRename || false
|
||||||
|
this.form.uploadNotification = settings.uploadNotification || false
|
||||||
|
this.form.miniWindowOntop = settings.miniWindowOntop || false
|
||||||
|
this.form.logLevel = this.initLogLevel(settings.logLevel || [])
|
||||||
|
this.form.autoCopyUrl = settings.autoCopy === undefined ? true : settings.autoCopy
|
||||||
|
this.form.checkBetaUpdate = settings.checkBetaUpdate === undefined ? true : settings.checkBetaUpdate
|
||||||
|
|
||||||
|
this.customLink.value = settings.customLink || '$url'
|
||||||
|
this.shortKey.upload = settings.shortKey.upload
|
||||||
|
this.proxy = picBed.proxy || ''
|
||||||
|
this.npmRegistry = settings.registry || ''
|
||||||
|
this.npmProxy = settings.proxy || ''
|
||||||
|
this.server = settings.server || {
|
||||||
|
port: 36677,
|
||||||
|
host: '127.0.0.1',
|
||||||
|
enable: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initLogLevel (logLevel: string | string[]) {
|
||||||
|
if (!Array.isArray(logLevel)) {
|
||||||
|
if (logLevel && logLevel.length > 0) {
|
||||||
|
logLevel = [logLevel]
|
||||||
|
} else {
|
||||||
|
logLevel = ['all']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return logLevel
|
||||||
|
}
|
||||||
|
|
||||||
getPicBeds (event: Event, picBeds: IPicBedType[]) {
|
getPicBeds (event: Event, picBeds: IPicBedType[]) {
|
||||||
this.picBed = picBeds
|
this.picBed = picBeds
|
||||||
this.form.showPicBedList = this.picBed.map(item => {
|
this.form.showPicBedList = this.picBed.map(item => {
|
||||||
@ -450,15 +482,15 @@ export default class extends Vue {
|
|||||||
keyDetect (type: string, event: KeyboardEvent) {
|
keyDetect (type: string, event: KeyboardEvent) {
|
||||||
this.shortKey[type] = keyDetect(event).join('+')
|
this.shortKey[type] = keyDetect(event).join('+')
|
||||||
}
|
}
|
||||||
cancelCustomLink () {
|
async cancelCustomLink () {
|
||||||
this.customLinkVisible = false
|
this.customLinkVisible = false
|
||||||
this.customLink.value = db.get('settings.customLink') || '$url'
|
this.customLink.value = await this.getConfig<string>('settings.customLink') || '$url'
|
||||||
}
|
}
|
||||||
confirmCustomLink () {
|
confirmCustomLink () {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.$refs.customLink.validate((valid: boolean) => {
|
this.$refs.customLink.validate((valid: boolean) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
db.set('settings.customLink', this.customLink.value)
|
this.saveConfig('settings.customLink', this.customLink.value)
|
||||||
this.customLinkVisible = false
|
this.customLinkVisible = false
|
||||||
ipcRenderer.send('updateCustomLink')
|
ipcRenderer.send('updateCustomLink')
|
||||||
} else {
|
} else {
|
||||||
@ -466,13 +498,13 @@ export default class extends Vue {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
cancelProxy () {
|
async cancelProxy () {
|
||||||
this.proxyVisible = false
|
this.proxyVisible = false
|
||||||
this.proxy = db.get('picBed.proxy') || undefined
|
this.proxy = await this.getConfig<string>('picBed.proxy') || ''
|
||||||
}
|
}
|
||||||
confirmProxy () {
|
confirmProxy () {
|
||||||
this.proxyVisible = false
|
this.proxyVisible = false
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.proxy': this.proxy,
|
'picBed.proxy': this.proxy,
|
||||||
'settings.proxy': this.npmProxy,
|
'settings.proxy': this.npmProxy,
|
||||||
'settings.registry': this.npmRegistry
|
'settings.registry': this.npmRegistry
|
||||||
@ -485,10 +517,10 @@ export default class extends Vue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
updateHelperChange (val: boolean) {
|
updateHelperChange (val: boolean) {
|
||||||
db.set('settings.showUpdateTip', val)
|
this.saveConfig('settings.showUpdateTip', val)
|
||||||
}
|
}
|
||||||
checkBetaUpdateChange (val: boolean) {
|
checkBetaUpdateChange (val: boolean) {
|
||||||
db.set('settings.checkBetaUpdate', val)
|
this.saveConfig('settings.checkBetaUpdate', val)
|
||||||
}
|
}
|
||||||
handleShowPicBedListChange (val: string[]) {
|
handleShowPicBedListChange (val: string[]) {
|
||||||
const list = this.picBed.map(item => {
|
const list = this.picBed.map(item => {
|
||||||
@ -499,22 +531,22 @@ export default class extends Vue {
|
|||||||
}
|
}
|
||||||
return item
|
return item
|
||||||
})
|
})
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.list': list
|
'picBed.list': list
|
||||||
})
|
})
|
||||||
ipcRenderer.send('getPicBeds')
|
ipcRenderer.send('getPicBeds')
|
||||||
}
|
}
|
||||||
handleAutoStartChange (val: boolean) {
|
handleAutoStartChange (val: boolean) {
|
||||||
db.set('settings.autoStart', val)
|
this.saveConfig('settings.autoStart', val)
|
||||||
ipcRenderer.send('autoStart', val)
|
ipcRenderer.send('autoStart', val)
|
||||||
}
|
}
|
||||||
handleRename (val: boolean) {
|
handleRename (val: boolean) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'settings.rename': val
|
'settings.rename': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
handleAutoRename (val: boolean) {
|
handleAutoRename (val: boolean) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'settings.autoRename': val
|
'settings.autoRename': val
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -556,14 +588,16 @@ export default class extends Vue {
|
|||||||
this.checkUpdateVisible = false
|
this.checkUpdateVisible = false
|
||||||
}
|
}
|
||||||
handleUploadNotification (val: boolean) {
|
handleUploadNotification (val: boolean) {
|
||||||
db.set('settings.uploadNotification', val)
|
this.saveConfig({
|
||||||
|
'settings.uploadNotification': val
|
||||||
|
})
|
||||||
}
|
}
|
||||||
handleMiniWindowOntop (val: boolean) {
|
handleMiniWindowOntop (val: boolean) {
|
||||||
db.set('settings.miniWindowOntop', val)
|
this.saveConfig('settings.miniWindowOntop', val)
|
||||||
this.$message.info('需要重启生效')
|
this.$message.info('需要重启生效')
|
||||||
}
|
}
|
||||||
handleAutoCopyUrl (val: boolean) {
|
handleAutoCopyUrl (val: boolean) {
|
||||||
db.set('settings.autoCopy', val)
|
this.saveConfig('settings.autoCopy', val)
|
||||||
const successNotification = new Notification('设置自动复制链接', {
|
const successNotification = new Notification('设置自动复制链接', {
|
||||||
body: '设置成功'
|
body: '设置成功'
|
||||||
})
|
})
|
||||||
@ -575,7 +609,7 @@ export default class extends Vue {
|
|||||||
if (this.form.logLevel.length === 0) {
|
if (this.form.logLevel.length === 0) {
|
||||||
return this.$message.error('请选择日志记录等级')
|
return this.$message.error('请选择日志记录等级')
|
||||||
}
|
}
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'settings.logLevel': this.form.logLevel
|
'settings.logLevel': this.form.logLevel
|
||||||
})
|
})
|
||||||
const successNotification = new Notification('设置日志', {
|
const successNotification = new Notification('设置日志', {
|
||||||
@ -586,9 +620,9 @@ export default class extends Vue {
|
|||||||
}
|
}
|
||||||
this.logFileVisible = false
|
this.logFileVisible = false
|
||||||
}
|
}
|
||||||
cancelLogLevelSetting () {
|
async cancelLogLevelSetting () {
|
||||||
this.logFileVisible = false
|
this.logFileVisible = false
|
||||||
let logLevel = db.get('settings.logLevel')
|
let logLevel = await this.getConfig<string | string[]>('settings.logLevel')
|
||||||
if (!Array.isArray(logLevel)) {
|
if (!Array.isArray(logLevel)) {
|
||||||
if (logLevel && logLevel.length > 0) {
|
if (logLevel && logLevel.length > 0) {
|
||||||
logLevel = [logLevel]
|
logLevel = [logLevel]
|
||||||
@ -599,8 +633,9 @@ export default class extends Vue {
|
|||||||
this.form.logLevel = logLevel
|
this.form.logLevel = logLevel
|
||||||
}
|
}
|
||||||
confirmServerSetting () {
|
confirmServerSetting () {
|
||||||
|
// @ts-ignore
|
||||||
this.server.port = parseInt(this.server.port, 10)
|
this.server.port = parseInt(this.server.port, 10)
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'settings.server': this.server
|
'settings.server': this.server
|
||||||
})
|
})
|
||||||
const successNotification = new Notification('设置PicGo-Server', {
|
const successNotification = new Notification('设置PicGo-Server', {
|
||||||
@ -612,9 +647,9 @@ export default class extends Vue {
|
|||||||
this.serverVisible = false
|
this.serverVisible = false
|
||||||
ipcRenderer.send('updateServer')
|
ipcRenderer.send('updateServer')
|
||||||
}
|
}
|
||||||
cancelServerSetting () {
|
async cancelServerSetting () {
|
||||||
this.serverVisible = false
|
this.serverVisible = false
|
||||||
this.server = db.get('settings.server') || {
|
this.server = await this.getConfig('settings.server') || {
|
||||||
port: 36677,
|
port: 36677,
|
||||||
host: '127.0.0.1',
|
host: '127.0.0.1',
|
||||||
enable: true
|
enable: true
|
||||||
|
@ -164,7 +164,7 @@ export default class extends Vue {
|
|||||||
document.querySelector('.main-content.el-row').style.zIndex = 10
|
document.querySelector('.main-content.el-row').style.zIndex = 10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
created () {
|
async created () {
|
||||||
this.os = process.platform
|
this.os = process.platform
|
||||||
ipcRenderer.on('hideLoading', () => {
|
ipcRenderer.on('hideLoading', () => {
|
||||||
this.loading = false
|
this.loading = false
|
||||||
@ -216,15 +216,15 @@ export default class extends Vue {
|
|||||||
})
|
})
|
||||||
this.getPluginList()
|
this.getPluginList()
|
||||||
this.getSearchResult = debounce(this.getSearchResult, 50)
|
this.getSearchResult = debounce(this.getSearchResult, 50)
|
||||||
this.needReload = this.$db.get('needReload')
|
this.needReload = await this.getConfig<boolean>('needReload') || false
|
||||||
}
|
}
|
||||||
buildContextMenu (plugin: IPicGoPlugin) {
|
async buildContextMenu (plugin: IPicGoPlugin) {
|
||||||
const _this = this
|
const _this = this
|
||||||
let menu = [{
|
let menu = [{
|
||||||
label: '启用插件',
|
label: '启用插件',
|
||||||
enabled: !plugin.enabled,
|
enabled: !plugin.enabled,
|
||||||
click () {
|
click () {
|
||||||
_this.letPicGoSaveData({
|
_this.saveConfig({
|
||||||
[`picgoPlugins.${plugin.fullName}`]: true
|
[`picgoPlugins.${plugin.fullName}`]: true
|
||||||
})
|
})
|
||||||
plugin.enabled = true
|
plugin.enabled = true
|
||||||
@ -235,7 +235,7 @@ export default class extends Vue {
|
|||||||
label: '禁用插件',
|
label: '禁用插件',
|
||||||
enabled: plugin.enabled,
|
enabled: plugin.enabled,
|
||||||
click () {
|
click () {
|
||||||
_this.letPicGoSaveData({
|
_this.saveConfig({
|
||||||
[`picgoPlugins.${plugin.fullName}`]: false
|
[`picgoPlugins.${plugin.fullName}`]: false
|
||||||
})
|
})
|
||||||
plugin.enabled = false
|
plugin.enabled = false
|
||||||
@ -276,7 +276,7 @@ export default class extends Vue {
|
|||||||
|
|
||||||
// handle transformer
|
// handle transformer
|
||||||
if (plugin.config.transformer.name) {
|
if (plugin.config.transformer.name) {
|
||||||
let currentTransformer = this.$db.get('picBed.transformer') || 'path'
|
let currentTransformer = await this.getConfig<string>('picBed.transformer') || 'path'
|
||||||
let pluginTransformer = plugin.config.transformer.name
|
let pluginTransformer = plugin.config.transformer.name
|
||||||
const obj = {
|
const obj = {
|
||||||
label: `${currentTransformer === pluginTransformer ? '禁用' : '启用'}transformer - ${plugin.config.transformer.name}`,
|
label: `${currentTransformer === pluginTransformer ? '禁用' : '启用'}transformer - ${plugin.config.transformer.name}`,
|
||||||
@ -351,8 +351,10 @@ export default class extends Vue {
|
|||||||
remote.app.relaunch()
|
remote.app.relaunch()
|
||||||
remote.app.exit(0)
|
remote.app.exit(0)
|
||||||
}
|
}
|
||||||
handleReload () {
|
async handleReload () {
|
||||||
this.$db.set('needReload', true)
|
this.saveConfig({
|
||||||
|
needReload: true
|
||||||
|
})
|
||||||
this.needReload = true
|
this.needReload = true
|
||||||
const successNotification = new Notification('更新成功', {
|
const successNotification = new Notification('更新成功', {
|
||||||
body: '请点击此通知重启应用以生效'
|
body: '请点击此通知重启应用以生效'
|
||||||
@ -364,14 +366,14 @@ export default class extends Vue {
|
|||||||
cleanSearch () {
|
cleanSearch () {
|
||||||
this.searchText = ''
|
this.searchText = ''
|
||||||
}
|
}
|
||||||
toggleTransformer (transformer: string) {
|
async toggleTransformer (transformer: string) {
|
||||||
let currentTransformer = this.$db.get('picBed.transformer') || 'path'
|
let currentTransformer = await this.getConfig<string>('picBed.transformer') || 'path'
|
||||||
if (currentTransformer === transformer) {
|
if (currentTransformer === transformer) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.transformer': 'path'
|
'picBed.transformer': 'path'
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.transformer': transformer
|
'picBed.transformer': transformer
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -382,17 +384,17 @@ export default class extends Vue {
|
|||||||
if (result !== false) {
|
if (result !== false) {
|
||||||
switch (this.currentType) {
|
switch (this.currentType) {
|
||||||
case 'plugin':
|
case 'plugin':
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
[`${this.configName}`]: result
|
[`${this.configName}`]: result
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
case 'uploader':
|
case 'uploader':
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
[`picBed.${this.configName}`]: result
|
[`picBed.${this.configName}`]: result
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
case 'transformer':
|
case 'transformer':
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
[`transformer.${this.configName}`]: result
|
[`transformer.${this.configName}`]: result
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
@ -448,20 +450,20 @@ export default class extends Vue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// restore Uploader & Transformer
|
// restore Uploader & Transformer
|
||||||
handleRestoreState (item: string, name: string) {
|
async handleRestoreState (item: string, name: string) {
|
||||||
if (item === 'uploader') {
|
if (item === 'uploader') {
|
||||||
const current = this.$db.get('picBed.current')
|
const current = await this.getConfig('picBed.current')
|
||||||
if (current === name) {
|
if (current === name) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.current': 'smms',
|
'picBed.current': 'smms',
|
||||||
'picBed.uploader': 'smms'
|
'picBed.uploader': 'smms'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (item === 'transformer') {
|
if (item === 'transformer') {
|
||||||
const current = this.$db.get('picBed.transformer')
|
const current = await this.getConfig('picBed.transformer')
|
||||||
if (current === name) {
|
if (current === name) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.transformer': 'path'
|
'picBed.transformer': 'path'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -475,7 +477,7 @@ export default class extends Vue {
|
|||||||
goAwesomeList () {
|
goAwesomeList () {
|
||||||
remote.shell.openExternal('https://github.com/PicGo/Awesome-PicGo')
|
remote.shell.openExternal('https://github.com/PicGo/Awesome-PicGo')
|
||||||
}
|
}
|
||||||
letPicGoSaveData (data: IObj) {
|
saveConfig (data: IObj) {
|
||||||
ipcRenderer.send('picgoSaveData', data)
|
ipcRenderer.send('picgoSaveData', data)
|
||||||
}
|
}
|
||||||
handleImportLocalPlugin () {
|
handleImportLocalPlugin () {
|
||||||
|
@ -109,8 +109,8 @@ export default class extends Vue {
|
|||||||
command = ''
|
command = ''
|
||||||
shortKey = ''
|
shortKey = ''
|
||||||
currentIndex = 0
|
currentIndex = 0
|
||||||
created () {
|
async created () {
|
||||||
const shortKeyConfig = this.$db.get('settings.shortKey') as IShortKeyConfigs
|
const shortKeyConfig = (await this.getConfig<IShortKeyConfigs>('settings.shortKey'))!
|
||||||
this.list = Object.keys(shortKeyConfig).map(item => {
|
this.list = Object.keys(shortKeyConfig).map(item => {
|
||||||
return {
|
return {
|
||||||
...shortKeyConfig[item],
|
...shortKeyConfig[item],
|
||||||
@ -132,26 +132,23 @@ export default class extends Vue {
|
|||||||
toggleEnable (item: IShortKeyConfig) {
|
toggleEnable (item: IShortKeyConfig) {
|
||||||
const status = !item.enable
|
const status = !item.enable
|
||||||
item.enable = status
|
item.enable = status
|
||||||
// this.$db.set(`settings.shortKey.${item.name}.enable`, status)
|
|
||||||
ipcRenderer.send('bindOrUnbindShortKey', item, item.from)
|
ipcRenderer.send('bindOrUnbindShortKey', item, item.from)
|
||||||
}
|
}
|
||||||
keyDetect (event: KeyboardEvent) {
|
keyDetect (event: KeyboardEvent) {
|
||||||
this.shortKey = keyDetect(event).join('+')
|
this.shortKey = keyDetect(event).join('+')
|
||||||
}
|
}
|
||||||
openKeyBindingDialog (config: IShortKeyConfig, index: number) {
|
async openKeyBindingDialog (config: IShortKeyConfig, index: number) {
|
||||||
this.command = `${config.from}:${config.name}`
|
this.command = `${config.from}:${config.name}`
|
||||||
this.shortKey = this.$db.get(`settings.shortKey.${this.command}.key`)
|
this.shortKey = await this.getConfig(`settings.shortKey.${this.command}.key`) || ''
|
||||||
this.currentIndex = index
|
this.currentIndex = index
|
||||||
this.keyBindingVisible = true
|
this.keyBindingVisible = true
|
||||||
}
|
}
|
||||||
cancelKeyBinding () {
|
async cancelKeyBinding () {
|
||||||
this.keyBindingVisible = false
|
this.keyBindingVisible = false
|
||||||
this.shortKey = this.$db.get(`settings.shortKey.${this.command}.key`)
|
this.shortKey = await this.getConfig<string>(`settings.shortKey.${this.command}.key`) || ''
|
||||||
}
|
}
|
||||||
confirmKeyBinding () {
|
async confirmKeyBinding () {
|
||||||
const oldKey = this.$db.get(`settings.shortKey.${this.command}.key`)
|
const oldKey = await this.getConfig<string>(`settings.shortKey.${this.command}.key`)
|
||||||
// this.$db.set(`settings.shortKey.${this.command}.key`, this.shortKey)
|
|
||||||
// const newKey = this.$db.get(`settings.shortKey.${this.command}`)
|
|
||||||
const config = Object.assign({}, this.list[this.currentIndex])
|
const config = Object.assign({}, this.list[this.currentIndex])
|
||||||
config.key = this.shortKey
|
config.key = this.shortKey
|
||||||
ipcRenderer.send('updateShortKey', config, oldKey, config.from)
|
ipcRenderer.send('updateShortKey', config, oldKey, config.from)
|
||||||
|
@ -30,12 +30,15 @@ import { Component, Vue } from 'vue-property-decorator'
|
|||||||
import mixin from '@/utils/mixin'
|
import mixin from '@/utils/mixin'
|
||||||
import pasteTemplate from '#/utils/pasteTemplate'
|
import pasteTemplate from '#/utils/pasteTemplate'
|
||||||
import { ipcRenderer, clipboard } from 'electron'
|
import { ipcRenderer, clipboard } from 'electron'
|
||||||
|
import { IPasteStyle } from '#/types/enum'
|
||||||
|
import { IResult } from '@picgo/store/dist/types'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
name: 'tray-page',
|
name: 'tray-page',
|
||||||
mixins: [mixin]
|
mixins: [mixin]
|
||||||
})
|
})
|
||||||
export default class extends Vue {
|
export default class extends Vue {
|
||||||
files = []
|
files: IResult<ImgInfo>[] = []
|
||||||
notification = {
|
notification = {
|
||||||
title: '复制链接成功',
|
title: '复制链接成功',
|
||||||
body: '',
|
body: '',
|
||||||
@ -46,15 +49,14 @@ export default class extends Vue {
|
|||||||
get reverseList () {
|
get reverseList () {
|
||||||
return this.files.slice().reverse()
|
return this.files.slice().reverse()
|
||||||
}
|
}
|
||||||
getData () {
|
async getData () {
|
||||||
// @ts-ignore
|
this.files = (await this.$$db.get<ImgInfo>()).slice().reverse().slice(0, 5)
|
||||||
this.files = this.$db.read().get('uploaded').slice().reverse().slice(0, 5).value()
|
|
||||||
}
|
}
|
||||||
copyTheLink (item: ImgInfo) {
|
async copyTheLink (item: ImgInfo) {
|
||||||
this.notification.body = item.imgUrl!
|
this.notification.body = item.imgUrl!
|
||||||
this.notification.icon = item.imgUrl!
|
this.notification.icon = item.imgUrl!
|
||||||
const myNotification = new Notification(this.notification.title, this.notification)
|
const myNotification = new Notification(this.notification.title, this.notification)
|
||||||
const pasteStyle = this.$db.get('settings.pasteStyle') || 'markdown'
|
const pasteStyle = await this.getConfig<IPasteStyle>('settings.pasteStyle') || IPasteStyle.MARKDOWN
|
||||||
clipboard.writeText(pasteTemplate(pasteStyle, item))
|
clipboard.writeText(pasteTemplate(pasteStyle, item))
|
||||||
myNotification.onclick = () => {
|
myNotification.onclick = () => {
|
||||||
return true
|
return true
|
||||||
@ -83,19 +85,18 @@ export default class extends Vue {
|
|||||||
mounted () {
|
mounted () {
|
||||||
this.disableDragFile()
|
this.disableDragFile()
|
||||||
this.getData()
|
this.getData()
|
||||||
ipcRenderer.on('dragFiles', (event: Event, files: string[]) => {
|
ipcRenderer.on('dragFiles', async (event: Event, files: string[]) => {
|
||||||
files.forEach(item => {
|
for (let i = 0; i < files.length; i++) {
|
||||||
this.$db.insert('uploaded', item)
|
const item = files[i]
|
||||||
})
|
await this.$$db.insert(item)
|
||||||
// @ts-ignore
|
}
|
||||||
this.files = this.$db.read().get('uploaded').slice().reverse().slice(0, 5).value()
|
this.files = (await this.$$db.get<ImgInfo>()).slice().reverse().slice(0, 5)
|
||||||
})
|
})
|
||||||
ipcRenderer.on('clipboardFiles', (event: Event, files: ImgInfo[]) => {
|
ipcRenderer.on('clipboardFiles', (event: Event, files: ImgInfo[]) => {
|
||||||
this.clipboardFiles = files
|
this.clipboardFiles = files
|
||||||
})
|
})
|
||||||
ipcRenderer.on('uploadFiles', (event: Event) => {
|
ipcRenderer.on('uploadFiles', async (event: Event) => {
|
||||||
// @ts-ignore
|
this.files = (await this.$$db.get()).slice().reverse().slice(0, 5)
|
||||||
this.files = this.$db.read().get('uploaded').slice().reverse().slice(0, 5).value()
|
|
||||||
console.log(this.files)
|
console.log(this.files)
|
||||||
this.uploadFlag = false
|
this.uploadFlag = false
|
||||||
})
|
})
|
||||||
|
@ -169,11 +169,13 @@ export default class extends Vue {
|
|||||||
})
|
})
|
||||||
ipcRenderer.send('uploadChoosedFiles', sendFiles)
|
ipcRenderer.send('uploadChoosedFiles', sendFiles)
|
||||||
}
|
}
|
||||||
getPasteStyle () {
|
async getPasteStyle () {
|
||||||
this.pasteStyle = this.$db.get('settings.pasteStyle') || 'markdown'
|
this.pasteStyle = await this.getConfig('settings.pasteStyle') || 'markdown'
|
||||||
}
|
}
|
||||||
handlePasteStyleChange (val: string) {
|
handlePasteStyleChange (val: string) {
|
||||||
this.$db.set('settings.pasteStyle', val)
|
this.saveConfig({
|
||||||
|
'settings.pasteStyle': val
|
||||||
|
})
|
||||||
}
|
}
|
||||||
uploadClipboardFiles () {
|
uploadClipboardFiles () {
|
||||||
ipcRenderer.send('uploadClipboardFilesFromUploadPage')
|
ipcRenderer.send('uploadClipboardFilesFromUploadPage')
|
||||||
@ -196,10 +198,10 @@ export default class extends Vue {
|
|||||||
this.$message.error('请输入合法的URL')
|
this.$message.error('请输入合法的URL')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getDefaultPicBed () {
|
async getDefaultPicBed () {
|
||||||
const current: string = this.$db.get('picBed.current')
|
const currentPicBed = await this.getConfig<string>('picBed.current')
|
||||||
this.picBed.forEach(item => {
|
this.picBed.forEach(item => {
|
||||||
if (item.type === current) {
|
if (item.type === currentPicBed) {
|
||||||
this.picBedName = item.name
|
this.picBedName = item.name
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -208,20 +210,21 @@ export default class extends Vue {
|
|||||||
this.picBed = picBeds
|
this.picBed = picBeds
|
||||||
this.getDefaultPicBed()
|
this.getDefaultPicBed()
|
||||||
}
|
}
|
||||||
handleChangePicBed () {
|
async handleChangePicBed () {
|
||||||
this.buildMenu()
|
await this.buildMenu()
|
||||||
// this.menu.popup(remote.getCurrentWindow())
|
// this.menu.popup(remote.getCurrentWindow())
|
||||||
this.menu!.popup()
|
this.menu!.popup()
|
||||||
}
|
}
|
||||||
buildMenu () {
|
async buildMenu () {
|
||||||
const _this = this
|
const _this = this
|
||||||
|
const currentPicBed = await this.getConfig<string>('picBed.current')
|
||||||
const submenu = this.picBed.filter(item => item.visible).map(item => {
|
const submenu = this.picBed.filter(item => item.visible).map(item => {
|
||||||
return {
|
return {
|
||||||
label: item.name,
|
label: item.name,
|
||||||
type: 'radio',
|
type: 'radio',
|
||||||
checked: this.$db.get('picBed.current') === item.type,
|
checked: currentPicBed === item.type,
|
||||||
click () {
|
click () {
|
||||||
_this.letPicGoSaveData({
|
_this.saveConfig({
|
||||||
'picBed.current': item.type,
|
'picBed.current': item.type,
|
||||||
'picBed.uploader': item.type
|
'picBed.uploader': item.type
|
||||||
})
|
})
|
||||||
|
@ -86,8 +86,8 @@ export default class extends Vue {
|
|||||||
customUrl: '',
|
customUrl: '',
|
||||||
options: ''
|
options: ''
|
||||||
}
|
}
|
||||||
created () {
|
async created () {
|
||||||
const config = this.$db.get('picBed.aliyun') as IAliYunConfig
|
const config = await this.getConfig<IAliYunConfig>('picBed.aliyun')
|
||||||
if (config) {
|
if (config) {
|
||||||
this.form = Object.assign({}, config)
|
this.form = Object.assign({}, config)
|
||||||
}
|
}
|
||||||
@ -96,7 +96,7 @@ export default class extends Vue {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.$refs.aliyun.validate((valid) => {
|
this.$refs.aliyun.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.aliyun': this.form
|
'picBed.aliyun': this.form
|
||||||
})
|
})
|
||||||
const successNotification = new window.Notification('设置结果', {
|
const successNotification = new window.Notification('设置结果', {
|
||||||
|
@ -71,8 +71,8 @@ export default class extends Vue {
|
|||||||
customUrl: '',
|
customUrl: '',
|
||||||
branch: ''
|
branch: ''
|
||||||
}
|
}
|
||||||
created () {
|
async created () {
|
||||||
const config = this.$db.get('picBed.github') as IGitHubConfig
|
const config = await this.getConfig<IGitHubConfig>('picBed.github')
|
||||||
if (config) {
|
if (config) {
|
||||||
this.form = Object.assign({}, config)
|
this.form = Object.assign({}, config)
|
||||||
}
|
}
|
||||||
@ -81,7 +81,7 @@ export default class extends Vue {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.$refs.github.validate((valid) => {
|
this.$refs.github.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.github': this.form
|
'picBed.github': this.form
|
||||||
})
|
})
|
||||||
const successNotification = new Notification('设置结果', {
|
const successNotification = new Notification('设置结果', {
|
||||||
|
@ -48,8 +48,8 @@ export default class extends Vue {
|
|||||||
clientId: '',
|
clientId: '',
|
||||||
proxy: ''
|
proxy: ''
|
||||||
}
|
}
|
||||||
created () {
|
async created () {
|
||||||
const config = this.$db.get('picBed.imgur') as IImgurConfig
|
const config = await this.getConfig<IImgurConfig>('picBed.imgur')
|
||||||
if (config) {
|
if (config) {
|
||||||
this.form = Object.assign({}, config)
|
this.form = Object.assign({}, config)
|
||||||
}
|
}
|
||||||
@ -58,7 +58,7 @@ export default class extends Vue {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.$refs.imgur.validate((valid) => {
|
this.$refs.imgur.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.imgur': this.form
|
'picBed.imgur': this.form
|
||||||
})
|
})
|
||||||
const successNotification = new Notification('设置结果', {
|
const successNotification = new Notification('设置结果', {
|
||||||
|
@ -56,7 +56,7 @@ export default class extends Vue {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const result = await this.$refs.configForm.validate()
|
const result = await this.$refs.configForm.validate()
|
||||||
if (result !== false) {
|
if (result !== false) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
[`picBed.${this.type}`]: result
|
[`picBed.${this.type}`]: result
|
||||||
})
|
})
|
||||||
const successNotification = new Notification('设置结果', {
|
const successNotification = new Notification('设置结果', {
|
||||||
@ -68,7 +68,7 @@ export default class extends Vue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
setDefaultPicBed (type: string) {
|
setDefaultPicBed (type: string) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.current': type,
|
'picBed.current': type,
|
||||||
'picBed.uploader': type
|
'picBed.uploader': type
|
||||||
})
|
})
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
:rules="{
|
:rules="{
|
||||||
required: true, message: 'AccessKey不能为空', trigger: 'blur'
|
required: true, message: 'AccessKey不能为空', trigger: 'blur'
|
||||||
}">
|
}">
|
||||||
<el-input v-model="form.accessKey" placeholder="AccessKey" @keyup.native.enter="confirm('weiboForm')"></el-input>
|
<el-input v-model="form.accessKey" placeholder="AccessKey" @keyup.native.enter="confirm"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
label="设定SecretKey"
|
label="设定SecretKey"
|
||||||
@ -88,8 +88,8 @@ export default class extends Vue {
|
|||||||
options: '',
|
options: '',
|
||||||
path: ''
|
path: ''
|
||||||
}
|
}
|
||||||
created () {
|
async created () {
|
||||||
const config = this.$db.get('picBed.qiniu') as IQiniuConfig
|
const config = await this.getConfig<IQiniuConfig>('picBed.qiniu')
|
||||||
if (config) {
|
if (config) {
|
||||||
this.form = Object.assign({}, config)
|
this.form = Object.assign({}, config)
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ export default class extends Vue {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.$refs.qiniu.validate((valid) => {
|
this.$refs.qiniu.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.qiniu': this.form
|
'picBed.qiniu': this.form
|
||||||
})
|
})
|
||||||
const successNotification = new Notification('设置结果', {
|
const successNotification = new Notification('设置结果', {
|
||||||
|
@ -41,17 +41,17 @@ export default class extends Vue {
|
|||||||
form: ISMMSConfig = {
|
form: ISMMSConfig = {
|
||||||
token: ''
|
token: ''
|
||||||
}
|
}
|
||||||
created () {
|
async created () {
|
||||||
const config = this.$db.get('picBed.smms.token') as (string | boolean)
|
const config = await this.getConfig<string | boolean>('picBed.smms.token')
|
||||||
if (typeof config !== 'boolean') {
|
if (typeof config !== 'boolean') {
|
||||||
this.form.token = config
|
this.form.token = config || ''
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
confirm () {
|
confirm () {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.$refs.smms.validate((valid) => {
|
this.$refs.smms.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.smms': this.form
|
'picBed.smms': this.form
|
||||||
})
|
})
|
||||||
const successNotification = new window.Notification('设置结果', {
|
const successNotification = new window.Notification('设置结果', {
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
:rules="{
|
:rules="{
|
||||||
required: true, message: 'SecretId不能为空', trigger: 'blur'
|
required: true, message: 'SecretId不能为空', trigger: 'blur'
|
||||||
}">
|
}">
|
||||||
<el-input v-model="form.secretId" placeholder="SecretId" @keyup.native.enter="confirm('weiboForm')"></el-input>
|
<el-input v-model="form.secretId" placeholder="SecretId" @keyup.native.enter="confirm"></el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<el-form-item
|
||||||
label="设定SecretKey"
|
label="设定SecretKey"
|
||||||
@ -104,8 +104,8 @@ export default class extends Vue {
|
|||||||
customUrl: '',
|
customUrl: '',
|
||||||
version: 'v4'
|
version: 'v4'
|
||||||
}
|
}
|
||||||
created () {
|
async created () {
|
||||||
const config = this.$db.get('picBed.tcyun') as ITcYunConfig
|
const config = await this.getConfig<ITcYunConfig>('picBed.tcyun')
|
||||||
if (config) {
|
if (config) {
|
||||||
this.form = Object.assign({}, config)
|
this.form = Object.assign({}, config)
|
||||||
}
|
}
|
||||||
@ -114,7 +114,7 @@ export default class extends Vue {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.$refs.tcyun.validate((valid) => {
|
this.$refs.tcyun.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.tcyun': this.form
|
'picBed.tcyun': this.form
|
||||||
})
|
})
|
||||||
const successNotification = new window.Notification('设置结果', {
|
const successNotification = new window.Notification('设置结果', {
|
||||||
|
@ -79,8 +79,8 @@ export default class extends Vue {
|
|||||||
options: '',
|
options: '',
|
||||||
path: ''
|
path: ''
|
||||||
}
|
}
|
||||||
created () {
|
async created () {
|
||||||
const config = this.$db.get('picBed.upyun') as IUpYunConfig
|
const config = await this.getConfig<IUpYunConfig>('picBed.upyun')
|
||||||
if (config) {
|
if (config) {
|
||||||
this.form = Object.assign({}, config)
|
this.form = Object.assign({}, config)
|
||||||
}
|
}
|
||||||
@ -89,7 +89,7 @@ export default class extends Vue {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
this.$refs.tcyun.validate((valid) => {
|
this.$refs.tcyun.validate((valid) => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.upyun': this.form
|
'picBed.upyun': this.form
|
||||||
})
|
})
|
||||||
const successNotification = new Notification('设置结果', {
|
const successNotification = new Notification('设置结果', {
|
||||||
|
@ -1,153 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div id="weibo-view">
|
|
||||||
<el-row :gutter="16">
|
|
||||||
<el-col :span="16" :offset="4">
|
|
||||||
<div class="view-title">
|
|
||||||
微博图床设置[已停止支持]
|
|
||||||
</div>
|
|
||||||
<el-form
|
|
||||||
ref="weiboForm"
|
|
||||||
label-position="right"
|
|
||||||
label-width="120px"
|
|
||||||
size="small"
|
|
||||||
:model="form">
|
|
||||||
<el-form-item
|
|
||||||
label="设定用户名"
|
|
||||||
prop="username"
|
|
||||||
:rules="{
|
|
||||||
required: !chooseCookie, message: '用户名不能为空', trigger: 'blur'
|
|
||||||
}">
|
|
||||||
<el-input v-model="form.username" placeholder="用户名" @keyup.native.enter="confirm('weiboForm')" :disabled="chooseCookie"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item
|
|
||||||
label="设定密码"
|
|
||||||
prop="password"
|
|
||||||
:rules="{required: !chooseCookie,messsage: '密码不能为空',trigger: 'blur'}">
|
|
||||||
<el-input v-model="form.password" type="password" @keyup.native.enter="confirm('weiboForm')" placeholder="密码" :disabled="chooseCookie"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item
|
|
||||||
label="使用Cookie上传"
|
|
||||||
>
|
|
||||||
<el-switch
|
|
||||||
v-model="chooseCookie"
|
|
||||||
active-text="cookie模式"
|
|
||||||
@change="handleSwitchChange"
|
|
||||||
></el-switch>
|
|
||||||
<i class="el-icon-question" @click="openWiki"></i>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item
|
|
||||||
label="设定Cookie"
|
|
||||||
prop="cookie"
|
|
||||||
:rules="{
|
|
||||||
required: chooseCookie, message: '密码不能为空', trigger: 'blur'
|
|
||||||
}">
|
|
||||||
<el-input v-model="form.cookie" @keyup.native.enter="confirm('weiboForm')" placeholder="Cookie" :disabled="!chooseCookie"></el-input>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="* 图片质量">
|
|
||||||
<el-radio-group v-model="quality">
|
|
||||||
<el-radio label="thumbnail">缩略图</el-radio>
|
|
||||||
<el-radio label="mw690">中等尺寸</el-radio>
|
|
||||||
<el-radio label="large">原图</el-radio>
|
|
||||||
</el-radio-group>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item>
|
|
||||||
<el-button-group>
|
|
||||||
<el-button type="primary" @click="confirm('weiboForm')" round>确定</el-button>
|
|
||||||
<el-button type="success" @click="setDefaultPicBed('weibo')" round :disabled="defaultPicBed === 'weibo'">设为默认图床</el-button>
|
|
||||||
</el-button-group>
|
|
||||||
</el-form-item>
|
|
||||||
</el-form>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
<script>
|
|
||||||
import mixin from '@/utils/ConfirmButtonMixin'
|
|
||||||
export default {
|
|
||||||
name: 'weibo',
|
|
||||||
mixins: [mixin],
|
|
||||||
data () {
|
|
||||||
return {
|
|
||||||
form: {
|
|
||||||
username: '',
|
|
||||||
password: '',
|
|
||||||
cookie: ''
|
|
||||||
},
|
|
||||||
chooseCookie: false,
|
|
||||||
quality: 'large'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
created () {
|
|
||||||
const config = this.$db.get('picBed.weibo')
|
|
||||||
if (config) {
|
|
||||||
this.form.username = config.username
|
|
||||||
this.form.password = config.password
|
|
||||||
this.quality = config.quality || 'large'
|
|
||||||
this.form.cookie = config.cookie
|
|
||||||
this.chooseCookie = config.chooseCookie
|
|
||||||
}
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
confirm (formName) {
|
|
||||||
this.$refs[formName].validate((valid) => {
|
|
||||||
if (valid) {
|
|
||||||
this.letPicGoSaveData({
|
|
||||||
'picBed.weibo': {
|
|
||||||
username: this.form.username,
|
|
||||||
password: this.form.password,
|
|
||||||
quality: this.quality,
|
|
||||||
cookie: this.form.cookie,
|
|
||||||
chooseCookie: this.chooseCookie
|
|
||||||
}
|
|
||||||
})
|
|
||||||
const successNotification = new window.Notification('设置结果', {
|
|
||||||
body: '设置成功'
|
|
||||||
})
|
|
||||||
successNotification.onclick = () => {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
})
|
|
||||||
},
|
|
||||||
handleSwitchChange () {
|
|
||||||
this.$refs['weiboForm'].resetFields()
|
|
||||||
},
|
|
||||||
openWiki () {
|
|
||||||
this.$electron.remote.shell.openExternal('https://picgo.github.io/PicGo-Doc/zh/guide/config.html#微博图床')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
<style lang='stylus'>
|
|
||||||
.el-message
|
|
||||||
left 60%
|
|
||||||
#weibo-view
|
|
||||||
.el-form
|
|
||||||
label
|
|
||||||
line-height 22px
|
|
||||||
padding-bottom 0
|
|
||||||
color #eee
|
|
||||||
.el-button-group
|
|
||||||
width 100%
|
|
||||||
.el-button
|
|
||||||
width 50%
|
|
||||||
.el-input__inner
|
|
||||||
border-radius 19px
|
|
||||||
.el-radio-group
|
|
||||||
margin-left 25px
|
|
||||||
.el-switch__label
|
|
||||||
color #eee
|
|
||||||
&.is-active
|
|
||||||
color #409EFF
|
|
||||||
.el-icon-question
|
|
||||||
font-size 20px
|
|
||||||
float right
|
|
||||||
margin-top 9px
|
|
||||||
color #eee
|
|
||||||
cursor pointer
|
|
||||||
transition .2s color ease-in-out
|
|
||||||
&:hover
|
|
||||||
color #409EFF
|
|
||||||
</style>
|
|
@ -31,11 +31,6 @@ export default new Router({
|
|||||||
component: () => import(/* webpackChunkName: "Upload" */ '@/pages/Upload.vue'),
|
component: () => import(/* webpackChunkName: "Upload" */ '@/pages/Upload.vue'),
|
||||||
name: 'upload'
|
name: 'upload'
|
||||||
},
|
},
|
||||||
{
|
|
||||||
path: 'weibo',
|
|
||||||
component: () => import(/* webpackChunkName: "Weibo" */ '@/pages/picbeds/Weibo.vue'),
|
|
||||||
name: 'weibo'
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
path: 'qiniu',
|
path: 'qiniu',
|
||||||
component: () => import(/* webpackChunkName: "Qiniu" */ '@/pages/picbeds/Qiniu.vue'),
|
component: () => import(/* webpackChunkName: "Qiniu" */ '@/pages/picbeds/Qiniu.vue'),
|
||||||
|
@ -1,10 +1,17 @@
|
|||||||
import { Component, Vue } from 'vue-property-decorator'
|
import { Component, Vue } from 'vue-property-decorator'
|
||||||
import { ipcRenderer } from 'electron'
|
import { ipcRenderer } from 'electron'
|
||||||
|
import { IConfig } from 'picgo/dist/src/types'
|
||||||
@Component
|
@Component
|
||||||
export default class extends Vue {
|
export default class extends Vue {
|
||||||
defaultPicBed = this.$db.get('picBed.uploader') || this.$db.get('picBed.current') || 'smms'
|
defaultPicBed = 'smms'
|
||||||
|
async created () {
|
||||||
|
const config = await this.getConfig<IConfig>()
|
||||||
|
if (config) {
|
||||||
|
this.defaultPicBed = config?.picBed?.uploader || config?.picBed?.current || 'smms'
|
||||||
|
}
|
||||||
|
}
|
||||||
setDefaultPicBed (type: string) {
|
setDefaultPicBed (type: string) {
|
||||||
this.letPicGoSaveData({
|
this.saveConfig({
|
||||||
'picBed.current': type,
|
'picBed.current': type,
|
||||||
'picBed.uploader': type
|
'picBed.uploader': type
|
||||||
})
|
})
|
||||||
|
53
src/renderer/utils/db.ts
Normal file
53
src/renderer/utils/db.ts
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import { IObject, IResult } from '@picgo/store/dist/types'
|
||||||
|
import { ipcRenderer, IpcRendererEvent } from 'electron'
|
||||||
|
import { uuid } from 'uuidv4'
|
||||||
|
import {
|
||||||
|
PICGO_GET_DB,
|
||||||
|
PICGO_INSERT_DB,
|
||||||
|
PICGO_INSERT_MANY_DB,
|
||||||
|
PICGO_UPDATE_BY_ID_DB,
|
||||||
|
PICGO_GET_BY_ID_DB,
|
||||||
|
PICGO_REMOVE_BY_ID_DB
|
||||||
|
} from '#/events/constants'
|
||||||
|
import { IGalleryDB } from '#/types/extra-vue'
|
||||||
|
export class GalleryDB implements IGalleryDB {
|
||||||
|
async get<T> (): Promise<IResult<T>[]> {
|
||||||
|
const res = await this.msgHandler<IResult<T>[]>(PICGO_GET_DB)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
async insert<T> (value: T): Promise<IResult<T>> {
|
||||||
|
const res = await this.msgHandler<IResult<T>>(PICGO_INSERT_DB, value)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
async insertMany<T> (value: T[]): Promise<IResult<T>[]> {
|
||||||
|
const res = await this.msgHandler<IResult<T>[]>(PICGO_INSERT_MANY_DB, value)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
async updateById (id: string, value: IObject): Promise<boolean> {
|
||||||
|
const res = await this.msgHandler<boolean>(PICGO_UPDATE_BY_ID_DB, id, value)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
async getById (id: string): Promise<IObject | undefined> {
|
||||||
|
const res = await this.msgHandler<IObject | undefined>(PICGO_GET_BY_ID_DB, id)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
async removeById (id: string): Promise<void> {
|
||||||
|
const res = await this.msgHandler<void>(PICGO_REMOVE_BY_ID_DB, id)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
private msgHandler<T> (method: string, ...args: any[]): Promise<T> {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const callbackId = uuid()
|
||||||
|
const callback = (event: IpcRendererEvent, data: T, returnCallbackId: string) => {
|
||||||
|
if (returnCallbackId === callbackId) {
|
||||||
|
resolve(data)
|
||||||
|
ipcRenderer.removeListener(method, callback)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ipcRenderer.on(method, callback)
|
||||||
|
ipcRenderer.send(method, ...args)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default new GalleryDB()
|
@ -1,8 +1,29 @@
|
|||||||
import { Component, Vue } from 'vue-property-decorator'
|
import { Component, Vue } from 'vue-property-decorator'
|
||||||
import { ipcRenderer } from 'electron'
|
import { ipcRenderer, IpcRendererEvent } from 'electron'
|
||||||
|
import { PICGO_SAVE_CONFIG, PICGO_GET_CONFIG } from '#/events/constants'
|
||||||
|
import { uuid } from 'uuidv4'
|
||||||
@Component
|
@Component
|
||||||
export default class extends Vue {
|
export default class extends Vue {
|
||||||
letPicGoSaveData (data: IObj) {
|
// support string key + value or object config
|
||||||
ipcRenderer.send('picgoSaveData', data)
|
saveConfig (config: IObj | string, value?: any) {
|
||||||
|
if (typeof config === 'string') {
|
||||||
|
config = {
|
||||||
|
[config]: value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ipcRenderer.send(PICGO_SAVE_CONFIG, config)
|
||||||
|
}
|
||||||
|
getConfig<T> (key?: string): Promise<T | undefined> {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
const callbackId = uuid()
|
||||||
|
const callback = (event: IpcRendererEvent, config: T | undefined, returnCallbackId: string) => {
|
||||||
|
if (returnCallbackId === callbackId) {
|
||||||
|
resolve(config)
|
||||||
|
ipcRenderer.removeListener(PICGO_GET_CONFIG, callback)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ipcRenderer.on(PICGO_GET_CONFIG, callback)
|
||||||
|
ipcRenderer.send(PICGO_GET_CONFIG, key, callbackId)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,3 +4,11 @@ export const TOGGLE_SHORTKEY_MODIFIED_MODE = 'TOGGLE_SHORTKEY_MODIFIED_MODE'
|
|||||||
export const TALKING_DATA_APPID = '7E6832BCE3F1438696579E541DFEBFDA'
|
export const TALKING_DATA_APPID = '7E6832BCE3F1438696579E541DFEBFDA'
|
||||||
export const TALKING_DATA_EVENT = 'TALKING_DATA_EVENT'
|
export const TALKING_DATA_EVENT = 'TALKING_DATA_EVENT'
|
||||||
export const SHOW_PRIVACY_MESSAGE = 'SHOW_PRIVACY_MESSAGE'
|
export const SHOW_PRIVACY_MESSAGE = 'SHOW_PRIVACY_MESSAGE'
|
||||||
|
export const PICGO_SAVE_CONFIG = 'PICGO_SAVE_CONFIG'
|
||||||
|
export const PICGO_GET_CONFIG = 'PICGO_GET_CONFIG'
|
||||||
|
export const PICGO_GET_DB = 'PICGO_GET_DB'
|
||||||
|
export const PICGO_INSERT_DB = 'PICGO_INSERT_DB'
|
||||||
|
export const PICGO_INSERT_MANY_DB = 'PICGO_INSERT_MANY_DB'
|
||||||
|
export const PICGO_UPDATE_BY_ID_DB = 'PICGO_UPDATE_BY_ID_DB'
|
||||||
|
export const PICGO_GET_BY_ID_DB = 'PICGO_GET_BY_ID_DB'
|
||||||
|
export const PICGO_REMOVE_BY_ID_DB = 'PICGO_REMOVE_BY_ID_DB'
|
||||||
|
17
src/universal/types/extra-vue.d.ts
vendored
17
src/universal/types/extra-vue.d.ts
vendored
@ -1,14 +1,25 @@
|
|||||||
import VueRouter, { Route } from 'vue-router'
|
import VueRouter, { Route } from 'vue-router'
|
||||||
import db from '#/datastore'
|
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
import { IObject, IResult } from '@picgo/store/dist/types'
|
||||||
|
|
||||||
|
interface IGalleryDB {
|
||||||
|
get<T>(): Promise<IResult<T>[]>
|
||||||
|
insert<T> (value: T): Promise<IResult<T>>
|
||||||
|
insertMany<T> (value: T[]): Promise<IResult<T>[]>
|
||||||
|
updateById (id: string, value: IObject): Promise<boolean>
|
||||||
|
getById<T> (id: string): Promise<IResult<T> | undefined>
|
||||||
|
removeById (id: string): Promise<void>
|
||||||
|
}
|
||||||
|
|
||||||
declare module 'vue/types/vue' {
|
declare module 'vue/types/vue' {
|
||||||
interface Vue {
|
interface Vue {
|
||||||
$router: VueRouter,
|
$router: VueRouter,
|
||||||
$route: Route,
|
$route: Route,
|
||||||
$db: typeof db
|
|
||||||
$http: typeof axios
|
$http: typeof axios
|
||||||
$builtInPicBed: string[]
|
$builtInPicBed: string[]
|
||||||
$bus: Vue
|
$bus: Vue
|
||||||
letPicGoSaveData(data: IObj): void
|
$$db: IGalleryDB
|
||||||
|
saveConfig(data: IObj | string, value?: any): void
|
||||||
|
getConfig<T>(key?: string): Promise<T | undefined>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
8
src/universal/types/types.d.ts
vendored
8
src/universal/types/types.d.ts
vendored
@ -144,6 +144,14 @@ interface IPicGoPlugin {
|
|||||||
hasInstall?: boolean
|
hasInstall?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface IPicGoPluginConfig {
|
||||||
|
name: string
|
||||||
|
type: string
|
||||||
|
required: boolean
|
||||||
|
default?: any
|
||||||
|
[propName: string]: any
|
||||||
|
}
|
||||||
|
|
||||||
interface IPluginMenuConfig {
|
interface IPluginMenuConfig {
|
||||||
name: string
|
name: string
|
||||||
fullName?: string
|
fullName?: string
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import db from '#/datastore'
|
import db from '~/main/apis/core/datastore'
|
||||||
import { IPasteStyle } from '#/types/enum'
|
import { IPasteStyle } from '#/types/enum'
|
||||||
import { handleUrlEncode } from './common'
|
import { handleUrlEncode } from './common'
|
||||||
|
|
||||||
|
@ -3,8 +3,6 @@ function resolve (dir) {
|
|||||||
return path.join(__dirname, dir)
|
return path.join(__dirname, dir)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(process.argv)
|
|
||||||
|
|
||||||
const arch = process.argv.includes('--ia32') ? 'ia32' : 'x64'
|
const arch = process.argv.includes('--ia32') ? 'ia32' : 'x64'
|
||||||
|
|
||||||
const config = {
|
const config = {
|
||||||
|
85
yarn.lock
85
yarn.lock
@ -918,6 +918,18 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
ora "^3.4.0"
|
ora "^3.4.0"
|
||||||
|
|
||||||
|
"@picgo/store@^1.0.0-alpha.3":
|
||||||
|
version "1.0.0-alpha.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/@picgo/store/-/store-1.0.0-alpha.3.tgz#b0f4f12c471cf370a95dcab93ed2b6291760d887"
|
||||||
|
integrity sha512-BUj/lZiAWDu7gZRwRtPIfw7LwV55PD/dUkAjPsscjn/EmckiC3LEek97/wr4j6vQc45C7LEJfgpzeEYSU76vUA==
|
||||||
|
dependencies:
|
||||||
|
"@types/bson" "^4.0.1"
|
||||||
|
"@types/graceful-fs" "^4.1.3"
|
||||||
|
bson "^4.0.3"
|
||||||
|
comment-json "^4.1.0"
|
||||||
|
lodash-id "^0.14.0"
|
||||||
|
lowdb "^1.0.0"
|
||||||
|
|
||||||
"@sindresorhus/is@^0.14.0":
|
"@sindresorhus/is@^0.14.0":
|
||||||
version "0.14.0"
|
version "0.14.0"
|
||||||
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
|
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea"
|
||||||
@ -939,6 +951,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
defer-to-connect "^1.0.1"
|
defer-to-connect "^1.0.1"
|
||||||
|
|
||||||
|
"@types/bson@^4.0.1":
|
||||||
|
version "4.0.4"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.0.4.tgz#79d2d26e81070044db2a1a8b2cc2f673c840e1e5"
|
||||||
|
integrity sha512-awqorHvQS0DqxkHQ/FxcPX9E+H7Du51Qw/2F+5TBMSaE3G0hm+8D3eXJ6MAzFw75nE8V7xF0QvzUSdxIjJb/GA==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/caseless@*":
|
"@types/caseless@*":
|
||||||
version "0.12.2"
|
version "0.12.2"
|
||||||
resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8"
|
resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8"
|
||||||
@ -980,6 +999,13 @@
|
|||||||
"@types/minimatch" "*"
|
"@types/minimatch" "*"
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/graceful-fs@^4.1.3":
|
||||||
|
version "4.1.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15"
|
||||||
|
integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/inquirer@^6.5.0":
|
"@types/inquirer@^6.5.0":
|
||||||
version "6.5.0"
|
version "6.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-6.5.0.tgz#b83b0bf30b88b8be7246d40e51d32fe9d10e09be"
|
resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-6.5.0.tgz#b83b0bf30b88b8be7246d40e51d32fe9d10e09be"
|
||||||
@ -1064,6 +1090,11 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.6.tgz#c880579e087d7a0db13777ff8af689f4ffc7b0d5"
|
resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-2.3.6.tgz#c880579e087d7a0db13777ff8af689f4ffc7b0d5"
|
||||||
integrity sha512-wHNBMnkoEBiRAd3s8KTKwIuO9biFtTf0LehITzBhSco+HQI0xkXZbLOD55SW3Aqw3oUkHstkm5SPv58yaAdFPQ==
|
integrity sha512-wHNBMnkoEBiRAd3s8KTKwIuO9biFtTf0LehITzBhSco+HQI0xkXZbLOD55SW3Aqw3oUkHstkm5SPv58yaAdFPQ==
|
||||||
|
|
||||||
|
"@types/uuid@8.3.1":
|
||||||
|
version "8.3.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.1.tgz#1a32969cf8f0364b3d8c8af9cc3555b7805df14f"
|
||||||
|
integrity sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==
|
||||||
|
|
||||||
"@types/webpack-env@^1.13.9":
|
"@types/webpack-env@^1.13.9":
|
||||||
version "1.14.1"
|
version "1.14.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.14.1.tgz#0d8a53f308f017c53a5ddc3d07f4d6fa76b790d7"
|
resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.14.1.tgz#0d8a53f308f017c53a5ddc3d07f4d6fa76b790d7"
|
||||||
@ -1812,6 +1843,11 @@ array-includes@^3.0.3:
|
|||||||
define-properties "^1.1.3"
|
define-properties "^1.1.3"
|
||||||
es-abstract "^1.17.0-next.0"
|
es-abstract "^1.17.0-next.0"
|
||||||
|
|
||||||
|
array-timsort@^1.0.3:
|
||||||
|
version "1.0.3"
|
||||||
|
resolved "https://registry.yarnpkg.com/array-timsort/-/array-timsort-1.0.3.tgz#3c9e4199e54fb2b9c3fe5976396a21614ef0d926"
|
||||||
|
integrity sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==
|
||||||
|
|
||||||
array-union@^1.0.1, array-union@^1.0.2:
|
array-union@^1.0.1, array-union@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
|
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
|
||||||
@ -2009,6 +2045,11 @@ base64-js@^1.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
|
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
|
||||||
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
|
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
|
||||||
|
|
||||||
|
base64-js@^1.3.1:
|
||||||
|
version "1.5.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
|
||||||
|
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
|
||||||
|
|
||||||
base@^0.11.1:
|
base@^0.11.1:
|
||||||
version "0.11.2"
|
version "0.11.2"
|
||||||
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
|
||||||
@ -2252,6 +2293,13 @@ browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.7.3, browserslist@^4.8
|
|||||||
electron-to-chromium "^1.3.322"
|
electron-to-chromium "^1.3.322"
|
||||||
node-releases "^1.1.42"
|
node-releases "^1.1.42"
|
||||||
|
|
||||||
|
bson@^4.0.3:
|
||||||
|
version "4.4.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/bson/-/bson-4.4.1.tgz#682c3cb8b90b222414ce14ef8398154ba2cc21bc"
|
||||||
|
integrity sha512-Uu4OCZa0jouQJCKOk1EmmyqtdWAP5HVLru4lQxTwzJzxT+sJ13lVpEZU/MATDxtHiekWMAL84oQY3Xn1LpJVSg==
|
||||||
|
dependencies:
|
||||||
|
buffer "^5.6.0"
|
||||||
|
|
||||||
buffer-alloc-unsafe@^1.1.0:
|
buffer-alloc-unsafe@^1.1.0:
|
||||||
version "1.1.0"
|
version "1.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
|
||||||
@ -2312,6 +2360,14 @@ buffer@^5.1.0, buffer@^5.2.1:
|
|||||||
base64-js "^1.0.2"
|
base64-js "^1.0.2"
|
||||||
ieee754 "^1.1.4"
|
ieee754 "^1.1.4"
|
||||||
|
|
||||||
|
buffer@^5.6.0:
|
||||||
|
version "5.7.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
|
||||||
|
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
|
||||||
|
dependencies:
|
||||||
|
base64-js "^1.3.1"
|
||||||
|
ieee754 "^1.1.13"
|
||||||
|
|
||||||
builder-util-runtime@8.3.0:
|
builder-util-runtime@8.3.0:
|
||||||
version "8.3.0"
|
version "8.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.3.0.tgz#f5fac9139af6facf42a21fbe4d3aebed88fda33e"
|
resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-8.3.0.tgz#f5fac9139af6facf42a21fbe4d3aebed88fda33e"
|
||||||
@ -2879,6 +2935,17 @@ comment-json@^2.3.1:
|
|||||||
has-own-prop "^2.0.0"
|
has-own-prop "^2.0.0"
|
||||||
repeat-string "^1.6.1"
|
repeat-string "^1.6.1"
|
||||||
|
|
||||||
|
comment-json@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/comment-json/-/comment-json-4.1.0.tgz#09d08f0fbc4ad5eeccbac20f469adbb967dcbd2c"
|
||||||
|
integrity sha512-WEghmVYaNq9NlWbrkzQTSsya9ycLyxJxpTQfZEan6a5Jomnjw18zS3Podf8q1Zf9BvonvQd/+Z7Z39L7KKzzdQ==
|
||||||
|
dependencies:
|
||||||
|
array-timsort "^1.0.3"
|
||||||
|
core-util-is "^1.0.2"
|
||||||
|
esprima "^4.0.1"
|
||||||
|
has-own-prop "^2.0.0"
|
||||||
|
repeat-string "^1.6.1"
|
||||||
|
|
||||||
commitizen@^4.0.3:
|
commitizen@^4.0.3:
|
||||||
version "4.0.3"
|
version "4.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.0.3.tgz#c19a4213257d0525b85139e2f36db7cc3b4f6dae"
|
resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.0.3.tgz#c19a4213257d0525b85139e2f36db7cc3b4f6dae"
|
||||||
@ -5979,6 +6046,11 @@ icss-utils@^4.0.0, icss-utils@^4.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
postcss "^7.0.14"
|
postcss "^7.0.14"
|
||||||
|
|
||||||
|
ieee754@^1.1.13:
|
||||||
|
version "1.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
|
||||||
|
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
|
||||||
|
|
||||||
ieee754@^1.1.4:
|
ieee754@^1.1.4:
|
||||||
version "1.1.13"
|
version "1.1.13"
|
||||||
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
|
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84"
|
||||||
@ -11129,11 +11201,24 @@ utils-merge@1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
||||||
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
|
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
|
||||||
|
|
||||||
|
uuid@8.3.2:
|
||||||
|
version "8.3.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||||
|
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
||||||
|
|
||||||
uuid@^3.0.1, uuid@^3.3.2:
|
uuid@^3.0.1, uuid@^3.3.2:
|
||||||
version "3.3.3"
|
version "3.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
|
||||||
integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
|
integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
|
||||||
|
|
||||||
|
uuidv4@^6.2.11:
|
||||||
|
version "6.2.11"
|
||||||
|
resolved "https://registry.yarnpkg.com/uuidv4/-/uuidv4-6.2.11.tgz#34d5a03324eb38296b87ae523a64233b5286cc27"
|
||||||
|
integrity sha512-OTS4waH9KplrXNADKo+Q1kT9AHWr8DaC0S5F54RQzEwcUaEzBEWQQlJyDUw/u1bkRhJyqkqhLD4M4lbFbV+89g==
|
||||||
|
dependencies:
|
||||||
|
"@types/uuid" "8.3.1"
|
||||||
|
uuid "8.3.2"
|
||||||
|
|
||||||
validate-npm-package-license@^3.0.1:
|
validate-npm-package-license@^3.0.1:
|
||||||
version "3.0.4"
|
version "3.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
|
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
|
||||||
|
Loading…
Reference in New Issue
Block a user