|
5 | 5 | <template v-else-if="status === 'success'"> |
6 | 6 | <p> |
7 | 7 | <VPButton |
| 8 | + v-if="releaseInfo" |
8 | 9 | :text="`Download latest stable release (${releaseInfo.name})`" |
9 | 10 | theme="brand" |
10 | | - v-if="releaseInfo" |
11 | 11 | :href="releaseInfo.url" /> |
12 | 12 | <VPButton |
| 13 | + v-else |
13 | 14 | text="No stable release available" |
14 | 15 | theme="alt" |
15 | | - disabled |
16 | | - v-else /> |
| 16 | + disabled /> |
17 | 17 | </p> |
18 | 18 | <p> |
19 | 19 | <VPButton |
| 20 | + v-if="preReleaseInfo" |
20 | 21 | :text="`Download latest pre-release (${preReleaseInfo.name})`" |
21 | 22 | theme="brand" |
22 | | - v-if=" |
23 | | - preReleaseInfo && preReleaseInfo.name !== releaseInfo?.name |
24 | | - " |
25 | 23 | :href="preReleaseInfo.url" /> |
26 | 24 | <VPButton |
| 25 | + v-else |
27 | 26 | text="No pre-release available" |
28 | 27 | theme="alt" |
29 | | - disabled |
30 | | - v-else /> |
| 28 | + disabled /> |
| 29 | + </p> |
| 30 | + <p> |
| 31 | + You can also find all releases on the |
| 32 | + <a |
| 33 | + href="https://github.com/RubberDuckCrew/gitdone/releases" |
| 34 | + target="_blank"> |
| 35 | + GitHub releases page</a |
| 36 | + >. |
31 | 37 | </p> |
32 | 38 | </template> |
33 | 39 | <template v-else> |
34 | 40 | <p> |
35 | 41 | Please download latest release manually from the |
36 | 42 | <a |
37 | 43 | href="https://github.com/RubberDuckCrew/gitdone/releases" |
38 | | - target="_blank" |
39 | | - >GitHub releases page</a |
| 44 | + target="_blank"> |
| 45 | + GitHub releases page</a |
40 | 46 | >. |
41 | 47 | </p> |
42 | 48 | </template> |
43 | 49 | </template> |
44 | 50 |
|
45 | 51 | <script setup lang="ts"> |
46 | | -import { ref, onMounted } from "vue"; |
47 | 52 | import VPButton from "vitepress/dist/client/theme-default/components/VPButton.vue"; |
| 53 | +import { useDownloadRelease } from "./downloadRelease.ts"; |
48 | 54 |
|
49 | | -const status = ref<DownloadStatus>("loading"); |
50 | | -const preReleaseInfo = ref<ReleaseInfo | null>(null); |
51 | | -const releaseInfo = ref<ReleaseInfo | null>(null); |
52 | | -
|
53 | | -type DownloadStatus = "loading" | "success" | "error"; |
54 | | -type Release = { |
55 | | - tag_name: string; |
56 | | - prerelease: boolean; |
57 | | - assets: Asset[]; |
58 | | - published_at: string; |
59 | | -}; |
60 | | -type Asset = { |
61 | | - name: string; |
62 | | - browser_download_url: string; |
63 | | -}; |
64 | | -type ReleaseInfo = { |
65 | | - name: string; |
66 | | - url: string; |
67 | | -}; |
68 | | -
|
69 | | -onMounted(() => { |
70 | | - fetch("https://api.github.com/repos/RubberDuckCrew/gitdone/releases") |
71 | | - .then((res) => res.json()) |
72 | | - .then((data) => { |
73 | | - data.sort( |
74 | | - (a: Release, b: Release) => |
75 | | - new Date(b.published_at).getTime() - |
76 | | - new Date(a.published_at).getTime() |
77 | | - ); |
78 | | - const latestRelease = data.find( |
79 | | - (release: Release) => !release.prerelease |
80 | | - ); |
81 | | - const latestPreRelease = data.find( |
82 | | - (release: Release) => |
83 | | - release.prerelease && |
84 | | - new Date(release.published_at) > |
85 | | - new Date(latestRelease?.published_at ?? 0) |
86 | | - ); |
87 | | - preReleaseInfo.value = extractReleaseInfo(latestPreRelease); |
88 | | - releaseInfo.value = extractReleaseInfo(latestRelease); |
89 | | - status.value = |
90 | | - preReleaseInfo.value || releaseInfo.value ? "success" : "error"; |
91 | | - if (status.value !== "success") { |
92 | | - status.value = "error"; |
93 | | - } |
94 | | - }) |
95 | | - .catch((e) => { |
96 | | - status.value = "error"; |
97 | | - }); |
98 | | -}); |
99 | | -
|
100 | | -function extractReleaseInfo(release: Release | undefined): ReleaseInfo | null { |
101 | | - if (release && release.assets && release.assets.length > 0) { |
102 | | - const apk = release.assets.find((asset: Asset) => |
103 | | - asset.name.endsWith(".apk") |
104 | | - ); |
105 | | - if (apk) { |
106 | | - return { |
107 | | - name: release.tag_name, |
108 | | - url: apk.browser_download_url, |
109 | | - }; |
110 | | - } |
111 | | - } |
112 | | - return null; |
113 | | -} |
| 55 | +const { status, preReleaseInfo, releaseInfo } = useDownloadRelease(); |
114 | 56 | </script> |
0 commit comments