diff --git a/packages/api/src/controllers/plugins.js b/packages/api/src/controllers/plugins.js index 6d579c69f..1961a6c09 100644 --- a/packages/api/src/controllers/plugins.js +++ b/packages/api/src/controllers/plugins.js @@ -6,23 +6,23 @@ const socket = require('../utility/socket'); const requirePlugin = require('../shell/requirePlugin'); const downloadPackage = require('../utility/downloadPackage'); -async function loadPackageInfo(dir) { - const readmeFile = path.join(dir, 'README.md'); - const packageFile = path.join(dir, 'package.json'); +// async function loadPackageInfo(dir) { +// const readmeFile = path.join(dir, 'README.md'); +// const packageFile = path.join(dir, 'package.json'); - if (!(await fs.exists(packageFile))) { - return null; - } +// if (!(await fs.exists(packageFile))) { +// return null; +// } - let readme = null; - let manifest = null; - if (await fs.exists(readmeFile)) readme = await fs.readFile(readmeFile, { encoding: 'utf-8' }); - if (await fs.exists(packageFile)) manifest = JSON.parse(await fs.readFile(packageFile, { encoding: 'utf-8' })); - return { - readme, - manifest, - }; -} +// let readme = null; +// let manifest = null; +// if (await fs.exists(readmeFile)) readme = await fs.readFile(readmeFile, { encoding: 'utf-8' }); +// if (await fs.exists(packageFile)) manifest = JSON.parse(await fs.readFile(packageFile, { encoding: 'utf-8' })); +// return { +// readme, +// manifest, +// }; +// } module.exports = { script_meta: 'get', @@ -46,11 +46,28 @@ module.exports = { info_meta: 'get', async info({ packageName }) { - const dir = path.join(pluginstmpdir(), packageName); - if (!(await fs.exists(dir))) { - await downloadPackage(packageName, dir); + try { + const infoResp = await axios.default.get(`https://registry.npmjs.org/${packageName}`); + const { latest } = infoResp.data['dist-tags']; + const manifest = infoResp.data.versions[latest]; + const { readme } = infoResp.data; + + return { + readme, + manifest, + }; + } catch (err) { + return { + state: 'error', + error: err.message, + }; } - return await loadPackageInfo(dir); + + // const dir = path.join(pluginstmpdir(), packageName); + // if (!(await fs.exists(dir))) { + // await downloadPackage(packageName, dir); + // } + // return await loadPackageInfo(dir); // return await { // ...loadPackageInfo(dir), // installed: loadPackageInfo(path.join(pluginsdir(), packageName)), @@ -60,11 +77,23 @@ module.exports = { installed_meta: 'get', async installed() { const files = await fs.readdir(pluginsdir()); - return await Promise.all( - files.map((packageName) => - fs.readFile(path.join(pluginsdir(), packageName, 'package.json')).then((x) => JSON.parse(x)) - ) - ); + const res = []; + for (const packageName of files) { + const manifest = await fs + .readFile(path.join(pluginsdir(), packageName, 'package.json')) + .then((x) => JSON.parse(x)); + const readmeFile = path.join(pluginsdir(), packageName, 'README.md'); + if (await fs.exists(readmeFile)) { + manifest.readme = await fs.readFile(readmeFile, { encoding: 'utf-8' }); + } + res.push(manifest); + } + return res; + // const res = await Promise.all( + // files.map((packageName) => + // fs.readFile(path.join(pluginsdir(), packageName, 'package.json')).then((x) => JSON.parse(x)) + // ) + // ); }, install_meta: 'post', diff --git a/packages/web/src/plugins/manifestExtractors.js b/packages/web/src/plugins/manifestExtractors.js index 715f2db65..32f62ef65 100644 --- a/packages/web/src/plugins/manifestExtractors.js +++ b/packages/web/src/plugins/manifestExtractors.js @@ -2,7 +2,8 @@ import _ from 'lodash'; export function extractPluginIcon(packageManifest) { const { links } = packageManifest || {}; - const { repository, homepage } = links || {}; + const { repository } = links || {}; + const homepage = (links && links.homepage) || packageManifest.homepage; const tested = repository || homepage || packageManifest.homepage; if (tested) { diff --git a/packages/web/src/tabs/PluginTab.js b/packages/web/src/tabs/PluginTab.js index 27698f72f..24d2cbbf5 100644 --- a/packages/web/src/tabs/PluginTab.js +++ b/packages/web/src/tabs/PluginTab.js @@ -55,7 +55,7 @@ function Delimiter() { return | ; } -export default function PluginTab({ packageName }) { +function PluginTabCore({ packageName }) { const theme = useTheme(); const installed = useInstalledPlugins(); const info = useFetch({ @@ -63,7 +63,7 @@ export default function PluginTab({ packageName }) { url: 'plugins/info', defaultValue: null, }); - const { readme, manifest } = info || {}; + let { readme, manifest } = info || {}; const handleInstall = async () => { axios.post('plugins/install', { packageName }); }; @@ -71,34 +71,52 @@ export default function PluginTab({ packageName }) { axios.post('plugins/uninstall', { packageName }); }; + if (info == null) { + return ; + } + + if (manifest == null) { + const installedFound = installed.find((x) => x.name == packageName); + if (installedFound) { + manifest = installedFound; + readme = installedFound.readme; + } + if (manifest == null) { + return null; + } + } + + return ( + <> +
+ + + {packageName} + + {extractPluginAuthor(manifest)} + + {manifest.version && manifest.version} + + + {!installed.find((x) => x.name == packageName) && ( + + )} + {!!installed.find((x) => x.name == packageName) && ( + + )} + + +
+ {readme} + + ); +} + +export default function PluginTab({ packageName }) { + const theme = useTheme(); return ( - {info == null || manifest == null ? ( - - ) : ( - <> -
- - - {packageName} - - {extractPluginAuthor(manifest)} - - {manifest.version && manifest.version} - - - {!installed.find((x) => x.name == packageName) && ( - - )} - {!!installed.find((x) => x.name == packageName) && ( - - )} - - -
- {readme} - - )} +
); }