diff --git a/assets/jsons/translations/de.json b/assets/jsons/translations/de.json index 2d66696a..5efe5c65 100644 --- a/assets/jsons/translations/de.json +++ b/assets/jsons/translations/de.json @@ -41,7 +41,9 @@ "advanced-launch": { "button": "Erweiterter Start", "placeholder": "Weitere Argumente, bspw: --revert; --nowait" - } + }, + "skipvr": "SteamVR überspringen", + "skipvr-description": "Verhindert, dass SteamVR automatisch mit Beat Saber geöffnet wird. Aktivieren Sie dies, wenn Sie eine andere VR-Laufzeit wie WiVRn oder Monado verwenden, mit der SteamVR interferieren könnte." }, "maps": { "search-bar": { @@ -427,11 +429,13 @@ "success": { "titles": { "BS_LAUNCHING": "Starte... 🚀", - "STEAM_LAUNCHING": "Steam startet!" + "STEAM_LAUNCHING": "Steam startet!", + "SKIPPING_STEAM_LAUNCH": "Steam-Start überspringen" }, "msg": { "BS_LAUNCHING": "Vergiss nicht, dich aufzuwärmen 😉", - "STEAM_LAUNCHING": "Beat Saber wird automatisch nach Steam gestartet." + "STEAM_LAUNCHING": "Beat Saber wird automatisch nach Steam gestartet.", + "SKIPPING_STEAM_LAUNCH": "Ich hoffe, du weißt, was du tust :)" } }, "errors": { diff --git a/assets/jsons/translations/en.json b/assets/jsons/translations/en.json index 304dd20d..357ac5d0 100644 --- a/assets/jsons/translations/en.json +++ b/assets/jsons/translations/en.json @@ -41,7 +41,9 @@ "advanced-launch": { "button": "Advanced launch", "placeholder": "Additional arguments ex: --revert; --nowait" - } + }, + "skipvr": "Skip SteamVR", + "skipvr-description": "Stops SteamVR from opening automatically with Beat Saber, enable if you are using a different VR runtime like WiVRn or Monado that SteamVR may interfere with." }, "maps": { "search-bar": { @@ -242,7 +244,7 @@ "confirm-btn": "Yes I'm sure" }, "error-notification": { - "message": "An error occur, unable to disable hardware acceleration." + "message": "An error occured, unable to disable hardware acceleration." } }, "use-symlinks": { @@ -254,7 +256,7 @@ "confirm-btn": "Yes I'm sure" }, "error-notification": { - "message": "An error occur, unable to change symlinks settings." + "message": "An error occured, unable to change symlinks settings." } } } @@ -427,11 +429,13 @@ "success": { "titles": { "BS_LAUNCHING": "Launching...🚀", - "STEAM_LAUNCHING": "Steam is launching!" + "STEAM_LAUNCHING": "Steam is launching!", + "SKIPPING_STEAM_LAUNCH": "Skipping Steam launch" }, "msg": { "BS_LAUNCHING": "Don't forget to warm up 😉", - "STEAM_LAUNCHING": "Beat Saber will automatically launch after Steam." + "STEAM_LAUNCHING": "Beat Saber will automatically launch after Steam.", + "SKIPPING_STEAM_LAUNCH": "I hope you know what you're doing :)" } }, "errors": { diff --git a/assets/jsons/translations/es.json b/assets/jsons/translations/es.json index d1f67abb..75648250 100644 --- a/assets/jsons/translations/es.json +++ b/assets/jsons/translations/es.json @@ -51,7 +51,9 @@ "export-maps": "Exportar mapas", "delete-maps": "Borrar mapas", "delete-duplicate-maps": "Borrar duplicados" - } + }, + "skipvr": "Saltar SteamVR", + "skipvr-description": "Evita que SteamVR se abra automáticamente con Beat Saber, habilita esto si estás usando un runtime de VR diferente como WiVRn o Monado que SteamVR podría interferir." }, "tabs": { "maps": { @@ -427,11 +429,13 @@ "success": { "titles": { "BS_LAUNCHING": "Lanzamiento...🚀", - "STEAM_LAUNCHING": "¡Steam se está iniciando!" + "STEAM_LAUNCHING": "¡Steam se está iniciando!", + "SKIPPING_STEAM_LAUNCH": "Saltando el lanzamiento de Steam" }, "msg": { "BS_LAUNCHING": "No olvides calentar 😉", - "STEAM_LAUNCHING": "Beat Saber se iniciará automáticamente después de Steam." + "STEAM_LAUNCHING": "Beat Saber se iniciará automáticamente después de Steam.", + "SKIPPING_STEAM_LAUNCH": "Espero que sepas lo que estás haciendo :)" } }, "errors": { diff --git a/assets/jsons/translations/fr.json b/assets/jsons/translations/fr.json index a9ba810a..782e455f 100644 --- a/assets/jsons/translations/fr.json +++ b/assets/jsons/translations/fr.json @@ -41,7 +41,9 @@ "advanced-launch": { "button": "Lancement avancé", "placeholder": "Arguments supplémentaires ex: --revert; --nowait" - } + }, + "skipvr": "Ignorer SteamVR", + "skipvr-description": "Empêche SteamVR de s'ouvrir automatiquement avec Beat Saber, activez-le si vous utilisez un autre runtime VR comme WiVRn ou Monado avec lequel SteamVR pourrait interférer." }, "maps": { "search-bar": { @@ -427,11 +429,13 @@ "success": { "titles": { "BS_LAUNCHING": "Lancement...🚀", - "STEAM_LAUNCHING": "Steam se lance !" + "STEAM_LAUNCHING": "Steam se lance !", + "SKIPPING_STEAM_LAUNCH": "Sauter le lancement de Steam" }, "msg": { "BS_LAUNCHING": "N'oublie pas de t'échauffer 😉", - "STEAM_LAUNCHING": "Beat Saber se lancera automatiquement après Steam." + "STEAM_LAUNCHING": "Beat Saber se lancera automatiquement après Steam.", + "SKIPPING_STEAM_LAUNCH": "J'espère que vous savez ce que vous faites :)" } }, "errors": { diff --git a/assets/jsons/translations/ja.json b/assets/jsons/translations/ja.json index c74d68fc..50b5d7b0 100644 --- a/assets/jsons/translations/ja.json +++ b/assets/jsons/translations/ja.json @@ -41,7 +41,9 @@ "advanced-launch": { "button": "高度な起動", "placeholder": "追加引数 例:--revert; --nowait" - } + }, + "skipvr": "SteamVRをスキップ", + "skipvr-description": "Beat Saberと一緒にSteamVRが自動的に開くのを防ぎます。SteamVRが干渉する可能性のあるWiVRnやMonadoなど、別のVRランタイムを使用している場合は有効にしてください。" }, "maps": { "search-bar": { @@ -427,11 +429,13 @@ "success": { "titles": { "BS_LAUNCHING": "起動中...🚀", - "STEAM_LAUNCHING": "Steamの起動を確認しました!" + "STEAM_LAUNCHING": "Steamの起動を確認しました!", + "SKIPPING_STEAM_LAUNCH": "Steamの起動をスキップ" }, "msg": { "BS_LAUNCHING": "ウォームアップを忘れずに 😉", - "STEAM_LAUNCHING": "Beat SaberはSteamの起動後に自動的に起動します。" + "STEAM_LAUNCHING": "Beat SaberはSteamの起動後に自動的に起動します。", + "SKIPPING_STEAM_LAUNCH": "あなたが何をしているのか分かっていることを願っています :)" } }, "errors": { diff --git a/assets/jsons/translations/ko.json b/assets/jsons/translations/ko.json index 7940f85e..91cf7efb 100644 --- a/assets/jsons/translations/ko.json +++ b/assets/jsons/translations/ko.json @@ -41,7 +41,9 @@ "advanced-launch": { "button": "고급 실행", "placeholder": "추가 인수 예: --revert; --nowait" - } + }, + "skipvr": "Steam 실행 건너뛰기", + "skipvr-description": "Beat Saber와 함께 SteamVR이 자동으로 열리는 것을 방지합니다. SteamVR이 간섭할 수 있는 WiVRn 또는 Monado와 같은 다른 VR 런타임을 사용하는 경우 활성화하세요." }, "maps": { "search-bar": { @@ -427,11 +429,13 @@ "success": { "titles": { "BS_LAUNCHING": "실행 중...🚀", - "STEAM_LAUNCHING": "Steam 실행 확인 완료!" + "STEAM_LAUNCHING": "Steam 실행 확인 완료!", + "SKIPPING_STEAM_LAUNCH": "Steam 실행 건너뛰기" }, "msg": { "BS_LAUNCHING": "워밍업을 잊지 마세요 😉", - "STEAM_LAUNCHING": "Beat Saber는 Steam 실행 후 자동으로 시작됩니다." + "STEAM_LAUNCHING": "Beat Saber는 Steam 실행 후 자동으로 시작됩니다.", + "SKIPPING_STEAM_LAUNCH": "신이 무엇을 하고 있는지 알고 있기를 바랍니다 :)" } }, "errors": { diff --git a/assets/jsons/translations/ru.json b/assets/jsons/translations/ru.json index 14b62d0b..1e8a8629 100644 --- a/assets/jsons/translations/ru.json +++ b/assets/jsons/translations/ru.json @@ -41,7 +41,9 @@ "advanced-launch": { "button": "Расширенный запуск", "placeholder": "Параметры запуска, например: --revert; --nowait" - } + }, + "skipvr": "Пропустить SteamVR", + "skipvr-description": "Предотвращает автоматическое открытие SteamVR с Beat Saber, включите, если вы используете другую VR-среду, такую как WiVRn или Monado, с которой SteamVR может мешать." }, "maps": { "search-bar": { @@ -427,11 +429,13 @@ "success": { "titles": { "BS_LAUNCHING": "Запуск...🚀", - "STEAM_LAUNCHING": "Steam запускается!" + "STEAM_LAUNCHING": "Steam запускается!", + "SKIPPING_STEAM_LAUNCH": "Пропуск запуска Steam" }, "msg": { "BS_LAUNCHING": "Не забудьте разогреться 😉", - "STEAM_LAUNCHING": "Beat Saber запустится сам после Steam." + "STEAM_LAUNCHING": "Beat Saber запустится сам после Steam.", + "SKIPPING_STEAM_LAUNCH": "Надеюсь, вы знаете, что делаете :)" } }, "errors": { diff --git a/assets/jsons/translations/zh-tw.json b/assets/jsons/translations/zh-tw.json index 1ae45a3f..00aa4e46 100644 --- a/assets/jsons/translations/zh-tw.json +++ b/assets/jsons/translations/zh-tw.json @@ -41,7 +41,9 @@ "advanced-launch": { "button": "高級啟動", "placeholder": "額外啟動參數,例如: --revert; --nowait" - } + }, + "skipvr": "跳過 SteamVR", + "skipvr-description": "防止 SteamVR 與 Beat Saber 自動打開,如果您使用的是其他 VR 執行時,如 WiVRn 或 Monado,SteamVR 可能會干擾,請啟用此選項。" }, "maps": { "search-bar": { @@ -427,11 +429,13 @@ "success": { "titles": { "BS_LAUNCHING": "啟動中...🚀", - "STEAM_LAUNCHING": "Steam 正在啟動!" + "STEAM_LAUNCHING": "Steam 正在啟動!", + "SKIPPING_STEAM_LAUNCH": "跳過 Steam 啟動" }, "msg": { "BS_LAUNCHING": "別忘了熱身哦 😉", - "STEAM_LAUNCHING": "Beat Saber 會在 Steam 啟動後自動啟動。" + "STEAM_LAUNCHING": "Beat Saber 會在 Steam 啟動後自動啟動。", + "SKIPPING_STEAM_LAUNCH": "希望你知道自己在做什麼 :)" } }, "errors": { diff --git a/assets/jsons/translations/zh.json b/assets/jsons/translations/zh.json index 96870dad..aca75363 100644 --- a/assets/jsons/translations/zh.json +++ b/assets/jsons/translations/zh.json @@ -41,7 +41,9 @@ "advanced-launch": { "button": "高级启动", "placeholder": "额外启动参数,例如: --revert; --nowait" - } + }, + "skipvr": "跳过 SteamVR", + "skipvr-description": "防止 SteamVR 与 Beat Saber 自动打开,如果您使用的是其他 VR 运行时,如 WiVRn 或 Monado,SteamVR 可能会干扰,请启用此选项。" }, "maps": { "search-bar": { @@ -427,11 +429,13 @@ "success": { "titles": { "BS_LAUNCHING": "启动中...🚀", - "STEAM_LAUNCHING": "Steam 正在启动!" + "STEAM_LAUNCHING": "Steam 正在启动!", + "SKIPPING_STEAM_LAUNCH": "跳过 Steam 启动" }, "msg": { "BS_LAUNCHING": "别忘了热身哦 😉", - "STEAM_LAUNCHING": "Beat Saber 会在 Steam 启动后自动启动。" + "STEAM_LAUNCHING": "Beat Saber 会在 Steam 启动后自动启动。", + "SKIPPING_STEAM_LAUNCH": "希望你知道自己在做什么 :)" } }, "errors": { diff --git a/src/main/services/bs-launcher/abstract-launcher.service.ts b/src/main/services/bs-launcher/abstract-launcher.service.ts index 5382ce99..d0fdd047 100644 --- a/src/main/services/bs-launcher/abstract-launcher.service.ts +++ b/src/main/services/bs-launcher/abstract-launcher.service.ts @@ -29,6 +29,9 @@ export abstract class AbstractLauncherService { if (launchOptions.additionalArgs) { launchArgs.push(...launchOptions.additionalArgs); } + if (launchOptions.launchVR) { + launchArgs.push(...launchOptions.launchVR); + } return Array.from(new Set(launchArgs).values()); } diff --git a/src/main/services/bs-launcher/bs-launcher.service.ts b/src/main/services/bs-launcher/bs-launcher.service.ts index 7cda217d..f8da8c7c 100644 --- a/src/main/services/bs-launcher/bs-launcher.service.ts +++ b/src/main/services/bs-launcher/bs-launcher.service.ts @@ -105,7 +105,8 @@ export class BSLauncherService { oculus: params.oculusMode === "true", desktop: params.desktopMode === "true", debug: params.debug === "true", - additionalArgs: params.additionalArgs + additionalArgs: params.additionalArgs, + skipVR: params.skipVR === "true", }; return res; @@ -123,6 +124,7 @@ export class BSLauncherService { if(launchOptions.desktop){ res.desktopMode = "true"; } if(launchOptions.debug){ res.debug = "true"; } if(launchOptions.additionalArgs){ res.additionalArgs = launchOptions.additionalArgs; } + if(launchOptions.skipVR){ res.skipVR = "true"; } return res; } @@ -239,6 +241,7 @@ type ShortcutParams = { desktopMode?: string; debug?: string; additionalArgs?: string[]; + skipVR?: string; version: string; versionName?: string; versionIno?: string; diff --git a/src/main/services/bs-launcher/steam-launcher.service.ts b/src/main/services/bs-launcher/steam-launcher.service.ts index 5154d2e2..5cf21a31 100644 --- a/src/main/services/bs-launcher/steam-launcher.service.ts +++ b/src/main/services/bs-launcher/steam-launcher.service.ts @@ -77,8 +77,12 @@ export class SteamLauncherService extends AbstractLauncherService implements Sto throw CustomError.fromError(new Error(`Path not exist : ${exePath}`), BSLaunchError.BS_NOT_FOUND); } + //const staticConfigService = StaticConfigurationService.getInstance(); + //const skipVR = await staticConfigService.get("skipVR"); + const skipVR: boolean = launchOptions.skipVR ?? false; + // Open Steam if not running - if(!(await this.steam.steamRunning())){ + if(!skipVR && !(await this.steam.steamRunning())){ obs.next({type: BSLaunchEvent.STEAM_LAUNCHING}); await this.steam.openSteam().then(() => { @@ -88,6 +92,9 @@ export class SteamLauncherService extends AbstractLauncherService implements Sto obs.next({type: BSLaunchWarning.UNABLE_TO_LAUNCH_STEAM}); }); } + else if (!launchOptions.desktop) { + obs.next({ type: BSLaunchEvent.SKIPPING_STEAM_LAUNCH}); + } // Backup SteamVR when desktop mode is enabled if(launchOptions.desktop){ 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 4b204c82..2d739b45 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 @@ -35,7 +35,7 @@ export function BsVersionItem(props: { version: BSVersion }) { useOnUpdate(() => { const subs: Subscription[] = [] - + subs.push(bsDownloader.downloadingVersion$.pipe(map(download => equal(download, props.version)), distinctUntilChanged()).subscribe(isDownloading => { setIsDownloading(() => isDownloading); })); @@ -63,6 +63,7 @@ export function BsVersionItem(props: { version: BSVersion }) { oculus: !!configService.get(LaunchMods.OCULUS_MOD), desktop: !!configService.get(LaunchMods.DESKTOP_MOD), debug: !!configService.get(LaunchMods.DEBUG_MOD), + skipVR: !!configService.get(LaunchMods.SKIPVR_MOD), }); return lastValueFrom(launch$).catch(() => {}); }; diff --git a/src/renderer/components/svgs/bsm-icon.component.tsx b/src/renderer/components/svgs/bsm-icon.component.tsx index 829563e1..d6b420d3 100644 --- a/src/renderer/components/svgs/bsm-icon.component.tsx +++ b/src/renderer/components/svgs/bsm-icon.component.tsx @@ -67,7 +67,7 @@ import { BrowseIcon } from "./icons/browse-icon.component"; import { AddFileIcon } from "./icons/add-file-icon.component"; -export type BsmIconType = SongDetailDiffCharactertistic | ("settings" | "trash" | "favorite" | "folder" | "bsNote" | "check" | "three-dots" | "twitch" | "eye" | "play" | "checkCircleIcon" | "discord" | "info" | "eye-cross" | "terminal" | "desktop" | "oculus" | "add" | "cross" | "task" | "github" | "close" | "thumbUpFill" | "timerFill" | "pause" | "twitter" | "sync" | "chevron-top" | "copy" | "steam" | "edit" | "export" | "patreon" | "search" | "bsMapDifficulty" | "link" | "unlink" | "download" | "filter" | "mee6" | "volume-up" | "volume-off" | "volume-down" | "shortcut" | "backup-restore" | "web-site" | "clean" | "browse" | "add-file" | "fr-FR-flag" | "es-ES-flag" | "en-US-flag" | "en-EN-flag" | "de-DE-flag" | "ru-RU-flag" | "zh-CN-flag" | "zh-TW-flag" | "ja-JP-flag" | "ko-KR-flag"); +export type BsmIconType = SongDetailDiffCharactertistic | ("settings" | "trash" | "favorite" | "folder" | "bsNote" | "check" | "three-dots" | "twitch" | "eye" | "play" | "checkCircleIcon" | "discord" | "info" | "eye-cross" | "terminal" | "desktop" | "oculus" | "add" | "cross" | "task" | "github" | "close" | "thumbUpFill" | "timerFill" | "pause" | "twitter" | "sync" | "chevron-top" | "copy" | "steam" | "edit" | "export" | "patreon" | "search" | "bsMapDifficulty" | "link" | "unlink" | "download" | "filter" | "mee6" | "volume-up" | "volume-off" | "volume-down" | "shortcut" | "backup-restore" | "web-site" | "clean" | "browse" | "add-file" | "fr-FR-flag" | "es-ES-flag" | "en-US-flag" | "en-EN-flag" | "de-DE-flag" | "ru-RU-flag" | "zh-CN-flag" | "zh-TW-flag" | "ja-JP-flag" | "ko-KR-flag" | "null" ); export const BsmIcon = memo(({ className, icon, style }: { className?: string; icon: BsmIconType; style?: CSSProperties }) => { // TODO : Very ugly very messy, need to find a better way to do this @@ -275,7 +275,9 @@ export const BsmIcon = memo(({ className, icon, style }: { className?: string; i if(icon === "add-file") { return ; } - + if(icon === "null") { + return null; + } return ; diff --git a/src/renderer/components/version-viewer/slides/launch/launch-mod-toogle.component.tsx b/src/renderer/components/version-viewer/slides/launch/launch-mod-toogle.component.tsx index 48cc5d72..990c0083 100644 --- a/src/renderer/components/version-viewer/slides/launch/launch-mod-toogle.component.tsx +++ b/src/renderer/components/version-viewer/slides/launch/launch-mod-toogle.component.tsx @@ -18,11 +18,11 @@ export function LaunchModToogle({ onClick, active, text, icon, infoText }: Props
onClick(!active)}>
- + {t(text)} {infoText && ( -
+
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 3f64b672..0a4c752c 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 @@ -30,6 +30,7 @@ export function LaunchSlide({ version }: Props) { const [debugMode, setDebugMode] = useState(!!configService.get(LaunchMods.DEBUG_MOD)); const [advancedLaunch, setAdvancedLaunch] = useState(false); const [additionalArgsString, setAdditionalArgsString] = useState(configService.get("additionnal-args") || ""); + const [skipVRMode, setSkipVRMode] = useState(!!configService.get(LaunchMods.SKIPVR_MOD)); const versionDownloading = useObservable(() => bsDownloader.downloadingVersion$); const versionRunning = useObservable(() => bsLauncherService.versionRunning$); @@ -51,6 +52,8 @@ export function LaunchSlide({ version }: Props) { setOculusMode(value); } else if (mode === LaunchMods.DESKTOP_MOD) { setDesktopMode(value); + } else if (mode === LaunchMods.SKIPVR_MOD) { + setSkipVRMode(value); } configService.set(mode, value); }; @@ -66,6 +69,7 @@ export function LaunchSlide({ version }: Props) { desktop: desktopMode, debug: debugMode, additionalArgs: advancedLaunch ? additionalArgs : [], + skipVR: skipVRMode, }); return lastValueFrom(launch$).catch(() => {}); @@ -98,6 +102,9 @@ export function LaunchSlide({ version }: Props) {
+
+ {advancedLaunch && !(version.oculus || version.metadata?.store === BsStore.OCULUS) && setMode(LaunchMods.SKIPVR_MOD, !skipVRMode)} active={skipVRMode} text="pages.version-viewer.launch-mods.skipvr" />} +
("additionnal-args") || "").split(";").map(arg => arg.trim()).filter(arg => arg.length > 0) + additionalArgs: (this.config.get("additionnal-args") || "").split(";").map(arg => arg.trim()).filter(arg => arg.length > 0), + skipVR: this.config.get(LaunchMods.SKIPVR_MOD), } } @@ -128,4 +129,5 @@ export enum LaunchMods { OCULUS_MOD = "LAUNCH_OCULUS_MOD", DESKTOP_MOD = "LAUNCH_DESKTOP_MOD", DEBUG_MOD = "LAUNCH_DEBUG_MOD", + SKIPVR_MOD = "LAUNCH_SKIPVR_MOD", } diff --git a/src/shared/models/bs-launch/launch-event.model.ts b/src/shared/models/bs-launch/launch-event.model.ts index 8ee1a454..b744d66d 100644 --- a/src/shared/models/bs-launch/launch-event.model.ts +++ b/src/shared/models/bs-launch/launch-event.model.ts @@ -23,6 +23,7 @@ export enum BSLaunchError{ export enum BSLaunchEvent{ STEAM_LAUNCHING = "STEAM_LAUNCHING", STEAM_LAUNCHED = "STEAM_LAUNCHED", + SKIPPING_STEAM_LAUNCH = "SKIPPING_STEAM_LAUNCH", BS_LAUNCHING = "BS_LAUNCHING", } diff --git a/src/shared/models/bs-launch/launch-option.interface.ts b/src/shared/models/bs-launch/launch-option.interface.ts index 21056c19..f9ab218b 100644 --- a/src/shared/models/bs-launch/launch-option.interface.ts +++ b/src/shared/models/bs-launch/launch-option.interface.ts @@ -7,4 +7,5 @@ export interface LaunchOption { debug?: boolean, additionalArgs?: string[], admin?: boolean, + skipVR?: boolean }