aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/packages/ui/src/stores/releases.svelte.ts
diff options
context:
space:
mode:
author苏向夜 <fu050409@163.com>2026-01-19 14:17:32 +0800
committer苏向夜 <fu050409@163.com>2026-01-19 14:17:32 +0800
commitda0d79f0db873c08fab3bc85023167e174d18b0e (patch)
tree4a1934780d0d723ec8b834088188d4714f2cf3e7 /packages/ui/src/stores/releases.svelte.ts
parent887e415314014c3da7db3048fa0e724f3078c5cb (diff)
downloadDropOut-da0d79f0db873c08fab3bc85023167e174d18b0e.tar.gz
DropOut-da0d79f0db873c08fab3bc85023167e174d18b0e.zip
chore(ui): refactor workspace to monorepo
Diffstat (limited to 'packages/ui/src/stores/releases.svelte.ts')
-rw-r--r--packages/ui/src/stores/releases.svelte.ts36
1 files changed, 36 insertions, 0 deletions
diff --git a/packages/ui/src/stores/releases.svelte.ts b/packages/ui/src/stores/releases.svelte.ts
new file mode 100644
index 0000000..c858abb
--- /dev/null
+++ b/packages/ui/src/stores/releases.svelte.ts
@@ -0,0 +1,36 @@
+import { invoke } from "@tauri-apps/api/core";
+
+export interface GithubRelease {
+ tag_name: string;
+ name: string;
+ published_at: string;
+ body: string;
+ html_url: string;
+}
+
+export class ReleasesState {
+ releases = $state<GithubRelease[]>([]);
+ isLoading = $state(false);
+ isLoaded = $state(false);
+ error = $state<string | null>(null);
+
+ async loadReleases() {
+ // If already loaded or currently loading, skip to prevent duplicate requests
+ if (this.isLoaded || this.isLoading) return;
+
+ this.isLoading = true;
+ this.error = null;
+
+ try {
+ this.releases = await invoke<GithubRelease[]>("get_github_releases");
+ this.isLoaded = true;
+ } catch (e) {
+ console.error("Failed to load releases:", e);
+ this.error = String(e);
+ } finally {
+ this.isLoading = false;
+ }
+ }
+}
+
+export const releasesState = new ReleasesState();