import { Accordion, AccordionButton, AccordionIcon, AccordionItem, AccordionPanel, Link as Anchor, Heading, HStack, Text, VStack, chakra, } from "@chakra-ui/react"; import { Octokit, RestEndpointMethodTypes } from "@octokit/rest"; import ReactMarkdown from "react-markdown"; import { Platform } from "hooks/usePlatform"; import gfm from "remark-gfm"; import { DisplayAd, InFeedAd } from "components/special"; import { GetServerSideProps, NextPage } from "next"; import { MarkdownComponentDefs } from "misc/MarkdownComponentDefs"; import { octokit } from "configurations/ocotokit"; enum AssetTypes { sums = "sums", linux = "linux", mac = "mac", windows = "windows", android = "android", } type ReleaseResponse = { id: number; body: string | null | undefined; tag_name: string; assets: { id: number; name: string; browser_download_url: string; }[]; }[]; type Props = { data: ReleaseResponse; }; export const getServerSideProps: GetServerSideProps = async ({ res, }) => { res.setHeader( "Cache-Control", "public, s-maxage=10, stale-while-revalidate=59" ); const { data } = await octokit.repos.listReleases({ owner: "KRTirtho", repo: "spotube", }); const releaseResponse: ReleaseResponse = data.map((data) => { return { tag_name: data.tag_name, id: data.id, body: data.body, assets: data.assets.map((asset) => ({ id: asset.id, name: asset.name, browser_download_url: asset.browser_download_url, })), }; }); return { props: { data: releaseResponse, }, }; }; const StableDownloads: NextPage = ({ data }) => { return ( Previous Versions If any of your version is not working correctly than you can download & use previous versions of Spotube too {data.map((release, i) => { const releaseSome = release.assets .map((asset) => { const platform = Object.keys(Platform).find((platform) => asset.name.toLowerCase().includes(platform) ) ?? "sums"; return { type: AssetTypes[platform as keyof typeof AssetTypes], asset, }; }) .reduce((acc, val) => { acc[val.type] = [...(acc[val.type] ?? []), val.asset]; return acc; }, {} as any) as { [key in AssetTypes]: RestEndpointMethodTypes["repos"]["listReleases"]["response"]["data"][0]["assets"]; }; return ( Version{" "} {release.tag_name} {" "} {i == 0 && "(Latest)"} {Object.entries(releaseSome).map(([type, assets], i) => { return ( {type[0].toUpperCase() + type.slice(1)} {assets.map((asset) => { return ( {asset.name} ); })} ); })} Release Notes {release.body ?? ""} ); })} ); }; export default StableDownloads;