分享中心支持显示图标

This commit is contained in:
fofolee 2020-07-26 11:00:59 +08:00
parent 5ae8d25736
commit 16a0b2b6fc
2 changed files with 76 additions and 26 deletions

View File

@ -342,7 +342,7 @@
] ]
}; };
if (!isDev()) Object.keys(jsonQc).filter(k => jsonQc[k].tags && jsonQc[k].tags.includes('默认')).map(k => delete jsonQc[k]) if (!isDev()) Object.keys(jsonQc).filter(k => jsonQc[k].tags && jsonQc[k].tags.includes('默认')).map(k => delete jsonQc[k])
window.saveFile(options, JSON.stringify(jsonQc)); window.saveFile(JSON.stringify(jsonQc), options);
} }
// 清空 // 清空
@ -1064,6 +1064,16 @@
return menu return menu
} }
// 分享相关
const yuQueShareVars = {
imgBedApi: 'https://imgkr.com/api/v2/files/upload',
imgBedBaseLink: 'https://imgkr.cn-bj.ufileos.com/',
yuQueImgBedBaseLink: 'https://cdn.nlark.com/yuque/',
releaseRepo: 'fofolee/qcreleases',
shareRepo: 'fofolee/qcshares',
shareLock: false
}
// 导出 // 导出
$("#options").on('click', '.exportBtn', async function () { $("#options").on('click', '.exportBtn', async function () {
var code = $(this).parents('tr').attr('id') var code = $(this).parents('tr').attr('id')
@ -1075,22 +1085,29 @@
utools.copyText(stringifyQc) && quickcommand.showMessageBox('已复制到剪贴板') utools.copyText(stringifyQc) && quickcommand.showMessageBox('已复制到剪贴板')
break; break;
case '导出到文件': case '导出到文件':
window.saveFile({ window.saveFile(stringifyQc, {
title: '选择保存位置', title: '选择保存位置',
defaultPath: `${jsonQc.features.explain}.json`, defaultPath: `${jsonQc.features.explain}.json`,
filters: [ { name: 'json', extensions: ['json'] }, ] filters: [ { name: 'json', extensions: ['json'] }, ]
}, stringifyQc) })
break; break;
case '分享命令': case '分享命令':
case '更新分享': case '更新分享':
var result = await shareQCToYuQue(jsonQc) if (yuQueShareVars.shareLock) {
result && quickcommand.showMessageBox('分享成功,等待发布后即可在分享中心直接下载') quickcommand.showMessageBox('分享速度太快了,请稍候', 'warning')
} else {
yuQueShareVars.shareLock = true
jsonQc = await updateImgLink(jsonQc)
var result = await shareQCToYuQue(jsonQc)
yuQueShareVars.shareLock = false
result && quickcommand.showMessageBox('分享成功,等待发布后即可在分享中心直接下载')
}
break; break;
case '我要分享': case '我要分享':
utools.createBrowserWindow('./helps/HELP.html?#分享命令', {width: 1280, height: 920}) utools.createBrowserWindow('./helps/HELP.html?#分享命令', {width: 1280, height: 920})
break; break;
case '评论': case '评论':
utools.shellOpenExternal(`https://www.yuque.com/fofolee/qcreleases/${code}`) utools.shellOpenExternal(`https://www.yuque.com/${yuQueShareVars.releaseRepo}/${code}`)
break; break;
case '设置 Token': case '设置 Token':
await setYuQueToken() await setYuQueToken()
@ -1098,6 +1115,33 @@
} }
}) })
let updateImgLink = async jsonQc => {
let icon = jsonQc.features.icon
if (!jsonQc.imgLink && icon.includes('base64')) {
try {
if (icon.length > 2000) icon = await getCompressedIco(icon)
jsonQc.features.icon = icon
let res = await quickcommand.uploadFile(yuQueShareVars.imgBedApi, dataURLtoFile(icon, jsonQc.features.code + '.png'))
jsonQc.imgLink = res.data.data
} catch (error) {
console.log(error);
}
}
return jsonQc
}
let dataURLtoFile = (dataurl, filename) => {
let arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
}
// 一键分享到语雀 // 一键分享到语雀
let shareQCToYuQue = async jsonQc => { let shareQCToYuQue = async jsonQc => {
let extraInfo = getDB('extraInfo') let extraInfo = getDB('extraInfo')
@ -1105,7 +1149,6 @@
jsonQc.authorId = extraInfo.authorId jsonQc.authorId = extraInfo.authorId
jsonQc.authorName = extraInfo.authorName jsonQc.authorName = extraInfo.authorName
let stringifyQc = JSON.stringify(jsonQc, null, 4) let stringifyQc = JSON.stringify(jsonQc, null, 4)
console.log(jsonQc);
if (stringifyQc.length > 5000000) return quickcommand.showMessageBox('命令大小超过5M无法分享请检查图标或脚本内容是否过大', "error") if (stringifyQc.length > 5000000) return quickcommand.showMessageBox('命令大小超过5M无法分享请检查图标或脚本内容是否过大', "error")
let type = jsonQc.features.cmds[0].type || 'key' let type = jsonQc.features.cmds[0].type || 'key'
let tags = jsonQc.tags ? jsonQc.tags.join(' ') : "" let tags = jsonQc.tags ? jsonQc.tags.join(' ') : ""
@ -1125,13 +1168,14 @@
body: '```json\n' + stringifyQc + '\n```', body: '```json\n' + stringifyQc + '\n```',
custom_description: JSON.stringify(custom_description) custom_description: JSON.stringify(custom_description)
} }
if (jsonQc.imgLink) parameters.cover = jsonQc.imgLink.replace(yuQueShareVars.imgBedBaseLink, yuQueShareVars.yuQueImgBedBaseLink)
yuQueClient.defaults.headers['X-Auth-Token'] = extraInfo.yuQueToken yuQueClient.defaults.headers['X-Auth-Token'] = extraInfo.yuQueToken
let res, repo = extraInfo.authorId == 1496740 ? 'qcreleases' : 'qcshares' let res, repo = extraInfo.authorId == 1496740 ? yuQueShareVars.releaseRepo : yuQueShareVars.shareRepo
try { try {
res = await yuQueClient.post(`repos/fofolee/${repo}/docs`, parameters) res = await yuQueClient.post(`repos/${repo}/docs`, parameters)
if (!res.data.data) return quickcommand.showMessageBox("分享失败,不知道为啥", "error") if (!res.data.data) return quickcommand.showMessageBox("分享失败,不知道为啥", "error")
let docId = res.data.data.id let docId = res.data.data.id
res = await yuQueClient.put(`repos/fofolee/${repo}/docs/${docId}`, parameters) res = await yuQueClient.put(`repos/${repo}/docs/${docId}`, parameters)
if (!res.data.data) return quickcommand.showMessageBox("分享失败,不知道为啥", "error") if (!res.data.data) return quickcommand.showMessageBox("分享失败,不知道为啥", "error")
putDB(jsonQc.features.code, jsonQc, 'customFts'); putDB(jsonQc.features.code, jsonQc, 'customFts');
return jsonQc return jsonQc
@ -1144,7 +1188,7 @@
$('#options').hide() $('#options').hide()
let extraInfo = getDB('extraInfo') let extraInfo = getDB('extraInfo')
if (extraInfo.yuQueToken) yuQueClient.defaults.headers['X-Auth-Token'] = extraInfo.yuQueToken if (extraInfo.yuQueToken) yuQueClient.defaults.headers['X-Auth-Token'] = extraInfo.yuQueToken
let res = await yuQueClient('repos/fofolee/qcreleases/docs') let res = await yuQueClient(`repos/${yuQueShareVars.releaseRepo}/docs`)
let description, platform = window.processPlatform let description, platform = window.processPlatform
let docs = res.data.data let docs = res.data.data
.filter(d => JSON.parse(d.custom_description).platform.includes(platform)) .filter(d => JSON.parse(d.custom_description).platform.includes(platform))
@ -1157,15 +1201,16 @@
return { return {
title: d.title, title: d.title,
description: `<span class="iconfont icon-yonghu"></span> ${description.authorName} description: `<span class="iconfont icon-yonghu"></span> ${description.authorName}
&nbsp; <span class="iconfont icon-code"></span> ${description.program}
&nbsp; <span class="iconfont icon-wenjianleixingpeizhi"></span> ${description.type} &nbsp; <span class="iconfont icon-wenjianleixingpeizhi"></span> ${description.type}
&nbsp; <span class="iconfont icon-biaoqian"></span> ${description.tags} &nbsp; <span class="iconfont icon-biaoqian"></span> ${description.tags}
&nbsp; <span class="iconfont icon-shijian"></span> ${d.updated_at.split('T')[0]}`, &nbsp; <span class="iconfont icon-shijian"></span> ${d.updated_at.split('T')[0]}`,
slug: d.slug, slug: d.slug,
icon: `logo/${description.program}.png` icon: d.cover ? d.cover.replace(yuQueShareVars.yuQueImgBedBaseLink, yuQueShareVars.imgBedBaseLink) : `logo/${description.program}.png`
} }
}) })
let choise = await quickcommand.showSelectList(docs, { optionType: 'json' }) let choise = await quickcommand.showSelectList(docs, { optionType: 'json' })
let doc = await yuQueClient(`repos/fofolee/qcreleases/docs/${choise.slug}?raw=1`) let doc = await yuQueClient(`repos/${yuQueShareVars.releaseRepo}/docs/${choise.slug}?raw=1`)
let body = doc.data.data.body let body = doc.data.data.body
let stringifyQc = body.match(/```json([\s\S]*)```/)[1] let stringifyQc = body.match(/```json([\s\S]*)```/)[1]
let qc = JSON.parse(stringifyQc) let qc = JSON.parse(stringifyQc)
@ -1311,9 +1356,9 @@
if (extraInfo) { if (extraInfo) {
Object.assign(pushData, extraInfo) Object.assign(pushData, extraInfo)
// 通过模拟访问页面来统计下载量 // 通过模拟访问页面来统计下载量
extraInfo.fromShare && utools.ubrowser.goto(`https://www.yuque.com/fofolee/qcreleases/${code}`).run({ extraInfo.fromShare && utools.ubrowser.goto(`https://www.yuque.com/${yuQueShareVars.releaseRepo}/${code}`).run({
show: false show: false
}) })
} }
if (tags) pushData.tags = tags if (tags) pushData.tags = tags
if (program == 'custom') { if (program == 'custom') {

View File

@ -175,7 +175,7 @@ quickcommand = {
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 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}" onerror="this.src='./logo.png'"></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 {
@ -324,11 +324,16 @@ quickcommand = {
// 上传文件 // 上传文件
uploadFile: function(url, file = {}, name = 'file', formData = {}) { uploadFile: function(url, file = {}, name = 'file', formData = {}) {
return new Promise((reslove, reject) => { return new Promise((reslove, reject) => {
if (file instanceof Object) file = utools.showOpenDialog(JSON.parse(JSON.stringify(file)))[0] var objfile
if (!fs.existsSync(file)) return reject('文件不存在') if (file instanceof File) {
objfile = file
} else {
if (file instanceof Object) file = utools.showOpenDialog(JSON.parse(JSON.stringify(file)))[0]
if (!fs.existsSync(file)) return reject('文件不存在')
var arraybuffer = fs.readFileSync(file).buffer
var objfile = new File([arraybuffer], path.basename(file))
}
var form = new FormData(); var form = new FormData();
var arraybuffer = fs.readFileSync(file).buffer
var objfile = new File([arraybuffer], path.basename(file))
form.append(name, objfile) form.append(name, objfile)
var keys = Object.keys(formData) var keys = Object.keys(formData)
if (keys.length) keys.forEach(k => form.append(k, formData[k])) if (keys.length) keys.forEach(k => form.append(k, formData[k]))
@ -655,11 +660,11 @@ getCurrentFolderPathFix = () => {
return pwdFix.replace(/\\/g, '\\\\') return pwdFix.replace(/\\/g, '\\\\')
} }
saveFile = (options, content) => { saveFile = (content, file) => {
var filename = utools.showSaveDialog(options) if (file instanceof Object) {
filename && fs.writeFile(filename, content, 'utf8', err => { file = utools.showSaveDialog(file)
err && console.log(err) }
}) file && fs.writeFileSync(file, content)
} }
yuQueClient = axios.create({ yuQueClient = axios.create({