import { useEffect, useState } from "react"; import { BsmProgressBar } from "renderer/components/progress-bar/bsm-progress-bar.component"; import { BsmImage } from "renderer/components/shared/bsm-image.component"; import TitleBar from "renderer/components/title-bar/title-bar.component"; import { IpcService } from "renderer/services/ipc.service"; import { MapsDownloaderService } from "renderer/services/maps-downloader.service"; import { ProgressBarService } from "renderer/services/progress-bar.service"; import { ThemeService } from "renderer/services/theme.service"; import { BeatSaverService } from "renderer/services/thrird-partys/beat-saver.service"; import { WindowManagerService } from "renderer/services/window-manager.service"; import { timer } from "rxjs"; import { BsvMapDetail } from "shared/models/maps"; import defaultImage from '../../../../assets/images/default-version-img.jpg' export default function OneClickDownloadMap() { const ipc = IpcService.getInstance(); const bsv = BeatSaverService.getInstance(); const mapsDownloader = MapsDownloaderService.getInstance(); const themeService = ThemeService.getInstance(); const progressBar = ProgressBarService.getInstance(); const windows = WindowManagerService.getInstance(); const [mapInfo, setMapInfo] = useState(null); const cover = mapInfo ? mapInfo.versions.at(0).coverURL : null; useEffect(() => { const sub = themeService.theme$.subscribe(() => { if(themeService.isDark || (themeService.isOS && window.matchMedia('(prefers-color-scheme: dark)').matches)){ document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } }); progressBar.open(); const promise = new Promise(async (resolve, reject) => { try{ const ipcRes = await ipc.send<{id: string, isHash: boolean}>("one-click-map-info"); if(!ipcRes.success){ return reject(ipcRes.error); } const mapDetails = ipcRes.data.isHash ? (await bsv.getMapDetailsFromHashs([ipcRes.data.id])).at(0) : await bsv.getMapDetailsById(ipcRes.data.id); setMapInfo(() => mapDetails); await mapsDownloader.oneClickInstallMap(mapDetails); progressBar.complete(); await timer(300).toPromise(); resolve(); } catch(e){ reject(e); } }); promise.finally(() =>{}); return () => { sub.unsubscribe(); } }, []); return (
{cover && }

{mapInfo?.name ?? "Chargement de la map..."}

) }