diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 049c3d3..03bbf84 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -40,7 +40,7 @@ } } }, - "productName": "Advanced PassGen", + "productName": "advanced-passgen", "mainBinaryName": "advanced-passgen", "version": "2.5.2", "identifier": "com.codedead.advancedpassgen", diff --git a/src/components/App/index.jsx b/src/components/App/index.jsx index 1d09310..b9f5432 100644 --- a/src/components/App/index.jsx +++ b/src/components/App/index.jsx @@ -8,7 +8,7 @@ import { createTheme, ThemeProvider } from '@mui/material/styles'; import Toolbar from '@mui/material/Toolbar'; import Typography from '@mui/material/Typography'; import useMediaQuery from '@mui/material/useMediaQuery'; -import { platform } from '@tauri-apps/plugin-os'; +import { arch, platform } from '@tauri-apps/plugin-os'; import { BrowserRouter, Routes, Route } from 'react-router-dom'; import packageJson from '../../../package.json'; import { MainContext } from '../../contexts/MainContextProvider'; @@ -77,7 +77,8 @@ const App = () => { try { const res = platform(); - Updater(res.toLowerCase(), packageJson.version) + const architecture = arch(); + Updater(res.toLowerCase(), architecture, packageJson.version) .then((up) => { d1(setUpdate(up)); }) diff --git a/src/routes/Settings/index.jsx b/src/routes/Settings/index.jsx index f316867..96f96a2 100644 --- a/src/routes/Settings/index.jsx +++ b/src/routes/Settings/index.jsx @@ -36,7 +36,7 @@ import Radio from '@mui/material/Radio'; import RadioGroup from '@mui/material/RadioGroup'; import Select from '@mui/material/Select'; import Typography from '@mui/material/Typography'; -import { platform } from '@tauri-apps/plugin-os'; +import { arch, platform } from '@tauri-apps/plugin-os'; import packageJson from '../../../package.json'; import AlertDialog from '../../components/AlertDialog'; import GridList from '../../components/GridList'; @@ -125,7 +125,8 @@ const Settings = () => { try { const res = platform(); - Updater(res.toLowerCase(), packageJson.version) + const architecture = arch(); + Updater(res.toLowerCase(), architecture, packageJson.version) .then((up) => { d1(setUpdate(up)); d1(setCheckedForUpdates(true)); @@ -252,7 +253,7 @@ const Settings = () => { {language.theme} - + { +const normalizeVersion = (version) => + typeof version === 'string' ? version.replace(/^[^\d]+/, '') : ''; + +const normalizeArch = (architecture) => { + switch (architecture) { + case 'x86_64': + return 'x64'; + default: + return architecture; + } +}; + +const Updater = (os, architecture, currentVersion) => { /** * Check whether version b is newer than version a * @param a Version a @@ -6,8 +18,8 @@ const Updater = (os, currentVersion) => { * @returns {boolean} True if version b is newer than version a, otherwise false */ const isNewer = (a, b) => { - const partsA = a.split('.'); - const partsB = b.split('.'); + const partsA = normalizeVersion(a).split('.'); + const partsB = normalizeVersion(b).split('.'); const numParts = partsA.length > partsB.length ? partsA.length : partsB.length; @@ -23,35 +35,50 @@ const Updater = (os, currentVersion) => { /** * Parse the information inside an external update * @param update The update data - * @returns {{infoUrl: null, updateUrl: boolean, downloadUrl: null, version: null}} + * @returns {{infoUrl: null, updateUrl: null, downloadUrl: null, version: null, updateAvailable: boolean}} */ const parseUpdate = (update) => { - const platform = update.platforms[os]; const data = { - updateUrl: false, + updateUrl: null, downloadUrl: null, infoUrl: null, version: null, + updateAvailable: false, }; - if ( - isNewer( - currentVersion, - `${platform.version.majorVersion}.${platform.version.minorVersion}.${platform.version.buildVersion}.${platform.version.revisionVersion}`, - ) - ) { + if (!update || !Array.isArray(update.platforms)) { + return data; + } + + const normalizedArchitecture = normalizeArch(architecture); + const matchingPlatforms = update.platforms.filter( + (platform) => platform.name === os, + ); + const platform = matchingPlatforms.find( + (entry) => normalizeArch(entry.arch) === normalizedArchitecture, + ); + const version = normalizeVersion(update.semver); + + if (!platform || !version) { + return data; + } + + if (isNewer(currentVersion, version)) { data.updateAvailable = true; } - data.updateUrl = platform.updateUrl; + data.updateUrl = platform.downloadUrl; + data.downloadUrl = platform.downloadUrl; data.infoUrl = platform.infoUrl; - data.version = `${platform.version.majorVersion}.${platform.version.minorVersion}.${platform.version.buildVersion}.${platform.version.revisionVersion}`; + data.version = version; return data; }; return new Promise((resolve, reject) => { - fetch('https://codedead.com/Software/Advanced%20PassGen/version.json') + fetch( + 'https://api.codedead.com/api/v1/version/38b1f6e7-3274-4405-9eb1-42d47ae8a53e', + ) .then((res) => { if (!res.ok) { throw Error(res.statusText); diff --git a/yarn.lock b/yarn.lock index fde00a7..c21ae6d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3249,11 +3249,11 @@ __metadata: linkType: hard "baseline-browser-mapping@npm:^2.10.12": - version: 2.10.21 - resolution: "baseline-browser-mapping@npm:2.10.21" + version: 2.10.23 + resolution: "baseline-browser-mapping@npm:2.10.23" bin: baseline-browser-mapping: dist/cli.cjs - checksum: 10c0/065d90f98099dd0d7b6e1c284f7133d0eaebf571a7ee3e9e0740862dbd64cf040f4447404269bc8b1fd4015dead68c3a026e541a214050375df6bde20706ec8b + checksum: 10c0/b2c167b9b46dc1c0c6a2c2ccc24469910f22ca953fa591dcff7a222a69aa864b8172f3fdff851da00de307732752b87b1e23a0b4b416f024e5608facdbc461c4 languageName: node linkType: hard @@ -3347,9 +3347,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001782": - version: 1.0.30001790 - resolution: "caniuse-lite@npm:1.0.30001790" - checksum: 10c0/eec0adc1dcb35d51e57bcfa0657493cb57ef43f0ceb03c1edcfee34d43e7a938e6beed2781118c7a5ee99d4f71d443977f08ca5a549005cf89260733af9ad3f8 + version: 1.0.30001791 + resolution: "caniuse-lite@npm:1.0.30001791" + checksum: 10c0/53c8b5dad1c196a5e495405a7d2dc1db58aed9be02f60cf2a2e29d2c8d8cbb6c39beabf958d6aa191ab967ddcf49f22319452256b980bad1e271615acfe58940 languageName: node linkType: hard @@ -5593,13 +5593,13 @@ __metadata: linkType: hard "postcss@npm:^8.5.10": - version: 8.5.10 - resolution: "postcss@npm:8.5.10" + version: 8.5.12 + resolution: "postcss@npm:8.5.12" dependencies: nanoid: "npm:^3.3.11" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/c592dffa0c4873b401f01955b265538d9942f425040df5e2b8f0ad34c83773a792ea0fa5859ccc99cfb5b955b4ebff118ab7056315388dc83b107b0fa8313576 + checksum: 10c0/5baebaf574c567bc1b3d61197f38af4ce5920b8f611c887fb6bc3dcc14af00253c169dbf19897bc889cce0b0d9818ab5eb4ea0caedf02b0bab10da8a43ce8c12 languageName: node linkType: hard