Skip to content

Commit fee1119

Browse files
authored
Merge pull request BruceDevices#1720 from emericklaw/show-release-date
Show release date
2 parents fd7646d + 8d5ea9b commit fee1119

File tree

1 file changed

+46
-7
lines changed

1 file changed

+46
-7
lines changed

src/routes/flasher/+page.svelte

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,21 @@
55
66
$current_page = Page.Flasher;
77
let selectedVersion = $state('Last');
8+
let selectedReleaseDate = $state('');
89
let selectedDevice = $state('');
910
let selectedCategory = $state('');
11+
let versionTags: Array<{ tag_name: string; updated_at: string }> = $state([]);
1012
1113
$effect(() => {
1214
updateManifest();
1315
});
1416
17+
function formatDateTime(str) {
18+
let date = new Date(str).toLocaleDateString();
19+
let time = new Date(str).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
20+
return `${date} ${time}`;
21+
}
22+
1523
function downloadFile(file: string) {
1624
const releaseTag =
1725
selectedVersion === 'Beta'
@@ -40,6 +48,22 @@
4048
selectedVersion = version;
4149
const otherReleaseContainer = document.getElementById('otherReleaseContainer');
4250
otherReleaseContainer.style.display = version === 'Other' ? 'block' : 'none';
51+
updateReleaseDate();
52+
}
53+
54+
function updateReleaseDate() {
55+
let element: HTMLElement | null = null;
56+
57+
if (selectedVersion === 'Other') {
58+
const dropdown = document.getElementById('otherReleaseDropdown') as HTMLSelectElement;
59+
element = dropdown?.options[dropdown.selectedIndex];
60+
} else {
61+
element = document.getElementById(selectedVersion === 'Last' ? 'latest' : 'beta');
62+
}
63+
64+
selectedReleaseDate = element?.getAttribute('data-release-date') || '';
65+
66+
document.getElementById('releaseDate').classList.remove('invisible');
4367
}
4468
4569
function findDeviceById(id) {
@@ -96,8 +120,8 @@
96120
const active_el = (first: string, cmp: string) => (first == cmp ? 'bg-[#9B51E0] text-white' : '');
97121
98122
// Get GitHub release tags
99-
let versionTags: string[] = $state([]);
100123
let latestVersionTag: string = $state('');
124+
let latestVersionReleaseDate: string = $state('');
101125
let loading = $state(true);
102126
let error = $state('');
103127
@@ -111,12 +135,23 @@
111135
loading = true;
112136
error = '';
113137
try {
114-
const res = await fetch(`https://api.github.com/repos/${repo}/tags`);
138+
const res = await fetch(`https://api.github.com/repos/${repo}/releases?per_page=100`);
115139
if (!res.ok) throw new Error('Failed to fetch tags');
116140
const data = await res.json();
117-
// Only include tags matching x.x or x.x.x
118-
versionTags = data.map((tag: { name: string }) => tag.name).filter((name: string) => /^\d+\.\d+(\.\d+)?$/.test(name));
119-
latestVersionTag = versionTags.length > 0 ? versionTags[0] : '';
141+
// Only include tags matching x.x or x.x.x, keep both tag_name and updated_at
142+
versionTags = data.map((release: { tag_name: string; updated_at: string }) => ({
143+
tag_name: release.tag_name,
144+
updated_at: release.updated_at
145+
}));
146+
latestVersionTag = versionTags.length > 0 ? versionTags[0].tag_name : '';
147+
latestVersionReleaseDate = versionTags.length > 0 ? versionTags[0].updated_at : '';
148+
document.getElementById('latest').setAttribute('data-release-date', latestVersionReleaseDate);
149+
selectedReleaseDate = latestVersionReleaseDate;
150+
151+
const betaRelease = versionTags.find((r) => r.tag_name === 'betaRelease');
152+
document.getElementById('beta').setAttribute('data-release-date', betaRelease.updated_at);
153+
154+
updateReleaseDate();
120155
} catch (e) {
121156
error = e.message;
122157
}
@@ -196,15 +231,19 @@
196231
<select
197232
id="otherReleaseDropdown"
198233
class="mt-2 min-h-[2.5rem] w-32 min-w-[10rem] rounded-lg border-2 border-purple-500 bg-black p-2 px-5 py-2.5 text-purple-500 transition-all duration-300 ease-in-out"
234+
onchange={() => updateReleaseDate()}
199235
>
200-
{#each versionTags as versionTag, i (versionTag)}
201-
<option value={versionTag}>{versionTag}{i === 0 ? ' (Latest)' : ''}</option>
236+
{#each versionTags.filter( (release: { tag_name: string }) => /^v?\d+\.\d+(\.\d+)?$/.test(release.tag_name) ) as versionTag, i (versionTag.tag_name)}
237+
<option value={versionTag.tag_name} data-release-date={versionTag.updated_at}>{versionTag.tag_name}{i === 0 ? ' (Latest)' : ''}</option>
202238
{/each}
203239
</select>
204240
{/if}
205241
</div>
206242
</div>
207243
</div>
244+
<div id="releaseDate" class="invisible mt-2 text-center text-sm font-bold text-gray-400" data-i18n="release_date">
245+
Released: <span id="releaseDateValue" class="font-normal">{formatDateTime(selectedReleaseDate)}</span>
246+
</div>
208247
</div>
209248

210249
<div class="container">

0 commit comments

Comments
 (0)