From 74b94feb7404edd75093905acbfc35ac27e42286 Mon Sep 17 00:00:00 2001 From: Molunerfinn Date: Tue, 8 May 2018 14:04:43 +0800 Subject: [PATCH] Finished: rename file before upload --- src/main/utils/img2base64.js | 83 +++++++++++++++++-- src/main/utils/tcYunUpload.js | 2 +- src/renderer/components/RenamePage.vue | 56 +++++++++++++ .../components/SettingView/PicGoSetting.vue | 7 +- .../components/SettingView/Upload.vue | 3 +- src/renderer/router/index.js | 5 ++ 6 files changed, 146 insertions(+), 10 deletions(-) create mode 100644 src/renderer/components/RenamePage.vue diff --git a/src/main/utils/img2base64.js b/src/main/utils/img2base64.js index 061987f..827fb0c 100644 --- a/src/main/utils/img2base64.js +++ b/src/main/utils/img2base64.js @@ -2,17 +2,51 @@ import fs from 'fs-extra' import path from 'path' import sizeOf from 'image-size' import fecha from 'fecha' +import { BrowserWindow, ipcMain } from 'electron' +import db from '../../datastore/index.js' +const renameURL = process.env.NODE_ENV === 'development' ? `http://localhost:9080/#rename-page` : `file://${__dirname}/index.html#rename-page` + +const createRenameWindow = () => { + let options = { + height: 175, + width: 300, + show: true, + fullscreenable: false, + resizable: false, + vibrancy: 'ultra-dark', + webPreferences: { + backgroundThrottling: false + } + } + + if (process.platform === 'win32') { + options.show = true + options.backgroundColor = '#3f3c37' + } + + const window = new BrowserWindow(options) + window.loadURL(renameURL) + return window +} const imgFromPath = async (imgPath) => { let results = [] + let rename = db.read().get('picBed.rename').value() await Promise.all(imgPath.map(async item => { + let name + let fileName = path.basename(item) + if (rename) { + const window = createRenameWindow() + await waitForShow(window.webContents) + window.webContents.send('rename', fileName, window.webContents.id) + name = await waitForRename(window, window.webContents.id) + } let buffer = await fs.readFile(item) let base64Image = Buffer.from(buffer, 'binary').toString('base64') - let fileName = path.basename(item) let imgSize = sizeOf(item) results.push({ base64Image, - fileName, + fileName: name || fileName, width: imgSize.width, height: imgSize.height, extname: path.extname(item) @@ -21,13 +55,21 @@ const imgFromPath = async (imgPath) => { return results } -const imgFromClipboard = (file) => { +const imgFromClipboard = async (file) => { let result = [] + let rename = db.read().get('picBed.rename').value() if (file !== null) { - const today = fecha.format(new Date(), 'YYYYMMDDHHmmss') + let name + const today = fecha.format(new Date(), 'YYYYMMDDHHmmss') + '.png' + if (rename) { + const window = createRenameWindow() + await waitForShow(window.webContents) + window.webContents.send('rename', today, window.webContents.id) + name = await waitForRename(window, window.webContents.id) + } result.push({ base64Image: file.imgUrl.replace(/^data\S+,/, ''), - fileName: `${today}.png`, + fileName: name || today, width: file.width, height: file.height, extname: '.png' @@ -38,10 +80,18 @@ const imgFromClipboard = (file) => { const imgFromUploader = async (files) => { let results = [] + let rename = db.read().get('picBed.rename').value() await Promise.all(files.map(async item => { + let name + if (rename) { + const window = createRenameWindow() + await waitForShow(window.webContents) + window.webContents.send('rename', item.name, window.webContents.id) + name = await waitForRename(window, window.webContents.id) + } let buffer = await fs.readFile(item.path) let base64Image = Buffer.from(buffer, 'binary').toString('base64') - let fileName = item.name + let fileName = name || item.name let imgSize = sizeOf(item.path) results.push({ base64Image, @@ -54,6 +104,27 @@ const imgFromUploader = async (files) => { return results } +const waitForShow = (webcontent) => { + return new Promise((resolve, reject) => { + webcontent.on('dom-ready', () => { + resolve() + }) + }) +} + +const waitForRename = (window, id) => { + return new Promise((resolve, reject) => { + ipcMain.once(`rename${id}`, (evt, newName) => { + resolve(newName) + window.hide() + }) + window.on('close', () => { + resolve(null) + ipcMain.removeAllListeners(`rename${id}`) + }) + }) +} + export { imgFromPath, imgFromClipboard, diff --git a/src/main/utils/tcYunUpload.js b/src/main/utils/tcYunUpload.js index 7ef951d..fab33db 100644 --- a/src/main/utils/tcYunUpload.js +++ b/src/main/utils/tcYunUpload.js @@ -63,7 +63,7 @@ const postOptions = (fileName, signature, imgBase64) => { } else { return { method: 'PUT', - url: `http://${options.bucket}.cos.${options.area}.myqcloud.com/${path}${fileName}`, + url: `http://${options.bucket}.cos.${options.area}.myqcloud.com/${path}${encodeURI(fileName)}`, headers: { Host: `${options.bucket}.cos.${options.area}.myqcloud.com`, Authorization: `q-sign-algorithm=sha1&q-ak=${options.secretId}&q-sign-time=${signature.signTime}&q-key-time=${signature.signTime}&q-header-list=host&q-url-param-list=&q-signature=${signature.signature}`, diff --git a/src/renderer/components/RenamePage.vue b/src/renderer/components/RenamePage.vue new file mode 100644 index 0000000..9865d1b --- /dev/null +++ b/src/renderer/components/RenamePage.vue @@ -0,0 +1,56 @@ + + + \ No newline at end of file diff --git a/src/renderer/components/SettingView/PicGoSetting.vue b/src/renderer/components/SettingView/PicGoSetting.vue index 1887a4e..6b1a38d 100644 --- a/src/renderer/components/SettingView/PicGoSetting.vue +++ b/src/renderer/components/SettingView/PicGoSetting.vue @@ -48,6 +48,7 @@ v-model="form.rename" active-text="开" inactive-text="关" + @change="handleRename" > @@ -212,6 +214,9 @@ export default { handleAutoStartChange (val) { this.$db.read().set('picBed.autoStart', val).write() this.$electron.ipcRenderer.send('autoStart', val) + }, + handleRename (val) { + this.$db.read().set('picBed.rename', val).write() } }, beforeDestroy () { diff --git a/src/renderer/components/SettingView/Upload.vue b/src/renderer/components/SettingView/Upload.vue index fa2bd9c..8700ad6 100644 --- a/src/renderer/components/SettingView/Upload.vue +++ b/src/renderer/components/SettingView/Upload.vue @@ -173,11 +173,10 @@ export default { #file-uploader display none .upload-progress - margin-top 20px opacity 0 transition all .2s ease-in-out width 450px - margin-left 25px + margin 20px auto 0 &.show opacity 1 .el-progress-bar__inner diff --git a/src/renderer/router/index.js b/src/renderer/router/index.js index 1c70706..f92eb58 100644 --- a/src/renderer/router/index.js +++ b/src/renderer/router/index.js @@ -10,6 +10,11 @@ export default new Router({ name: 'tray-page', component: require('@/components/TrayPage').default }, + { + path: '/rename-page', + name: 'rename-page', + component: require('@/components/RenamePage').default + }, { path: '/setting', name: 'setting-page',