新增在线分享命令

This commit is contained in:
fofolee 2020-07-19 01:12:33 +08:00
parent 4e6cb90c24
commit b0ff86fd47
2 changed files with 305 additions and 184 deletions

View File

@ -19,38 +19,52 @@
} }
} }
let isJsonQc = obj => {
var keys = ["features", "program", "cmd", "output"]
if (keys.filter(x => typeof obj[x] == 'undefined').length) return false
return true
}
// 判断是否为可导入的快捷命令
let quickCommandParser = json => {
try {
var qc = JSON.parse(json)
} catch (error) {
return false
}
console.log(qc);
if (isJsonQc(qc)) return { single: true, qc: qc }
else if (!Object.values(qc).filter(q => !isJsonQc(q)).length) return { single: false, qc: qc }
else return false
}
// 导入 // 导入
let importCommand = file => { importCommand = file => {
var pushData, clipboardText = clipboardReadText()
if (!file) pushData = quickCommandParser(clipboardText)
if (!pushData) {
var options = file ? { type: 'file', argvs: file } : { type: 'dialog', argvs: { filters: [{ name: 'json', extensions: ['json'] }] } } var options = file ? { type: 'file', argvs: file } : { type: 'dialog', argvs: { filters: [{ name: 'json', extensions: ['json'] }] } }
options.readfile = true options.readfile = true
var fileinfo = getFileInfo(options) var fileinfo = getFileInfo(options)
if (!fileinfo) return false if (!fileinfo) return
try { pushData = quickCommandParser(fileinfo.data)
var pushData = JSON.parse(fileinfo.data); if (!pushData) return false
} catch (error) {
quickcommand.showMessageBox("格式错误", "error")
return false
} }
// 单个命令导入 // 单个命令导入
if (typeof(pushData.features) == 'object') { if (pushData.single) {
var code = pushData.features.code; var code = pushData.qc.features.code;
putDB(code, pushData, 'customFts'); putDB(code, pushData.qc, 'customFts');
return true
// 多个命令导入 // 多个命令导入
} else { } else {
if (typeof(Object.values(pushData)[0].features) == 'object') { for (var code of Object.keys(pushData.qc)) {
for (var code of Object.keys(pushData)) { putDB(code, pushData.qc[code], 'customFts');
putDB(code, pushData[code], 'customFts'); }
} }
return true return true
} }
}
quickcommand.showMessageBox("格式错误", "error")
return false
}
let exportAll = () => { let exportAll = () => {
json = utools.db.get('customFts').data, let jsonQc = utools.db.get('customFts').data,
options = { options = {
title: '选择保存位置', title: '选择保存位置',
defaultPath: 'quickCommand', defaultPath: 'quickCommand',
@ -58,7 +72,8 @@
{ name: 'json', extensions: ['json'] }, { name: 'json', extensions: ['json'] },
] ]
}; };
window.saveFile(options, JSON.stringify(json)); Object.keys(jsonQc).filter(k => jsonQc[k].tags && jsonQc[k].tags.includes('默认')).map(k => delete jsonQc[k])
window.saveFile(options, JSON.stringify(jsonQc));
} }
let clearAll = () => { let clearAll = () => {
@ -187,28 +202,28 @@
} }
var cmds = '', rules = features.cmds[0].match; var cmds = '', rules = features.cmds[0].match;
if (features.cmds[0].type == 'regex') { if (features.cmds[0].type == 'regex') {
if (rules.length > 15) rules = rules.slice(0, 15) + '...'; if (rules.length > 14) rules = rules.slice(0, 14) + '...';
cmds = `<div class="topchild">正则</div><div><span class="keyword re">${rules}</span></div>`; cmds = `<div class="topchild">正则</div><div><span class="keyword re">${rules}</span></div>`;
} else if (features.cmds[0].type == 'window') { } else if (features.cmds[0].type == 'window') {
cmds += `<div class="topchild">窗口</div><div>` cmds += `<div class="topchild">窗口</div><div>`
if (!rules) { if (!rules) {
cmds += `<span class="keyword win">所有窗口</span>` cmds += `<span class="keyword win">所有窗口</span>`
} else if (rules.title || rules.class) { } else if (rules.title || rules.class) {
cmds += `<span class="keyword win">${JSON.stringify(rules).slice(0, 15) + '...'}</span>`; cmds += `<span class="keyword win">${JSON.stringify(rules).slice(0, 14) + '...'}</span>`;
} else if (rules.app) { } else if (rules.app) {
rules = rules.app.join(",") rules = rules.app.join(",")
if(rules.length > 15) rules = rules.slice(0, 15) + '...'; if(rules.length > 14) rules = rules.slice(0, 14) + '...';
rules.split(',').forEach(r => { rules.split(',').forEach(r => {
cmds += `<span class="keyword win">${r}</span>`; cmds += `<span class="keyword win">${r}</span>`;
}); });
} }
cmds += `</div>` cmds += `</div>`
} else if (features.cmds[0].type == 'files') { } else if (features.cmds[0].type == 'files') {
if (rules.length > 15) rules = rules.slice(0, 15) + '...'; if (rules.length > 14) rules = rules.slice(0, 14) + '...';
cmds = `<div class="topchild">文件</div><div><span class="keyword fil">${rules}</span></div>`; cmds = `<div class="topchild">文件</div><div><span class="keyword fil">${rules}</span></div>`;
} else { } else {
rules = features.cmds.join(",") rules = features.cmds.join(",")
if(rules.length > 15) rules = rules.slice(0, 15) + '...'; if(rules.length > 14) rules = rules.slice(0, 14) + '...';
cmds += `<div class="topchild">关键字</div><div>` cmds += `<div class="topchild">关键字</div><div>`
rules.split(',').forEach(r => { rules.split(',').forEach(r => {
cmds += `<span class="keyword">${r}</span>`; cmds += `<span class="keyword">${r}</span>`;
@ -245,8 +260,7 @@
</td> </td>
<td> <td>
<span class="Btn editBtn"><img src="img/${tag == "默认" ? "view" : "edit"}.svg"></span> <span class="Btn editBtn"><img src="img/${tag == "默认" ? "view" : "edit"}.svg"></span>
<span class="Btn exportBtn"><img src="img/export.svg"></span> ${(tag == "默认" && !fofoCommon.isDev()) ? "" : `<span class="Btn exportBtn"><img src="img/export.svg"> </span><span class="Btn delBtn"><img src="img/del.svg"></span>`}
${tag == "默认" ? "" : `<span class="Btn delBtn"><img src="img/del.svg"></span>`}
</td>` </td>`
}) })
featureList += `</tr></table></div>` featureList += `</tr></table></div>`
@ -257,13 +271,14 @@
</div>` </div>`
var footer = ` var footer = `
<div class="foot"> <div class="foot">
<div id="add" class="footBtn">添加命令</div> <div id="add" class="footBtn">新建命令</div>
<div id="import" class="footBtn">导入命令</div> <div id="import" class="footBtn">导入命令</div>
<div id="getShares" class="footBtn">获取分享</div>
<div id="viewHelps" class="footBtn">查看帮助</div>
<div id="exportAll" class="footBtn">全部导出</div> <div id="exportAll" class="footBtn">全部导出</div>
<div id="clear" class="footBtn danger">全部删除</div> <div id="enableAll" class="footBtn">启用本页</div>
<div id="disableAll" class="footBtn danger">全部禁用</div> <div id="clear" class="footBtn danger">清空数据</div>
<div id="enableAll" class="footBtn">全部启用</div> <div id="disableAll" class="footBtn danger">禁用本页</div>
<!--<div id="viewHelps" class="footBtn">查看帮助</div>-->
</div>` </div>`
$("#options").append(sidebar + featureList + footer) $("#options").append(sidebar + featureList + footer)
} }
@ -614,12 +629,17 @@
// 底部功能按钮 // 底部功能按钮
$("#options").on('click', '.footBtn', function () { $("#options").on('click', '.footBtn', function () {
switch ($(this).attr('id')) { switch ($(this).attr('id')) {
case 'viewHelps': utools.createBrowserWindow('./helps/help.html'); case 'viewHelps': utools.createBrowserWindow('./helps/HELP.html');
break;
case 'getShares': getSharedQCFromYuQue();
break; break;
case 'add': showCustomize(); case 'add': showCustomize();
$("#customize").animate({ top: '0px' }); $("#customize").animate({ top: '0px' });
break; break;
case 'import': importCommand() && showOptions(); case 'import':
var success = importCommand()
if (success) showOptions() || quickcommand.showMessageBox("导入成功")
else if (success == false) quickcommand.showMessageBox("导入失败,格式错误", "error")
break; break;
case 'enableAll': $(".checked-switch:not(:checked)").click(); case 'enableAll': $(".checked-switch:not(:checked)").click();
break; break;
@ -632,13 +652,17 @@
} }
}) })
// 编辑 let editCurrentCommand = data => {
$("#options").on('click', '.editBtn', function () { let code = data.features.code
var readonly = false, let cmds = data.features.cmds[0]
code = $(this).parents('tr').attr('id'), let platform = data.features.platform
data = utools.db.get("customFts").data[code], let readonly = false
cmds = data.features.cmds[0], let extraInfo = {
platform = data.features.platform; authorName: data.authorName,
authorId: data.authorId,
docId: data.docId
}
$('#options').data('extraInfo', extraInfo)
if (data.tags && data.tags.includes("默认")) readonly = true if (data.tags && data.tags.includes("默认")) readonly = true
showCustomize(readonly); showCustomize(readonly);
data.tags && $('#tags').val(data.tags).trigger('change') data.tags && $('#tags').val(data.tags).trigger('change')
@ -674,6 +698,13 @@
$("#customize").animate({ top: '0px' }, () => { $("#customize").animate({ top: '0px' }, () => {
window.editor.replaceRange(data.cmd.slice(2000), {line: Infinity}); window.editor.replaceRange(data.cmd.slice(2000), {line: Infinity});
}); });
}
// 编辑
$("#options").on('click', '.editBtn', function () {
let code = $(this).parents('tr').attr('id')
let data = utools.db.get("customFts").data[code]
editCurrentCommand(data)
}) })
// 添加模拟按键 // 添加模拟按键
@ -734,18 +765,137 @@
}) })
}) })
let setYuQueToken = async () => {
let yuQueToken = await quickcommand.showInputBox(["请输入 Token"])
if (!yuQueToken) return
yuQueToken = yuQueToken[0]
yuQueClient.defaults.headers['X-Auth-Token'] = yuQueToken
try {
let res = await yuQueClient('user')
let authorId = res.data.data.account_id
let authorName = res.data.data.name
putDB('yuQueToken', yuQueToken, 'extraInfo')
putDB('authorName', authorName, 'extraInfo')
putDB('authorId', authorId, 'extraInfo')
quickcommand.showMessageBox("设置成功~")
} catch (e) {
quickcommand.showMessageBox('Token 校验失败', "error")
}
}
let createShareMenu = jsonQc => {
let menu = ['复制到剪贴板', '导出到文件', '', '设置 Token']
let extraInfo = getDB('extraInfo')
if (jsonQc.authorId) {
if (jsonQc.authorId == extraInfo.authorId) menu[2] = '更新分享'
else menu[2] = '分享自:' + jsonQc.authorName
} else {
if (extraInfo.yuQueToken) menu[2] = '分享命令'
else menu[2] = '☛ 分享命令'
}
return menu
}
// 导出 // 导出
$("#options").on('click', '.exportBtn', function () { $("#options").on('click', '.exportBtn', async function () {
var code = $(this).parents('tr').attr('id'), var code = $(this).parents('tr').attr('id')
json = getDB('customFts')[code], var jsonQc = getDB('customFts')[code]
options = { var stringifyQc = JSON.stringify(jsonQc, null, 4)
var choise = await quickcommand.showButtonBox(createShareMenu(jsonQc))
switch (choise.text) {
case '复制到剪贴板':
utools.copyText(stringifyQc) && quickcommand.showMessageBox('已复制到剪贴板')
break;
case '导出到文件':
window.saveFile({
title: '选择保存位置', title: '选择保存位置',
defaultPath: `${json.features.explain}.json`, defaultPath: `${jsonQc.features.explain}.json`,
filters: [ filters: [ { name: 'json', extensions: ['json'] }, ]
{ name: 'json', extensions: ['json'] }, }, stringifyQc)
] break;
}; case '分享命令':
window.saveFile(options, JSON.stringify(json)); var result = await shareQCToYuQue(jsonQc)
result && quickcommand.showMessageBox('分享成功')
break;
case '更新分享':
var result = await shareQCToYuQue(jsonQc, true)
result && quickcommand.showMessageBox('分享成功')
break;
case '☛ 分享命令':
utools.createBrowserWindow('./helps/HELP.html?#分享命令')
break;
case '设置 Token':
await setYuQueToken()
break;
}
})
// 一键分享到语雀
let shareQCToYuQue = async (jsonQc, update = false) => {
let extraInfo = getDB('extraInfo')
if (!extraInfo.yuQueToken) return quickcommand.showMessageBox("请先设置 Token点击底部「查看帮助」可查看 Token 设置方法", "error")
jsonQc.authorId = extraInfo.authorId
jsonQc.authorName = extraInfo.authorName
let stringifyQc = JSON.stringify(jsonQc, null, 4)
if (stringifyQc.length > 5000000) return quickcommand.showMessageBox('命令大小超过5M无法分享请检查图标或脚本内容是否过大', "error")
let platform = jsonQc.platform ? platform.join(" ") : "win32 darwin linux"
let type = jsonQc.features.cmds[0].type
let tags = jsonQc.tags ? jsonQc.tags.join(' ') : ""
type || (type = 'keywords')
let parameters = {
title: jsonQc.features.explain,
slug: jsonQc.features.code,
public: 1,
format: "markdown",
body: '```json\n' + stringifyQc + '\n```',
custom_description: `作者:${jsonQc.authorName} | 环境:${jsonQc.program} | 匹配:${type} | 平台:${platform} | 标签:${tags}`
}
yuQueClient.defaults.headers['X-Auth-Token'] = extraInfo.yuQueToken
let res
try {
if (update) res = await yuQueClient.put('repos/fofolee/em2rng/docs/' + jsonQc.docId, parameters)
else res = await yuQueClient.post('repos/fofolee/em2rng/docs', parameters)
if (res.data.data) {
jsonQc.docId = res.data.data.id
putDB(jsonQc.features.code, jsonQc, 'customFts');
return jsonQc
} else {
return quickcommand.showMessageBox("分享失败,不知道为啥", "error")
}
} catch (error) {
return quickcommand.showMessageBox(error, "error")
}
}
getSharedQCFromYuQue = async () => {
$('#options').hide()
let extraInfo = getDB('extraInfo')
if (extraInfo.yuQueToken) yuQueClient.defaults.headers['X-Auth-Token'] = extraInfo.yuQueToken
let res = await yuQueClient('repos/fofolee/em2rng/docs')
let docs = res.data.data.map(d => {
return {
title: d.title,
description: d.custom_description,
slug: d.slug,
icon: d.last_editor.avatar_url
}
})
let choise = await quickcommand.showSelectList(docs, { optionType: 'json' })
let doc = await yuQueClient(`repos/fofolee/em2rng/docs/${choise.slug}?raw=1`)
let body = doc.data.data.body
let stringifyQc = body.match(/```json([\s\S]*)```/)[1]
let qc = JSON.parse(stringifyQc)
$('#options').show()
qc.docId = doc.data.data.id
editCurrentCommand(qc)
utools.setExpendHeight(600)
}
$("#out").on('click', '#importSharedQc', function () {
importCommand() ? quickcommand.showMessageBox("导入成功") : quickcommand.showMessageBox("导入失败,格式错误", "error")
showOptions()
utools.setExpendHeight(600)
$('#out').empty()
}) })
// 删除 // 删除
@ -870,7 +1020,8 @@
var platform = [] var platform = []
$('.platform').not('.disabled').each(function() { platform.push($(this).attr('id')) }) $('.platform').not('.disabled').each(function() { platform.push($(this).attr('id')) })
// 添加特性 // 添加特性
pushData = { var extraInfo = $('#options').data('extraInfo')
var pushData = {
features: { features: {
"code": code, "code": code,
"explain": desc, "explain": desc,
@ -882,7 +1033,10 @@
cmd: cmd, cmd: cmd,
output: output, output: output,
hasSubInput: hasSubInput, hasSubInput: hasSubInput,
scptarg: scptarg scptarg: scptarg,
authorId: extraInfo.authorId,
authorName: extraInfo.authorName,
docId: extraInfo.docId
} }
if (tags) pushData.tags = tags if (tags) pushData.tags = tags
if (program == 'custom') { if (program == 'custom') {
@ -909,7 +1063,9 @@
showOptions(redirectTag); showOptions(redirectTag);
location.href = '#' + code location.href = '#' + code
$("#customize").empty() $("#customize").empty()
$(`#${code} .checked-switch`).is(':checked') || $(`#${code} .checked-switch`).click() let checkSwitch = $(`#${code} .checked-switch`)
checkSwitch.click()
checkSwitch.is(':checked') || checkSwitch.click()
}); });
} }
} }

View File

@ -85,7 +85,7 @@ quickcommand = {
showInputBox: function (placeHolders) { showInputBox: function (placeHolders) {
return new Promise((reslove, reject) => { return new Promise((reslove, reject) => {
placeHolders || (placeHolders = [""]) placeHolders || (placeHolders = [""])
if (!(placeHolders instanceof Array)) reject("参数类型错误:应为数组") if (!(placeHolders instanceof Array)) return reject("参数类型错误:应为数组")
utools.setExpendHeight(600) utools.setExpendHeight(600)
var html = "" var html = ""
var inputBoxNumbers = placeHolders.length var inputBoxNumbers = placeHolders.length
@ -96,12 +96,15 @@ quickcommand = {
var options = { var options = {
onBeforeOpen: () => { onBeforeOpen: () => {
document.getElementById(`inputBox0`).focus() document.getElementById(`inputBox0`).focus()
$(".output").is(":parent") && utools.setExpendHeight(600) || modWindowHeight($('.swal2-popup').outerHeight() + 20) $('.swal2-content').keydown(function (e) {
e.which == 13 && swal.clickConfirm()
})
$(".output").is(":parent") ? utools.setExpendHeight(600) : modWindowHeight($('.swal2-popup').outerHeight() + 20)
}, },
html: html, html: html,
focusConfirm: false, focusConfirm: false,
showCancelButton: true, showCancelButton: true,
backdrop: utools.isDarkColors() ? '#fff0' : '#bbb', backdrop: utools.isDarkColors() ? '#ffffff26' : '#bbbbbb80',
preConfirm: () => { preConfirm: () => {
for (let i = 0; i < inputBoxNumbers; i++) { for (let i = 0; i < inputBoxNumbers; i++) {
result.push(document.getElementById(`inputBox${i}`).value) result.push(document.getElementById(`inputBox${i}`).value)
@ -116,7 +119,7 @@ quickcommand = {
// 显示选项按钮 // 显示选项按钮
showButtonBox: function (buttons) { showButtonBox: function (buttons) {
return new Promise((reslove, reject) => { return new Promise((reslove, reject) => {
if (!(buttons instanceof Array)) reject("参数类型错误:应为数组") if (!(buttons instanceof Array)) return reject("参数类型错误:应为数组")
utools.setExpendHeight(600) utools.setExpendHeight(600)
var html = `` var html = ``
var buttonBoxNumbers = buttons.length var buttonBoxNumbers = buttons.length
@ -132,7 +135,7 @@ quickcommand = {
$(".output").is(":parent") && utools.setExpendHeight(600) || modWindowHeight($('.swal2-popup').outerHeight() + 20) $(".output").is(":parent") && utools.setExpendHeight(600) || modWindowHeight($('.swal2-popup').outerHeight() + 20)
}, },
html: html, html: html,
backdrop: utools.isDarkColors() ? '#fff0' : '#bbb', backdrop: utools.isDarkColors() ? '#ffffff26' : '#bbbbbb80',
showConfirmButton: false showConfirmButton: false
} }
swalOneByOne(options) swalOneByOne(options)
@ -146,21 +149,19 @@ quickcommand = {
title: title, title: title,
toast: true, toast: true,
position: 'top', position: 'top',
// timer: time, timer: time,
showConfirmButton: false, showConfirmButton: false,
onOpen: toast => { // onBeforeOpen: () => {
// toast.addEventListener('mouseenter', Swal.stopTimer) // setTimeout(() => { Swal.clickConfirm() }, time);
// toast.addEventListener('mouseleave', Swal.resumeTimer) // }
setTimeout(() => { Swal.clickConfirm() }, time);
} }
} swal.fire(options)
swalOneByOne(options)
}, },
// 显示选项列表 // 显示选项列表
showSelectList: function (selects, opt = {}) { showSelectList: function (selects, opt = {}) {
return new Promise((reslove, reject) => { return new Promise((reslove, reject) => {
if (!(selects instanceof Array)) reject("参数类型错误:应为数组") if (!(selects instanceof Array)) return reject("参数类型错误:应为数组")
opt.optionType || (opt.optionType = 'plaintext') opt.optionType || (opt.optionType = 'plaintext')
typeof opt.placeholder == 'undefined' && (opt.placeholder = "搜索,支持拼音") typeof opt.placeholder == 'undefined' && (opt.placeholder = "搜索,支持拼音")
typeof opt.enableSearch == 'undefined' && (opt.enableSearch = true) typeof opt.enableSearch == 'undefined' && (opt.enableSearch = true)
@ -168,15 +169,16 @@ quickcommand = {
$("body").append(`<div id="quickselect"><select id="selectBox"></select></div>`) $("body").append(`<div id="quickselect"><select id="selectBox"></select></div>`)
let item, data = [] let item, data = []
selects.forEach((s, i) => { selects.forEach((s, i) => {
item = {id: i} item = {}
if (opt.optionType == 'json') { if (opt.optionType == 'json') {
item.text = '' item.text = ''
Object.keys(s).forEach(k => item[k] = s[k]) Object.keys(s).forEach(k => item[k] = s[k])
item.id = i
s.icon && (item.text += `<div class="icon"><img src="${s.icon}"></div>`) s.icon && (item.text += `<div class="icon"><img src="${s.icon}"></div>`)
s.title && (item.text += `<div class="title">${s.title}</div>`) s.title && (item.text += `<div class="title">${s.title}</div>`)
s.description && (item.text += `<div class="description">${s.description}</div>`) s.description && (item.text += `<div class="description">${s.description}</div>`)
} else { } else {
item.text = s item = {id: i, text: s}
} }
data.push(item) data.push(item)
}) })
@ -296,7 +298,8 @@ quickcommand = {
var filebuffer = Buffer.from(res.data) var filebuffer = Buffer.from(res.data)
if (!filepath) reslove(filebuffer) if (!filepath) reslove(filebuffer)
fs.writeFile(filepath, filebuffer, err => { fs.writeFile(filepath, filebuffer, err => {
err && reject(err) || reslove(filebuffer) if (err) reject(err)
else reslove(filebuffer)
}) })
}).catch(err => { }).catch(err => {
reject(err) reject(err)
@ -306,7 +309,7 @@ quickcommand = {
} }
swalOneByOne = options => { swalOneByOne = options => {
swal.getQueueStep() && Swal.insertQueueStep(options) || Swal.queue([options]) swal.getQueueStep() ? Swal.insertQueueStep(options) : Swal.queue([options])
} }
let getSleepCodeByShell = ms => { let getSleepCodeByShell = ms => {
@ -563,55 +566,13 @@ saveFile = (options, content) => {
}) })
} }
// 保存剪贴板 yuQueClient = axios.create({
// storeClip = () => { baseURL: 'https://www.yuque.com/api/v2/',
// var formats = electron.clipboard.availableFormats("clipboard"); headers: {
// if (formats.includes("text/plain")) { 'Content-Type': 'application/json',
// return ['text', electron.clipboard.readText()] 'X-Auth-Token': 'WNrd0Z4kfCZLFrGLVAaas93DZ7sbG6PirKq7VxBL'
// } }
// if (formats.includes("image/png") || formats.includes("image/jpeg")) { });
// return ['image', electron.clipboard.readImage()]
// }
// var file;
// if (utools.isWindows()) {
// file = electron.clipboard.readBuffer('FileNameW').toString('ucs2').replace(/\\/g, '/');
// file = file.replace(new RegExp(String.fromCharCode(0), 'g'), '');
// } else {
// file = electron.clipboard.read('public.file-url').replace('file://', '');
// }
// if (file) {
// return ['file', file]
// }
// return []
// }
// 恢复剪贴板
// restoreClip = historyData => {
// if (historyData[0] == 'text') {
// electron.clipboard.writeText(historyData[1]);
// return
// }
// if (historyData[0] == 'image') {
// electron.clipboard.writeImage(historyData[1]);
// return
// }
// if (historyData[0] == 'file') {
// utools.copyFile(historyData[1])
// return
// }
// electron.clipboard.writeText('')
// }
// getSelectText = () => {
// var historyData = storeClip();
// electron.clipboard.writeText('');
// quickcommand.simulateCopy();
// var selectText = electron.clipboard.readText()
// setTimeout(() => {
// restoreClip(historyData)
// }, 500);
// return selectText
// }
getSelectFile = hwnd => getSelectFile = hwnd =>
new Promise((reslove, reject) => { new Promise((reslove, reject) => {
@ -619,7 +580,7 @@ getSelectFile = hwnd =>
var cmd = `powershell.exe -NoProfile "(New-Object -COM 'Shell.Application').Windows() | Where-Object { $_.HWND -eq ${hwnd} } | Select-Object -Expand Document | select @{ n='SelectItems'; e={$_.SelectedItems()} } | select -Expand SelectItems | select -Expand Path "`; var cmd = `powershell.exe -NoProfile "(New-Object -COM 'Shell.Application').Windows() | Where-Object { $_.HWND -eq ${hwnd} } | Select-Object -Expand Document | select @{ n='SelectItems'; e={$_.SelectedItems()} } | select -Expand SelectItems | select -Expand Path "`;
child_process.exec(cmd, { encoding: "buffer" }, (err, stdout, stderr) => { child_process.exec(cmd, { encoding: "buffer" }, (err, stdout, stderr) => {
if (err) reject(stderr) if (err) reject(stderr)
reslove(iconv.decode(stdout, 'GBK').trim().replace(/\\/g, '/')); else reslove(iconv.decode(stdout, 'GBK').trim().replace(/\\/g, '/'));
}) })
} else { } else {
var cmd = `osascript -e 'tell application "Finder" to set selectedItems to selection as alias list var cmd = `osascript -e 'tell application "Finder" to set selectedItems to selection as alias list
@ -633,11 +594,15 @@ getSelectFile = hwnd =>
` `
child_process.exec(cmd, (err, stdout, stderr) => { child_process.exec(cmd, (err, stdout, stderr) => {
if (err) reject(stderr) if (err) reject(stderr)
reslove(stdout.trim()); else reslove(stdout.trim());
}); });
} }
}) })
clipboardReadText = () => {
return electron.clipboard.readText()
},
special = cmd => { special = cmd => {
// 判断是否 windows 系统 // 判断是否 windows 系统
if (cmd.includes('{{isWin}}')) { if (cmd.includes('{{isWin}}')) {
@ -659,7 +624,7 @@ special = cmd => {
// 获取剪切板的文本 // 获取剪切板的文本
if (cmd.includes('{{ClipText}}')) { if (cmd.includes('{{ClipText}}')) {
let repl = electron.clipboard.readText(); let repl = clipboardReadText();
cmd = cmd.replace(/\{\{ClipText\}\}/mg, repl) cmd = cmd.replace(/\{\{ClipText\}\}/mg, repl)
} }