import { Button, Card, Container, Flex, Text, Title, useMantineTheme, } from '@mantine/core'; import classes from './DownloadCenter.module.css'; import { RosettaLogo } from '../RosettaLogo/RosettaLogo'; import { useEffect, useState } from 'react'; import { FaWindows } from 'react-icons/fa'; import { FcAndroidOs, FcLinux } from 'react-icons/fc'; import { Switch } from '../Switch/Switch'; import { IconDownload } from '@tabler/icons-react'; interface DownloadFeature { platform: string; arch: string; link: string; version: string; } interface UpdateItem { platform: string; arch: string; version: string; downloadUrl: string; } const fetchUpdates = async (): Promise => { try { const response = await fetch('https://sdu.rosetta.im/updates/all'); const data = (await response.json()) as { items?: UpdateItem[] }; return (data.items || []).map((item) => ({ platform: item.platform, arch: item.arch, version: item.version, link: new URL(item.downloadUrl, 'https://sdu.rosetta.im').toString(), })).sort((a, b) => { const platformOrder = ['linux', 'win32', 'android']; const archOrder = ['arm64', 'x64', 'universal'] const platformComparison = platformOrder.indexOf(a.platform) - platformOrder.indexOf(b.platform); if (platformComparison !== 0) { return platformComparison; } return archOrder.indexOf(a.arch) - archOrder.indexOf(b.arch); }); } catch (error) { console.error('Failed to fetch updates:', error); return []; } }; export function DownloadCenter() { const theme = useMantineTheme(); const [kernels, setKernels] = useState([]); const [targetPlatforms, setTargetPlatforms] = useState(['linux', 'win32', 'android']); useEffect(() => { fetchUpdates().then(setKernels); }, []); const switchTarget = (value: string) => { let targetPlatforms: string[] = []; switch(value){ case 'All': targetPlatforms = ['linux', 'win32', 'android']; break; case 'Windows': targetPlatforms = ['win32']; break; case 'Android': targetPlatforms = ['android']; break; case 'Linux': targetPlatforms = ['linux']; break; } setTargetPlatforms(targetPlatforms); } const translatePlatformToOsName = (platform: string) => { switch(platform){ case 'linux': return 'Linux'; case 'win32': return 'Windows'; case 'android': return 'Android'; default: return platform; } } const translatePlatformAndArchToCpuName = (platform : string, arch: string) => { switch(platform){ case 'linux': return arch === 'arm64' ? 'ARM64' : 'x64'; case 'win32': return arch === 'arm64' ? 'ARM64' : 'x64'; case 'android': return 'universal'; default: return arch; } } const features = kernels.filter((v) => targetPlatforms.includes(v.platform)).map((feature) => ( {feature.platform === 'linux' && } {feature.platform === 'win32' && } {feature.platform === 'android' && } {translatePlatformToOsName(feature.platform)} - {translatePlatformAndArchToCpuName(feature.platform, feature.arch)} {feature.platform == 'linux' && <>This version is for Linux and comes as an AppImage for the GUI versions.} {feature.platform == 'win32' && <>Download this version of you have computer on Windows 10 or later.} {feature.platform == 'android' && <>This version is for Android devices and all architectures.} )); return (
Download Choose your platform and get started with Rosetta today. Enjoy secure and fast messaging across all your devices. {features}
); }