mirror of
https://github.com/ivabus/gui
synced 2025-04-23 14:07:14 +03:00
fix installed version detection (#402)
This commit is contained in:
parent
443f0931f3
commit
01f2118093
4 changed files with 27 additions and 8 deletions
|
@ -14,7 +14,7 @@ type Dir = {
|
|||
children?: Dir[];
|
||||
};
|
||||
|
||||
type ParsedVersion = { version: SemVer; full_name: string };
|
||||
type ParsedVersion = { full_name: string; semVer: SemVer };
|
||||
|
||||
export const getTeaPath = () => {
|
||||
const homePath = app.getPath("home");
|
||||
|
@ -41,18 +41,18 @@ export async function getInstalledPackages(): Promise<InstalledPackage[]> {
|
|||
.map((p: string) => p.split(".tea/")[1])
|
||||
.map(parseVersionFromPath)
|
||||
.filter((v): v is ParsedVersion => !!v)
|
||||
.sort((a, b) => semverCompare(b.version, a.version));
|
||||
.sort((a, b) => semverCompare(b.semVer, a.semVer));
|
||||
|
||||
log.info("installed bottles:", bottles.length);
|
||||
|
||||
return bottles.reduce<InstalledPackage[]>((pkgs, bottle) => {
|
||||
const pkg = pkgs.find((v) => v.full_name === bottle.full_name);
|
||||
if (pkg) {
|
||||
pkg.installed_versions.push(bottle.version);
|
||||
pkg.installed_versions.push(bottle.semVer.version);
|
||||
} else {
|
||||
pkgs.push({
|
||||
full_name: bottle.full_name,
|
||||
installed_versions: [bottle.version]
|
||||
installed_versions: [bottle.semVer.version]
|
||||
});
|
||||
}
|
||||
return pkgs;
|
||||
|
@ -64,7 +64,7 @@ const parseVersionFromPath = (versionPath: string): ParsedVersion | null => {
|
|||
const path = versionPath.trim().split("/");
|
||||
const version = path.pop();
|
||||
return {
|
||||
version: new SemVer(semver.clean(version || "") || ""),
|
||||
semVer: new SemVer(semver.clean(version || "") || ""),
|
||||
full_name: path.join("/")
|
||||
};
|
||||
} catch (e) {
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
<script lang="ts">
|
||||
import Package from "$components/packages/package.svelte";
|
||||
import { PackageStates, type GUIPackage } from "$libs/types";
|
||||
import clickOutside from "@tea/ui/lib/clickOutside";
|
||||
import PackageStateButton from "./package-state-button.svelte";
|
||||
|
|
|
@ -18,3 +18,17 @@ export const findAvailableVersions = (pkg: GUIPackage) => {
|
|||
};
|
||||
|
||||
export const cleanVersion = (version: string) => clean(version) || "0.0.0";
|
||||
|
||||
// Add a new version to the list of installed versions while maintaining the sort order
|
||||
export const addInstalledVersion = (
|
||||
installedVersions: string[] | undefined,
|
||||
newVersion: string
|
||||
) => {
|
||||
if (!installedVersions) {
|
||||
return [newVersion];
|
||||
}
|
||||
|
||||
return [...installedVersions, newVersion].sort((a, b) =>
|
||||
semverCompare(cleanVersion(b), cleanVersion(a))
|
||||
);
|
||||
};
|
||||
|
|
|
@ -13,6 +13,7 @@ import {
|
|||
import { getReadme, getContributors, getRepoAsPackage } from "$libs/github";
|
||||
import type { Package } from "@tea/ui/types";
|
||||
import { trackInstall, trackInstallFailed } from "$libs/analytics";
|
||||
import { addInstalledVersion } from "$libs/packages/pkg-utils";
|
||||
|
||||
const log = window.require("electron-log");
|
||||
|
||||
|
@ -137,9 +138,14 @@ To read more about this package go to [${guiPkg.homepage}](${guiPkg.homepage}).
|
|||
updatePackage(pkg.full_name, { install_progress_percentage: progress });
|
||||
});
|
||||
|
||||
await installPackage(pkg, version || pkg.version);
|
||||
const versionToInstall = version || pkg.version;
|
||||
await installPackage(pkg, versionToInstall);
|
||||
trackInstall(pkg.full_name);
|
||||
updatePackage(pkg.full_name, { state: PackageStates.INSTALLED });
|
||||
|
||||
updatePackage(pkg.full_name, {
|
||||
state: PackageStates.INSTALLED,
|
||||
installed_versions: addInstalledVersion(pkg.installed_versions, versionToInstall)
|
||||
});
|
||||
} catch (error) {
|
||||
let message = "Unknown Error";
|
||||
if (error instanceof Error) message = error.message;
|
||||
|
|
Loading…
Reference in a new issue