import UTOOLS from "./utools.js"
import qcshare from "./qcshare.js"
import qccommands from "./qccommands.js"
import qcparser from "./qcparser.js"
import qcprograms from "./qcprograms.js"
import qctemplates from "./qctemplates.js"
import qcpanel from "./qcpanel.js"
// **************************************************
// *********************功能列表**********************
// **************************************************
let showFeatureList = (tag = "默认") => {
$("#options").empty().fadeIn();
var currentFtsCode = getCurrentFts().currentFts.map(x => x.code)
var customFts = getAllQuickCommands()
var allTags = ["默认"]
var featureList = `
${window.htmlEncode(features.explain, true)}
●
${fts.program} | ${platformIcons.join('')}
${qcType}
${(tag == "默认" && !window.isDev()) ? "" : ` `}
`
}
let showCommandByType = (features, isActivated) => {
let qcType = ''
let cmds = features.cmds
let type = qccommands.getCommandType(cmds)
if (type == 'professional') {
qcType = `专业模式
[{...}]
`;
} else {
let rules = cmds[0].match
if (type == 'regex') {
qcType += `文本
`
if (!rules) {
qcType += `所有文本 `
} else {
if (rules.length > 14) rules = rules.slice(0, 14) + '...';
qcType += `${window.htmlEncode(rules, true)}
`;
}
} else if (type == 'window') {
qcType += `窗口
`
// if (!rules) {
// qcType += `所有窗口 `
// } else if (rules.title || rules.class) {
if (rules.title || rules.class) {
qcType += `${window.htmlEncode(JSON.stringify(rules).slice(0, 14), true) + '...'} `;
} else if (rules.app) {
rules = rules.app.join(",")
if (rules.length > 14) rules = rules.slice(0, 14) + '...';
rules.split(',').forEach(r => {
qcType += `${window.htmlEncode(r, true)} `;
});
}
qcType += `
`
} else if (type == 'files') {
if (rules.length > 14) rules = rules.slice(0, 14) + '...';
qcType = `文件
${window.htmlEncode(rules, true)}
`;
} else {
rules = features.cmds.join(",")
if (rules.length > 14) rules = rules.slice(0, 14) + '...';
qcType += `关键字
`
let he, kws
rules.split(',').forEach(r => {
he = window.htmlEncode(r, true)
// 关键词可以点击跳转
kws = `
${he} `
qcType += `
${kws} `;
});
qcType += `
`
}
}
return qcType
}
// **************************************************
// *********************功能按钮**********************
// **************************************************
// 开关
$("#options").on('change', 'input[type=checkbox]', function () {
var customFts = getAllQuickCommands(),
code = $(this).parents('tr').attr('id')
if (!UTOOLS.whole.removeFeature(code)) {
UTOOLS.whole.setFeature(customFts[code].features);
}
});
// 编辑
$("#options").on('click', '.editBtn', function () {
let code = $(this).parents('tr').attr('id')
let data = UTOOLS.getDB(UTOOLS.DBPRE.QC + code)
qccommands.editCurrentCommand(data)
})
// 删除
$("#options").on('click', '.delBtn', function () {
quickcommand.showConfirmBox('删除这个快捷命令').then(x => {
if (!x) return
var code = $(this).parents('tr').attr('id')
utools.copyText(JSON.stringify(UTOOLS.getDB(UTOOLS.DBPRE.QC + code)))
UTOOLS.delDB(UTOOLS.DBPRE.QC + code)
UTOOLS.whole.removeFeature(code);
var currentTag = $('.currentTag').text()
// 当前标签下最后一个命令的处理
if ($('#featureList tr').length == 1) {
UTOOLS.delDB(UTOOLS.DBPRE.PAN + hexEncode(currentTag))
UTOOLS.whole.removeFeature("panel_" + hexEncode(currentTag))
currentTag = "默认"
}
showFeatureList(currentTag);
quickcommand.showMessageBox('删除成功,为防止误操作,已将删除的命令复制到剪贴板')
})
})
// 导出
$("#options").on('click', '.exportBtn', async function () {
var code = $(this).parents('tr').attr('id')
var jsonQc = UTOOLS.getDB(UTOOLS.DBPRE.QC + code)
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(stringifyQc, {
title: '选择保存位置',
defaultPath: `${jsonQc.features.explain}.json`,
filters: [{ name: 'json', extensions: ['json'] },]
})
break;
case '分享命令':
case '更新分享':
if (qcshare.yuQueShareVars.shareLock) {
quickcommand.showMessageBox('分享速度太快了,请稍候', 'warning')
} else {
qcshare.yuQueShareVars.shareLock = true
var result = await qcshare.shareQCToYuQue(jsonQc)
qcshare.yuQueShareVars.shareLock = false
result && quickcommand.showMessageBox('分享成功,等待发布后即可在分享中心直接下载')
}
break;
case '我要分享':
utools.createBrowserWindow('./helps/HELP.html?#分享命令', {
width: 1280,
height: 920
})
break;
case '评论':
utools.shellOpenExternal(`https://www.yuque.com/${qcshare.yuQueShareVars.releaseRepo}/${code}`)
break;
case '设置 Token':
await setYuQueToken()
break;
}
})
// 分享菜单
let createShareMenu = jsonQc => {
let menu = ['复制到剪贴板', '导出到文件', '', '设置 Token']
let extraInfo = UTOOLS.getDB(UTOOLS.DBPRE.CFG + 'extraInfo')
if (jsonQc.authorId) {
if (jsonQc.authorId == extraInfo.authorId) menu[2] = '更新分享'
else if (jsonQc.fromShare) menu[2] = '评论'
else menu[2] = '分享自:' + jsonQc.authorName
} else {
if (extraInfo.yuQueToken) menu[2] = '分享命令'
else menu[2] = '我要分享'
}
return menu
}
let setYuQueToken = async () => {
let yuQueToken = await quickcommand.showInputBox(["请输入 Token"])
if (!yuQueToken) return
yuQueToken = yuQueToken[0]
window.yuQueClient.defaults.headers['X-Auth-Token'] = yuQueToken
try {
let res = await window.yuQueClient('user')
let extraInfo = {
yuQueToken: yuQueToken,
authorId: res.data.data.account_id,
authorName: res.data.data.name
}
UTOOLS.putDB(extraInfo, UTOOLS.DBPRE.CFG + 'extraInfo')
quickcommand.showMessageBox("设置成功~")
} catch (e) {
quickcommand.showMessageBox('Token 校验失败', "error")
}
}
// **************************************************
// *********************底部按钮**********************
// **************************************************
$("#options").on('keydown', '#searchFts', function (e) {
if (e.keyCode == 13) {
searchFeatures($("#searchFts").val())
e.preventDefault()
}
})
$("#options").on('click', '.footBtn', async function () {
switch ($(this).attr('id')) {
case 'viewHelps':
utools.createBrowserWindow('./helps/HELP.html', {
width: 1280,
height: 920
});
break;
case 'getShares':
qcshare.getSharedQCFromYuQue();
break;
case 'add':
qccommands.showCommandEditor();
$("#customize").animate({
top: '0px'
});
break;
case 'import':
var success = await importCommand()
if (success) {
if (success instanceof Object) locateToFeature(success.tags, success.code)
else showFeatureList()
quickcommand.showMessageBox("导入成功")
} else if (success == false) {
quickcommand.showMessageBox("导入失败,格式错误", "error")
}
break;
case 'enableAll':
$(".checked-switch:not(:checked)").click();
break;
case 'disableAll':
$(".checked-switch:checked").click();
break;
case 'exportAll':
exportAll();
break;
case 'clear':
clearAll();
break;
case 'addToPanel':
addToPanel()
}
})
// 检查分享中心更新
let checkSharedQc = async () => {
let localShares = UTOOLS.getDB(UTOOLS.DBPRE.CFG + 'sharedQcCounts')[window.processPlatform] || 0
let remoteShares = await qcshare.getDocsFromYuQue()
if (!remoteShares) return
let updates = remoteShares.length - localShares
if (updates == 0) {
return
}
$('#getShares span').text('有新分享')
$('#getShares').css({
'background': '#b80233'
})
}
// 快捷面板
let addToPanel = () => {
let tag = $('.currentTag').text()
qcpanel.panelConf(tag)
}
// 全部导出
let exportAll = (copy = false) => {
let allQcs = getAllQuickCommands()
let options = {
title: '选择保存位置',
defaultPath: 'quickCommand',
filters: [{
name: 'json',
extensions: ['json']
},]
};
if (!window.isDev()) Object.keys(allQcs).forEach(k => {
if (k.includes('default_')) delete allQcs[k]
})
let stringifyQcs = JSON.stringify(allQcs)
if (copy) utools.copyText(stringifyQcs)
else window.saveFile(stringifyQcs, options);
}
// 清空
let clearAll = () => {
quickcommand.showConfirmBox('将会清空所有自定义命令,请确认!').then(x => {
if (!x) return
exportAll(true)
UTOOLS.getDocs(UTOOLS.DBPRE.QC).map(x => x._id).forEach(y => UTOOLS.delDB(y))
importDefaultCommands();
clearAllFeatures();
showFeatureList();
quickcommand.showMessageBox('清空完毕,为防止误操作,已将所有命令复制到剪贴板,可通过导入命令恢复')
})
}
let importDefaultCommands = () => {
let defaultCommands = window.getDefaultCommands()
Object.values(defaultCommands).forEach(async d => {
await importCommand(d)
})
}
let clearAllFeatures = () => {
for (var fts of utools.getFeatures()) {
UTOOLS.whole.removeFeature(fts.code)
}
}
// 导入
let importCommand = async file => {
let options, fileinfo, command, pushData
if (file) {
options = {
type: 'file',
argvs: file,
readfile: true
}
fileinfo = getFileInfo(options)
if (!fileinfo) return
command = fileinfo.data
} else {
let choise = await quickcommand.showButtonBox(['从文件导入', '从剪贴板导入'])
if (choise.id == 0) {
options = { type: 'dialog', argvs: { filters: [{ name: 'json', extensions: ['json'] }] }, readfile: true }
fileinfo = getFileInfo(options)
if (!fileinfo) return
command = fileinfo.data
} else if (choise.id == 1) {
command = clipboardReadText()
}
}
pushData = qcparser(command)
if (!pushData) return false
// 单个命令导入
if (pushData.single) {
var code = pushData.qc.features.code;
UTOOLS.putDB(pushData.qc, UTOOLS.DBPRE.QC + code);
return {
tags: pushData.qc.tags,
code: code
}
// 多个命令导入
} else {
for (var code of Object.keys(pushData.qc)) {
UTOOLS.putDB(pushData.qc[code], UTOOLS.DBPRE.QC + code);
}
return true
}
}
// **************************************************
// *********************标签跳转**********************
// **************************************************
// 保存后标签跳转处理
let locateToFeature = (tags, code) => {
let redirectTag
let currentTag = $('.currentTag').text()
// let AllTags = Array.from($('.sidebar li')).map(x => x.innerText)
if (tags && tags.length) {
if (tags.includes(currentTag)) {
redirectTag = currentTag
} else {
redirectTag = tags[0]
}
} else {
redirectTag = "未分类"
}
showFeatureList(redirectTag);
location.href = '#' + code;
$(`#${code}`).fadeOut(function () {
$(this).fadeIn();
});
}
// 切换TAGS
$("#options").on('click', '.sidebar li', function () {
showFeatureList($(this).text());
})
export default {
showFeatureList,
locateToFeature,
importDefaultCommands
}