Skip to content

Commit

Permalink
convert getInstalledPackages to ipc handler
Browse files Browse the repository at this point in the history
  • Loading branch information
neil authored and neil committed Feb 6, 2023
1 parent 91c4ee9 commit 680e107
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 25 deletions.
25 changes: 4 additions & 21 deletions modules/desktop/electron/electron.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import serve from 'electron-serve';
import path from 'path';
import fs from 'fs';

import { getInstalledPackages } from './libs/teaDir';
try {
//@ts-ignore only used in dev should not be packaged inprod
/* eslint-disable */
Expand Down Expand Up @@ -108,25 +109,7 @@ ipcMain.on('to-main', (event, count) => {
});

ipcMain.handle('get-installed-packages', async () => {
const homePath = app.getPath('home');
const teaPath = path.join(homePath, '.tea');
const folders = await deepReadDir(teaPath);
return folders;
console.log('get installed pkgs: ipc');
const pkgs = await getInstalledPackages();
return pkgs;
});

const deepReadDir = async (dirPath) => {
let arrayOfFiles;
try {
arrayOfFiles = fs.readdirSync(dirPath);
console.log(arrayOfFiles);
} catch (e) {
console.log(e);
}
// await Promise.all(
// (await readdir(dirPath, {withFileTypes: true})).map(async (dirent) => {
// const path = join(dirPath, dirent.name)
// return dirent.isDirectory() ? await deepReadDir(path) : path
// }),
// )
return arrayOfFiles;
};
88 changes: 88 additions & 0 deletions modules/desktop/electron/libs/teaDir.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
// import { readDir, BaseDirectory } from '@tauri-apps/api/fs';
import fs from 'fs';
import path from 'path';
import { app } from 'electron';
import semver from 'semver';

type Dir = {
name: string;
path: string;
children?: Dir[];
};
export async function getInstalledPackages() {
const homePath = app.getPath('home');
const pkgsPath = path.join(homePath, './.tea');

const folders = await deepReadDir({
dir: pkgsPath,
continueDeeper: (name: string) => !semver.valid(name),
filter: (name: string) => !!semver.valid(name)
});

const pkgs = folders
.map((p: string) => p.split('.tea/')[1])
.filter((p: string) => !p.includes('tea.xyz'))
.map((p: string) => {
const path = p.trim().split('/');
const version = path.pop();
return {
version: semver.clean(version || ''),
full_name: path.join('/')
};
});

return pkgs;
}

const semverTest =
/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/g;

export const getPkgBottles = (packageDir: Dir): string[] => {
const bottles: string[] = [];

const pkg = packageDir.path.split('.tea/')[1];
const version = pkg.split('/v')[1];

const isVersion = semverTest.test(version) || !isNaN(+version) || version === '*';

if (version && isVersion) {
bottles.push(pkg);
} else if (packageDir?.children?.length) {
const childBottles = packageDir.children
.map(getPkgBottles)
.reduce((arr, bottles) => [...arr, ...bottles], []);
bottles.push(...childBottles);
}

return bottles.filter((b) => b !== undefined).sort(); // ie: ["gohugo.io/v*", "gohugo.io/v0", "gohugo.io/v0.108", "gohugo.io/v0.108.0"]
};

const deepReadDir = async ({
dir,
continueDeeper,
filter
}: {
dir: string;
continueDeeper?: (name: string) => boolean;
filter?: (name: string) => boolean;
}) => {
const arrayOfFiles: string[] = [];
try {
const files = fs.readdirSync(dir, { withFileTypes: true });
for (const f of files) {
const nextPath = path.join(dir, f.name);
const deeper = continueDeeper ? continueDeeper(f.name) : true;
if (f.isDirectory() && deeper) {
const nextFiles = await deepReadDir({ dir: nextPath, continueDeeper, filter });
arrayOfFiles.push(...nextFiles);
} else if (filter && filter(f.name)) {
arrayOfFiles.push(nextPath);
} else if (!filter) {
arrayOfFiles.push(nextPath);
}
}
} catch (e) {
console.log(e);
}
return arrayOfFiles;
};
1 change: 1 addition & 0 deletions modules/desktop/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
"fuse.js": "^6.6.2",
"lodash": "^4.17.21",
"lorem-ipsum": "^2.0.8",
"semver": "^7.3.8",
"svelte-markdown": "^0.2.3",
"svelte-watch-resize": "^1.0.3",
"upath": "^2.0.1",
Expand Down
1 change: 0 additions & 1 deletion modules/desktop/src/libs/api/mock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,6 @@ const packages: Package[] = [
];

export async function getPackages(): Promise<GUIPackage[]> {
await getInstalledPackages();
return packages.map((pkg) => {
return {
...pkg,
Expand Down
5 changes: 2 additions & 3 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 680e107

Please sign in to comment.