diff --git a/README.md b/README.md index 63044fd..a21ae64 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ 可以配置一些常用的命令,比如`回收站` `查看网络连接`之类 -![UTOOLS1556779074409.png](https://i.loli.net/2019/05/02/5cca904684757.png) +![UTOOLS1556854200416.png](https://i.loli.net/2019/05/03/5ccbb5bb2c7d5.png) ![UTOOLS1556779310377.png](https://i.loli.net/2019/05/02/5cca91329a525.png) @@ -62,6 +62,10 @@ ![UTOOLS1556780846840.png](https://i.loli.net/2019/05/02/5cca973294933.png) +#### 导入导出 + +支持命令的导入或者导出 + ## 下载 [百度网盘](https://pan.baidu.com/s/1kEEQcQ1p3Rjli2sTtmCcTg) 提取码: `rbek` diff --git a/assets/options.css b/assets/options.css index 034bf6f..18bd98d 100644 --- a/assets/options.css +++ b/assets/options.css @@ -203,15 +203,20 @@ margin-right: 10px; } -#options span.editBtn { +#options span.Btn{ font-size: 16px; cursor: pointer; +} + +#options span.editBtn { color: #00af2c; } +#options span.exportBtn { + color: #407abf; +} + #options span.delBtn { - font-size: 16px; - cursor: pointer; color: #ed5b49 } @@ -219,6 +224,10 @@ color: #057205; } +#options span.exportBtn:hover { + color: #2d5586; +} + #options span.delBtn:hover { color: #bd3523; } diff --git a/assets/options.js b/assets/options.js index 67c8039..15b6ee0 100644 --- a/assets/options.js +++ b/assets/options.js @@ -4,6 +4,38 @@ getCustomFts = () => { return customFts; } +putCustomFts = (code, pushData) => { + var db = utools.db.get("customFts"); + if (db) { + var rev = db._rev + var data = db.data + data[code] = pushData; + utools.db.put({ _id: "customFts", data: data, _rev: rev }); + } else { + var data = {}; + data[code] = pushData; + utools.db.put({ _id: "customFts", data: data }); + } +} + +importCommand = () => { + var options = { + filters: [{ name: 'json', extensions: ['json'] }, ] + } + let file = window.openFolder(options)[0]; + $.get(file, data => { + var pushData = JSON.parse(data), + code = basename(file, '.json'), + customFts = getCustomFts(); + if (code in customFts) { + window.messageBox({ type: 'error', icon: window.logo, message: "命令名称重复, 请先修改文件名再导入!", buttons: ['朕知道了'] }) + } else { + putCustomFts(code, pushData); + showOptions(); + } + }) +} + programs = { shell: { bin: 'bash', @@ -78,9 +110,11 @@ showOptions = () => { break; } } - var iconpath = pjoin(dirname, features.icon), - base64Ico = customFts[fts].base64Ico; - if (!exists(iconpath) && base64Ico) saveBase64Ico(iconpath, base64Ico); + try { + var iconpath = cacheIco(customFts[fts].base64Ico, features.icon); + } catch (e) { + window.messageBox({ type: 'error', icon: window.logo, message: e.toString(), buttons: ['纳尼?!'] }) + } featureList += ` ${cmds}${features.explain} - - + + + ` }; featureList += `
添加命令
+
导入命令
全部禁用
全部启用
` @@ -180,6 +216,8 @@ $("#options").on('click', '.footBtn', function () { switch ($(this).attr('id')) { case 'add': showCustomize(); break; + case 'import': importCommand(); + break; case 'enableAll': $(".checked-switch:not(:checked)").click(); break; case 'disableAll': $(".checked-switch:checked").click(); @@ -219,6 +257,20 @@ $("#options").on('click', '.editBtn', function () { window.editor.setValue(data.cmd); }) +// 导出 +$("#options").on('click', '.exportBtn', function () { + var code = $(this).attr('code'), + json = getCustomFts()[code], + options = { + title: '选择保存位置', + defaultPath: code, + filters: [ + { name: 'json', extensions: ['json'] }, + ] + }; + window.saveFile(options, JSON.stringify(json)); +}) + // 删除 $("#options").on('click', '.delBtn', function () { var code = $(this).attr('code'), @@ -232,7 +284,14 @@ $("#options").on('click', '.delBtn', function () { // 选择图标 $("#options").on('click', '#icon, #iconame', function () { - let iconpath = window.openFolder()[0]; + var options = { + buttonLabel: '选择', + filters: [{ + name: 'Images', + extensions: ['jpg', 'jpeg', 'png'] + }, ] + } + let iconpath = window.openFolder(options)[0]; $("#iconame").val(basename(iconpath)); $("#icon").attr('src', iconpath); }) @@ -244,7 +303,7 @@ $("#options").on('click', '.saveBtn', function () { // 如果 code 重复, 编辑状态下不检测 if (code in customFts && !$('#kw').attr('edit')) { $('#kw').css({ 'border-bottom-color': '#ec1212' }) - window.messageBox({ type: 'error', icon: window.logo, message: "命令名称与现有的重复!", buttons: ['朕知道了'] }) + window.messageBox({ type: 'error', icon: window.logo, message: "命令名称重复!", buttons: ['朕知道了'] }) } else { var kw = $('#kw').val().split(','), program = $('#program').val(), @@ -258,9 +317,9 @@ $("#options").on('click', '.saveBtn', function () { base64ico; // 自定义了图标的情况下 if (iconame) { - icon = window.getIconPath(iconame); + icon = `../QuickCommandIcons/${iconame}`; if (iconpath == icon) { - base64ico = window.getBase64Ico(pjoin(dirname, iconpath)); + base64ico = window.getBase64Ico(resolve(dirname, iconpath)); } else { base64ico = window.getBase64Ico(iconpath); } @@ -281,9 +340,8 @@ $("#options").on('click', '.saveBtn', function () { noKeyword = false; } $("#customize").animate({ top: '100%' }); - var pushData = {}; // 添加特性 - pushData[code] = { + pushData = { features: { "code": code, "explain": desc, @@ -297,15 +355,7 @@ $("#options").on('click', '.saveBtn', function () { base64Ico: base64ico, noKeyword: noKeyword } - var db = utools.db.get("customFts"); - if (db) { - var rev = db._rev - var data = db.data - data[code] = pushData[code]; - utools.db.put({ _id: "customFts", data: data, _rev: rev }); - } else { - utools.db.put({ _id: "customFts", data: pushData }); - } + putCustomFts(code, pushData); showOptions(); } }) diff --git a/index.html b/index.html index 99c139f..16fc8d0 100644 --- a/index.html +++ b/index.html @@ -7,6 +7,7 @@ + diff --git a/preload.js b/preload.js index f074bff..cae3054 100644 --- a/preload.js +++ b/preload.js @@ -32,31 +32,32 @@ basename = path.basename; dirname = __dirname; -pjoin = path.join; +resolve = path.resolve; exists = fs.existsSync; -getIconPath = name => { - let dir = path.resolve(__dirname, '..', 'QuickCommandIcons') - if (!exists(dir)) fs.mkdirSync(dir); - return `../QuickCommandIcons/${name}` -} - getBase64Ico = path => { return fs.readFileSync(path, 'base64'); } -saveBase64Ico = (path, b64) => { - fs.writeFileSync(path, b64, 'base64'); +cacheIco = (b64, icon) => { + var file = path.resolve(__dirname, icon), + dir = path.dirname(file); + !exists(dir) && fs.mkdirSync(dir); + b64 && !exists(file) && fs.writeFileSync(file, b64, 'base64'); + return file; } -openFolder = () => { - return dialog.showOpenDialog(BrowserWindow.getFocusedWindow(), { - buttonLabel: '选择', - filters: [ - {name: 'Images', extensions: ['jpg', 'jpeg', 'png']}, - ] - }); +openFolder = options => { + return dialog.showOpenDialog(BrowserWindow.getFocusedWindow(), options); +} + +saveFile = (options, content) => { + dialog.showSaveDialog(BrowserWindow.getFocusedWindow(), options, filename => { + filename && fs.writeFile(filename, content, 'utf8', err => { + err && console.log(err) + }) + }) } copy = () => {