From edfdd6be62844a64a3e384b6b79f78e673007d2d Mon Sep 17 00:00:00 2001 From: purocean Date: Sun, 8 May 2022 16:20:33 +0800 Subject: [PATCH] upd: demo --- help/FEATURES.md | 1 + help/FEATURES_ZH-CN.md | 1 + package.json | 2 +- scripts/install-demo-extensions.js | 77 ++++++++++++++++++++ src/renderer/components/ExtensionManager.vue | 3 +- src/renderer/others/demo.ts | 29 +++++++- src/renderer/others/extension.ts | 4 + 7 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 scripts/install-demo-extensions.js diff --git a/help/FEATURES.md b/help/FEATURES.md index effd0781..b7b16038 100644 --- a/help/FEATURES.md +++ b/help/FEATURES.md @@ -30,6 +30,7 @@ Directory description ::: 1. plug-ins `/yank-note/plugins` 1. themes `/yank-note/themes` +1. extensions `/yank-note/extensions` ## TOC Generation diff --git a/help/FEATURES_ZH-CN.md b/help/FEATURES_ZH-CN.md index 949325dd..aed18703 100644 --- a/help/FEATURES_ZH-CN.md +++ b/help/FEATURES_ZH-CN.md @@ -30,6 +30,7 @@ define: ::: 1. 插件 `/yank-note/plugins` 1. 主题 `/yank-note/themes` +1. 扩展 `/yank-note/extensions` ## TOC 生成 diff --git a/package.json b/package.json index ddedb3d1..df544703 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "dev": "vite", "start": "npm run build:main && electron ./dist/main/app.js", "build:fe": "vue-tsc --noEmit --esModuleInterop true && vite build", - "build:fe-demo": "yarn run build:fe --mode=demo && node scripts/copy-assets.js && cp help/* dist/renderer/ && cp src/main/resources/github.css dist/renderer/", + "build:fe-demo": "node scripts/install-demo-extensions.js && yarn run build:fe --mode=demo && node scripts/copy-assets.js && cp help/* dist/renderer/ && cp src/main/resources/github.css dist/renderer/", "serve:fe": "vite preview", "build:main": "tsc --esModuleInterop true src/main/app.ts --outDir ./dist && node ./scripts/copy-assets.js", "build": "npm run build:fe && npm run build:main", diff --git a/scripts/install-demo-extensions.js b/scripts/install-demo-extensions.js new file mode 100644 index 00000000..cedc6bc6 --- /dev/null +++ b/scripts/install-demo-extensions.js @@ -0,0 +1,77 @@ +// @ts-check + +const request = require('request'); +const fs = require('fs-extra'); +const path = require('path') +const zlib = require('zlib') +const tar = require('tar-stream') +const stream = require('stream') + +function installExtension (extension) { + const extensionPath = path.join(__dirname, '../src/renderer/public/extensions', extension.name) + fs.ensureDirSync(extensionPath) + + return new Promise((resolve, reject) => { + const url = extension.dist.tarball; + request({ url, encoding: null }, (err, _, body) => { + if (err) { + reject(err) + return + } + + zlib.unzip(body, (err, data) => { + if (err) { + reject(err) + return + } + + const extract = tar.extract() + + extract.on('entry', (header, stream, next) => { + const filePath = path.join(extensionPath, header.name.replace(/^package/, '')) + console.log('[extension] write file', filePath) + + fs.ensureFile(filePath).then(() => { + const fileStream = fs.createWriteStream(filePath) + stream.pipe(fileStream) + stream.on('end', next) + }).catch(reject) + }) + + extract.on('finish', () => { + resolve(undefined) + }) + + extract.on('error', reject) + + stream.Readable.from(data).pipe(extract) + }) + }) + }) +} + +async function install (extensions) { + for (const extension of extensions) { + console.log('[extension] install', extension.name) + await installExtension(extension) + } +} + +const registryUrl = 'https://raw.githubusercontent.com/purocean/yank-note-registry/main/index.json' +console.log('Download registry') +request(registryUrl, (err, _, body) => { + if (err) { + console.error(err); + return; + } + + const registry = JSON.parse(body); + + const extensions = registry.map(x => ({ id: x.name, enabled: true, isDev: false })) + const extensionsFile = path.join(__dirname, '../src/renderer/public/extensions.json') + console.log(`Writing extensions ${extensionsFile}`) + fs.writeJSONSync(extensionsFile, extensions); + + console.log('Install extensions', extensions.length) + install(registry) +}) diff --git a/src/renderer/components/ExtensionManager.vue b/src/renderer/components/ExtensionManager.vue index 0d0e5f07..9a5c5899 100644 --- a/src/renderer/components/ExtensionManager.vue +++ b/src/renderer/components/ExtensionManager.vue @@ -138,7 +138,7 @@
{{ $t('loading') }}