fix installed version detection (#402)

This commit is contained in:
ABevier 2023-04-05 19:45:54 -04:00 committed by GitHub
parent 443f0931f3
commit 01f2118093
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 27 additions and 8 deletions

View file

@ -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) {

View file

@ -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";

View file

@ -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))
);
};

View file

@ -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;