diff --git a/src/scripts/updateNotifier.js b/src/scripts/updateNotifier.js new file mode 100644 index 0000000..f292182 --- /dev/null +++ b/src/scripts/updateNotifier.js @@ -0,0 +1,103 @@ +const Gitea_OWNER = 'ItsSkaiya'; +const Gitea_REPO = 'WaifuBoard'; +const CURRENT_VERSION = 'v1.6.3'; +const UPDATE_CHECK_INTERVAL = 5 * 60 * 1000; + +let currentVersionDisplay; +let latestVersionDisplay; +let updateToast; + +document.addEventListener('DOMContentLoaded', () => { + + currentVersionDisplay = document.getElementById('currentVersionDisplay'); + latestVersionDisplay = document.getElementById('latestVersionDisplay'); + updateToast = document.getElementById('updateToast'); + + if (currentVersionDisplay) { + currentVersionDisplay.textContent = CURRENT_VERSION; + } + + checkForUpdates(); + + setInterval(checkForUpdates, UPDATE_CHECK_INTERVAL); +}); + +function showToast(latestVersion) { + + if (latestVersionDisplay && updateToast) { + latestVersionDisplay.textContent = latestVersion; + updateToast.classList.add('update-available'); + updateToast.classList.remove('hidden'); + + } else { + console.error("Error: Cannot display toast because one or more DOM elements were not found."); + } +} + +function hideToast() { + if (updateToast) { + updateToast.classList.add('hidden'); + updateToast.classList.remove('update-available'); + } +} + +function isVersionOutdated(versionA, versionB) { + + const vA = versionA.replace(/^v/, '').split('.').map(Number); + const vB = versionB.replace(/^v/, '').split('.').map(Number); + + for (let i = 0; i < Math.max(vA.length, vB.length); i++) { + const numA = vA[i] || 0; + const numB = vB[i] || 0; + + if (numA < numB) return true; + if (numA > numB) return false; + } + + return false; +} + +async function checkForUpdates() { + console.log(`Checking for updates for ${Gitea_OWNER}/${Gitea_REPO}...`); + + const apiUrl = `https://git.waifuboard.app/api/v1/repos/${Gitea_OWNER}/${Gitea_REPO}/releases/latest`; + + try { + const response = await fetch(apiUrl, { + method: 'GET', + headers: { + 'Accept': 'application/json' + } + }); + + if (!response.ok) { + if (response.status === 404) { + console.info('No releases found for this repository.'); + return; + } + throw new Error(`Gitea API error: ${response.status} ${response.statusText}`); + } + + const data = await response.json(); + + const latestVersion = data.tag_name; + + if (!latestVersion) { + console.warn("Release found but no tag_name present"); + return; + } + + console.log(`Latest Gitea Release: ${latestVersion}`); + + if (isVersionOutdated(CURRENT_VERSION, latestVersion)) { + console.warn('Update available!'); + showToast(latestVersion); + } else { + console.info('Package is up to date.'); + hideToast(); + } + + } catch (error) { + console.error('Failed to fetch Gitea release:', error); + } +} \ No newline at end of file diff --git a/views/anime.html b/views/anime.html index 70d68a4..0230970 100644 --- a/views/anime.html +++ b/views/anime.html @@ -6,6 +6,7 @@
Update available: v1.x
+ + + Click To Download + +