From 4b86c4ee8a132cdc7ea86a571ad5b3dd1c7b9468 Mon Sep 17 00:00:00 2001 From: didirus Date: Sun, 19 Oct 2025 21:06:03 +0300 Subject: [PATCH] refactor: minor changes in update.js --- .../components/ui/modal/AppSettingsModal.vue | 39 +++-- apps/app-frontend/src/helpers/update.js | 157 +++++++++--------- 2 files changed, 105 insertions(+), 91 deletions(-) diff --git a/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue b/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue index 11c35fef..c4dbed40 100644 --- a/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue +++ b/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue @@ -211,28 +211,34 @@ const messages = defineMessages({
-

The new version of the AstralRinth launcher is available.

+ The new version of the AstralRinth launcher is available!

Your version is outdated. We recommend that you update to the latest version.

-

⚠️ Warning ⚠️

+
+
+

⚠️ Please, read this notice before initialize update process

- Before updating, make sure that you have saved all running instances and made a backup copy of the instances - that are valuable to you. Remember that the authors of the product are not responsible for the breakdown of - your files, so you should always make copies of them and keep them in a safe place. + Before updating, make sure that you have saved and closed all running instances and made a backup copy of the launcher data such as + %appdata%\Roaming\AstralRinthApp on Windows or ~/Library/Application Support/AstralRinthApp on macOS. + Remember that the authors of the product are not responsible for the breakdown of + your files, so you should always make back up copies of them and keep them in a safe place.

- Source: Git Astralium

- Version on remote server: - -

-

- Version on local device: + ☁️ Latest release tag: + +
+ ☁️ Latest release title: + +
+ 💾 Installed & Running version: v{{ version }}

- + + Checkout our git repository +
@@ -271,4 +277,11 @@ const messages = defineMessages({ @import '../../../../../../packages/assets/styles/neon-icon.scss'; @import '../../../../../../packages/assets/styles/neon-button.scss'; @import '../../../../../../packages/assets/styles/neon-text.scss'; + +code { + background: linear-gradient(90deg, #005eff, #00cfff); + background-clip: text; + -webkit-background-clip: text; + color: transparent; +} diff --git a/apps/app-frontend/src/helpers/update.js b/apps/app-frontend/src/helpers/update.js index f7033b7a..2b1306b5 100644 --- a/apps/app-frontend/src/helpers/update.js +++ b/apps/app-frontend/src/helpers/update.js @@ -1,96 +1,97 @@ -import { ref } from 'vue' import { getVersion } from '@tauri-apps/api/app' -import { initUpdateLauncher, getOS } from '@/helpers/utils.js' +import { ref } from 'vue' + +import { getOS, initUpdateLauncher } from '@/helpers/utils.js' export const allowState = ref(false) export const installState = ref(false) export const updateState = ref(false) -const currentOS = ref('') -const releaseLink = `https://git.astralium.su/api/v1/repos/didirus/AstralRinth/releases/latest` -const failedFetch = [`Failed to fetch remote releases:`, `Failed to fetch remote commits:`] +const currentOS = await getOS() +const api = `https://git.astralium.su/api/v1/repos/didirus/AstralRinth/releases/latest` -const osList = ['macos', 'windows', 'linux'] -const macExtensionList = ['.dmg', '.pkg'] -const windowsExtensionList = ['.exe', '.msi'] +const systems = ['macos', 'windows', 'linux'] +const macosExtensions = ['.dmg', '.pkg', '.app'] +const windowsExtensions = ['.exe', '.msi'] -const blacklistPrefixes = [ - `dev`, - `nightly`, - `dirty`, - `dirty-dev`, - `dirty-nightly`, - `dirty_dev`, - `dirty_nightly`, +const blacklistBeginPrefixes = [ + `dev`, + `nightly`, + `dirty`, + `dirty-dev`, + `dirty-nightly`, + `dirty_dev`, + `dirty_nightly`, ] // This is blacklisted builds for download. For example, file.startsWith('dev') is not allowed. export async function getRemote(isDownloadState) { - var releaseData = null; - var result = false; - try { - const response = await fetch(releaseLink); - if (!response.ok) { - throw new Error(response.status); - } - const remoteData = await response.json(); - currentOS.value = await getOS(); - const remoteLatestReleaseTag = remoteData.tag_name; - releaseData = document.getElementById('releaseData'); - const remoteVersion = releaseData ? (releaseData.textContent = remoteLatestReleaseTag) : remoteLatestReleaseTag; - - if (osList.includes(currentOS.value.toLowerCase())) { - const localVersion = await getVersion(); - const isUpdateAvailable = !remoteVersion.includes(localVersion); - - updateState.value = isUpdateAvailable; - allowState.value = isUpdateAvailable; - } else { - updateState.value = false; - allowState.value = false; - } - if (isDownloadState) { - installState.value = true; - const builds = remoteData.assets; - const fileName = getInstaller(getExtension(), builds); - result = fileName ? await initUpdateLauncher(fileName[1], fileName[0], currentOS.value, true) : false; - installState.value = false; - } - - console.log('Update available state is', updateState.value); - console.log('Remote version is', remoteVersion); - console.log('Local version is', await getVersion()); - console.log('Operating System is', currentOS.value); - return result; - } catch (error) { - console.error(failedFetch[0], error); - if (!releaseData) { - const errorData = document.getElementById('releaseData'); - if (errorData) { - errorData.textContent = `${error.message}`; - } - updateState.value = false; - allowState.value = false; - installState.value = false; - } - } + var releaseTag = null; + var releaseTitle = null; + var result = false; + try { + const response = await fetch(api); + if (!response.ok) { + throw new Error(response.status); + } + const remoteData = await response.json(); + releaseTag = document.getElementById('releaseTag'); + releaseTitle = document.getElementById('releaseTitle'); + if (releaseTag && releaseTitle) { + releaseTag.textContent = remoteData.tag_name; + releaseTitle.textContent = remoteData.name; + } + if (systems.includes(currentOS.toLowerCase())) { + const localVersion = await getVersion(); + const isUpdateAvailable = !remoteData.tag_name.includes(localVersion); + updateState.value = isUpdateAvailable; + allowState.value = isUpdateAvailable; + } else { + updateState.value = false; + allowState.value = false; + } + if (isDownloadState) { + try { + installState.value = true; + const builds = remoteData.assets; + const fileName = getInstaller(getExtension(), builds); + result = fileName ? await initUpdateLauncher(fileName[1], fileName[0], currentOS, true) : false; + installState.value = false; + } catch (err) { + installState.value = false; + } + } + console.log('Update available state is', updateState.value); + console.log('Remote version is', remoteData.tag_name); + console.log('Remote title is', remoteData.name); + console.log('Local version is', await getVersion()); + console.log('Operating System is', currentOS); + return result; + } catch (error) { + console.error("Failed to fetch remote releases:", error); + if (!releaseTag) { + updateState.value = false; + allowState.value = false; + installState.value = false; + } + } } function getInstaller(osExtension, builds) { - console.log(osExtension, builds) - for (const build of builds) { - if (blacklistPrefixes.some(prefix => build.name.startsWith(prefix))) { - continue; - } - if (osExtension.some(ext => build.name.endsWith(ext))) { - console.log(build.name, build.browser_download_url); - return [build.name, build.browser_download_url]; - } - } - return null; + console.log(osExtension, builds) + for (const build of builds) { + if (blacklistBeginPrefixes.some(prefix => build.name.startsWith(prefix))) { + continue; + } + if (osExtension.some(ext => build.name.endsWith(ext))) { + console.log(build.name, build.browser_download_url); + return [build.name, build.browser_download_url]; + } + } + return null; } function getExtension() { - return osList.find(osName => osName === currentOS.value.toLowerCase())?.endsWith('macos') - ? macExtensionList - : windowsExtensionList; + return systems.find(osName => osName === currentOS.toLowerCase())?.endsWith('macos') + ? macosExtensions + : windowsExtensions; }