From c6f2e16b806c430bb77db821e89497c830e4b875 Mon Sep 17 00:00:00 2001 From: Molunerfinn Date: Wed, 10 Jan 2018 11:31:07 +0800 Subject: [PATCH] Fixed: Chinese filename can't upload & add setting-info button --- src/index.ejs | 1 + src/main/index.js | 74 ++++++++++++++++-------- src/main/utils/qiniuUpload.js | 2 +- src/main/utils/upYunUpload.js | 4 +- src/renderer/components/SettingPage.vue | 67 ++++++++++++++++++++- src/renderer/main.js | 4 ++ static/hexo-theme-melody-logo.png | Bin 47742 -> 0 bytes 7 files changed, 123 insertions(+), 29 deletions(-) delete mode 100644 static/hexo-theme-melody-logo.png diff --git a/src/index.ejs b/src/index.ejs index a217aa2e..628d596f 100644 --- a/src/index.ejs +++ b/src/index.ejs @@ -3,6 +3,7 @@ + PicGo <% if (htmlWebpackPlugin.options.nodeModules) { %> diff --git a/src/main/index.js b/src/main/index.js index 27ba5fca..aaeb550f 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -1,10 +1,11 @@ 'use strict' import uploader from './utils/uploader.js' -import { app, BrowserWindow, Tray, Menu, Notification, clipboard, ipcMain, globalShortcut } from 'electron' +import { app, BrowserWindow, Tray, Menu, Notification, clipboard, ipcMain, globalShortcut, dialog } from 'electron' import db from '../datastore' import pasteTemplate from './utils/pasteTemplate' import updateChecker from './utils/updateChecker' +import pkg from '../../package.json' /** * Set `__static` path to static files in production * https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html @@ -35,6 +36,16 @@ const uploadFailed = () => { function createTray () { tray = new Tray(`${__static}/menubar.png`) const contextMenu = Menu.buildFromTemplate([ + { + label: '关于', + click () { + dialog.showMessageBox({ + title: 'PicGo', + message: 'PicGo', + detail: `Version: ${pkg.version}\nAuthor: Molunerfinn\nGithub: https://github.com/Molunerfinn/PicGo` + }) + } + }, { label: '打开详细窗口', click () { @@ -173,6 +184,7 @@ const createWindow = () => { }) createSettingWindow() + createMenu() } const createSettingWindow = () => { @@ -201,27 +213,29 @@ const createSettingWindow = () => { } const createMenu = () => { - const template = [{ - label: 'Edit', - submenu: [ - { label: 'Undo', accelerator: 'CmdOrCtrl+Z', selector: 'undo:' }, - { label: 'Redo', accelerator: 'Shift+CmdOrCtrl+Z', selector: 'redo:' }, - { type: 'separator' }, - { label: 'Cut', accelerator: 'CmdOrCtrl+X', selector: 'cut:' }, - { label: 'Copy', accelerator: 'CmdOrCtrl+C', selector: 'copy:' }, - { label: 'Paste', accelerator: 'CmdOrCtrl+V', selector: 'paste:' }, - { label: 'Select All', accelerator: 'CmdOrCtrl+A', selector: 'selectAll:' }, - { - label: 'Quit', - accelerator: 'CmdOrCtrl+Q', - click () { - app.quit() + if (process.env.NODE_ENV !== 'development') { + const template = [{ + label: 'Edit', + submenu: [ + { label: 'Undo', accelerator: 'CmdOrCtrl+Z', selector: 'undo:' }, + { label: 'Redo', accelerator: 'Shift+CmdOrCtrl+Z', selector: 'redo:' }, + { type: 'separator' }, + { label: 'Cut', accelerator: 'CmdOrCtrl+X', selector: 'cut:' }, + { label: 'Copy', accelerator: 'CmdOrCtrl+C', selector: 'copy:' }, + { label: 'Paste', accelerator: 'CmdOrCtrl+V', selector: 'paste:' }, + { label: 'Select All', accelerator: 'CmdOrCtrl+A', selector: 'selectAll:' }, + { + label: 'Quit', + accelerator: 'CmdOrCtrl+Q', + click () { + app.quit() + } } - } - ] - }] - menu = Menu.buildFromTemplate(template) - Menu.setApplicationMenu(menu) + ] + }] + menu = Menu.buildFromTemplate(template) + Menu.setApplicationMenu(menu) + } } const getWindowPosition = () => { @@ -323,14 +337,26 @@ ipcMain.on('uploadChoosedFiles', async (evt, files) => { } }) +const isSecondInstance = app.makeSingleInstance(() => { + if (settingWindow) { + if (settingWindow.isMinimized()) { + settingWindow.restore() + } + settingWindow.focus() + } +}) + +if (isSecondInstance) { + console.log('is 2') + app.quit() +} + app.on('ready', () => { createWindow() createTray() - createMenu() updateChecker() globalShortcut.register('CommandOrControl+Shift+P', () => { - console.log(1) uploadClipboardFiles() }) }) @@ -344,8 +370,6 @@ app.on('window-all-closed', () => { app.on('activate', () => { if (window === null || settingWindow === null) { createWindow() - createTray() - createMenu() } }) diff --git a/src/main/utils/qiniuUpload.js b/src/main/utils/qiniuUpload.js index f1d9e9ec..5df4a365 100644 --- a/src/main/utils/qiniuUpload.js +++ b/src/main/utils/qiniuUpload.js @@ -6,7 +6,7 @@ import { Notification } from 'electron' function postOptions (fileName, token, imgBase64) { const area = selectArea(db.read().get('picBed.qiniu.area').value() || 'z0') - const base64FileName = Buffer.from(fileName).toString('base64') + const base64FileName = Buffer.from(fileName, 'utf-8').toString('base64').replace(/\+/g, '-').replace(/\//g, '_') return { method: 'POST', url: `http://upload${area}.qiniu.com/putb64/-1/key/${base64FileName}`, diff --git a/src/main/utils/upYunUpload.js b/src/main/utils/upYunUpload.js index 9dc76dce..2c52b954 100644 --- a/src/main/utils/upYunUpload.js +++ b/src/main/utils/upYunUpload.js @@ -13,7 +13,7 @@ const generateSignature = (fileName) => { const password = options.password const md5Password = MD5(password) const date = new Date().toGMTString() - const uri = `/${options.bucket}/${fileName}` + const uri = `/${options.bucket}/${encodeURI(fileName)}` const value = `PUT&${uri}&${date}` const sign = crypto.createHmac('sha1', md5Password).update(value).digest('base64') return `UPYUN ${operator}:${sign}` @@ -24,7 +24,7 @@ const postOptions = (fileName, signature, imgBase64) => { const bucket = options.bucket return { method: 'PUT', - url: `https://v0.api.upyun.com/${bucket}/${fileName}`, + url: `https://v0.api.upyun.com/${bucket}/${encodeURI(fileName)}`, headers: { Authorization: signature, Date: new Date().toGMTString() diff --git a/src/renderer/components/SettingPage.vue b/src/renderer/components/SettingPage.vue index 03ab6b4d..df6659ff 100644 --- a/src/renderer/components/SettingPage.vue +++ b/src/renderer/components/SettingPage.vue @@ -34,29 +34,80 @@ 又拍云设置 + + + PicGo是免费开源的软件,如果你喜欢它,对你有帮助,不妨请我喝杯咖啡? + + + 支付宝 +
支付宝
+
+ + 支付宝 +
微信
+
+
+