diff --git a/src/renderer/components/nav-bar/nav-bar-items/bs-version-item.component.tsx b/src/renderer/components/nav-bar/nav-bar-items/bs-version-item.component.tsx index 2a9eb236..4b204c82 100644 --- a/src/renderer/components/nav-bar/nav-bar-items/bs-version-item.component.tsx +++ b/src/renderer/components/nav-bar/nav-bar-items/bs-version-item.component.tsx @@ -1,7 +1,7 @@ import { BSVersion } from "shared/bs-version.interface"; import { Link, useLocation } from "react-router-dom"; import { useState } from "react"; -import { distinctUntilChanged, lastValueFrom, map, of, Subscription, switchMap } from "rxjs"; +import { distinctUntilChanged, lastValueFrom, map, of, Subscription, switchMap, take } from "rxjs"; import { BSLauncherService, LaunchMods } from "renderer/services/bs-launcher.service"; import { ConfigurationService } from "renderer/services/configuration.service"; import { BSUninstallerService } from "renderer/services/bs-uninstaller.service"; @@ -55,7 +55,9 @@ export function BsVersionItem(props: { version: BSVersion }) { return props.version?.BSVersion === state?.BSVersion && props?.version.steam === state?.steam && props?.version.oculus === state?.oculus && props?.version.name === state?.name; }; - const handleDoubleClick = () => { + const handleDoubleClick = async () => { + const downloadingVersion = await lastValueFrom(bsDownloader.downloadingVersion$.pipe(take(1))); + if(equal(downloadingVersion, props.version)){ return; } const launch$ = launcherService.launch({ version: state, oculus: !!configService.get(LaunchMods.OCULUS_MOD), diff --git a/src/renderer/components/version-viewer/slides/launch/launch-slide.component.tsx b/src/renderer/components/version-viewer/slides/launch/launch-slide.component.tsx index 5475687a..67d3100d 100644 --- a/src/renderer/components/version-viewer/slides/launch/launch-slide.component.tsx +++ b/src/renderer/components/version-viewer/slides/launch/launch-slide.component.tsx @@ -12,6 +12,8 @@ import { BsmImage } from "renderer/components/shared/bsm-image.component"; import { useService } from "renderer/hooks/use-service.hook"; import { BsStore } from "shared/models/bs-store.enum"; import { lastValueFrom } from "rxjs"; +import { BsDownloaderService } from "renderer/services/bs-version-download/bs-downloader.service"; +import equal from "fast-deep-equal"; type Props = { version: BSVersion }; @@ -20,12 +22,14 @@ export function LaunchSlide({ version }: Props) { const configService = useService(ConfigurationService); const bsLauncherService = useService(BSLauncherService); + const bsDownloader = useService(BsDownloaderService); const [oculusMode, setOculusMode] = useState(!!configService.get(LaunchMods.OCULUS_MOD)); const [desktopMode, setDesktopMode] = useState(!!configService.get(LaunchMods.DESKTOP_MOD)); const [debugMode, setDebugMode] = useState(!!configService.get(LaunchMods.DEBUG_MOD)); const [advancedLaunch, setAdvancedLaunch] = useState(false); const [additionalArgsString, setAdditionalArgsString] = useState(configService.get("additionnal-args") || ""); + const versionDownloading = useObservable(bsDownloader.downloadingVersion$); const versionRunning = useObservable(bsLauncherService.versionRunning$); @@ -96,7 +100,13 @@ export function LaunchSlide({ version }: Props) {
- +
);