listage des version BS dispo, le path de BS steam est mtn bien détécté

This commit is contained in:
MathieuG-P
2022-05-16 22:09:22 +02:00
parent ccb37b4358
commit 2c7901e8b3
15 changed files with 111 additions and 41 deletions
+1 -3
View File
@@ -30,9 +30,7 @@ ipcMain.on('test-launch', async () => {
ipcMain.on('bs-launch.steam', async (event, args) => {
const steamService = SteamService.getInstance();
const beatSaberSteamFolder = path.join(await steamService.getSteamGamesFolder(), "Beat Saber");
const beatSaberSteamFolder = await steamService.getGameFolder(BS_APP_ID, "Beat Saber");
const beatSaberSteamExe = path.join(beatSaberSteamFolder, BS_EXECUTABLE);
const spawnProcess = spawn(`\"${beatSaberSteamExe}\"`, [], {shell: true, cwd: beatSaberSteamFolder, env: {...process.env, "SteamAppId": BS_APP_ID}});
})
+8 -4
View File
@@ -30,11 +30,15 @@ export class BSInstallerService{
public async getInstalledBsVersion(): Promise<BSVersion[]>{
const versions: BSVersion[] = [];
if(this.steamService.isGameInstalled(BS_APP_ID)){
const steamBsFolder = path.join(await this.steamService.getSteamGamesFolder(), "Beat Saber");
console.log("aaa");
const steamBsFolder = await this.steamService.getGameFolder(BS_APP_ID, "Beat Saber")
console.log(steamBsFolder);
if(steamBsFolder && this.utils.pathExist(steamBsFolder)){
const steamBsVersion = await this.bsVersionService.getVersionOfBSFolder(steamBsFolder);
const steamVersionDetails = this.bsVersionService.getVersionDetailFromVersionNumber(steamBsVersion);
versions.push(steamVersionDetails ? {...steamVersionDetails, steam: true} : {BSVersion: steamBsVersion, steam: true});
if(steamBsVersion){
const steamVersionDetails = this.bsVersionService.getVersionDetailFromVersionNumber(steamBsVersion);
versions.push(steamVersionDetails ? {...steamVersionDetails, steam: true} : {BSVersion: steamBsVersion, steam: true});
}
}
if(!this.utils.folderExist(this.getBSInstallationFolder())){ return versions }
@@ -70,6 +70,7 @@ export class BSVersionManagerService{
public async getVersionOfBSFolder(bsPath: string): Promise<string>{
const versionFilePath = path.join(bsPath, 'Beat Saber_Data', 'globalgamemanagers');
console.log(versionFilePath);
if(!this.utilsService.pathExist(versionFilePath)){ return null; }
const versionsAvailable = await this.getAvailableVersions();
+7 -11
View File
@@ -37,28 +37,24 @@ export class SteamService{
return this.steamPath;
}
public async getSteamGamesFolder(): Promise<string>{
this.isGameInstalled("");
const steamFolder = await this.getSteamPath();
return path.join(steamFolder, 'steamapps', 'common');
}
public async isGameInstalled(gameId: string): Promise<boolean>{
public async getGameFolder(gameId: string, gameFolder?: string): Promise<string>{
const steamPath = await this.getSteamPath();
let libraryFolders: any = path.join(steamPath, 'steamapps', 'libraryfolders.vdf');
if(!this.utils.pathExist(libraryFolders)){ return false; }
if(!this.utils.pathExist(libraryFolders)){ console.log("null 1"); return null; }
libraryFolders = parse(await readFile(libraryFolders, {encoding: 'utf-8'}));
if(!libraryFolders.libraryfolders){ return false; }
if(!libraryFolders.libraryfolders){ return null; }
libraryFolders = libraryFolders.libraryfolders
for(const libKey in Object.keys(libraryFolders)){
console.log(libraryFolders[libKey]);
if(!libraryFolders[libKey] || !libraryFolders[libKey]["apps"]){ continue; }
if(libraryFolders[libKey]["apps"][gameId]){ return true };
if(libraryFolders[libKey]["apps"][gameId]){ return path.join(libraryFolders[libKey]["path"], "steamapps", "common", gameFolder); };
}
return false;
console.log("null 3")
return null;
}
}
+7 -5
View File
@@ -1,10 +1,10 @@
import { NavBar } from "./components/nav-bar/nav-bar.component";
import TitleBar from "./components/title-bar/title-bar.component";
import { Routes, Route } from "react-router-dom";
import VersionsList from "./pages/versions-list.components";
import { AvailableVersionsList } from "./pages/available-versions-list.components";
import { useDispatch, useSelector } from "react-redux";
import { useEffect } from "react";
import VersionViewer from "./pages/version-viewer.component";
import { VersionViewer } from "./pages/version-viewer.component";
export default function App() {
@@ -13,23 +13,25 @@ export default function App() {
useEffect(() => {
initIpcsListener();
window.electron.ipcRenderer.sendMessage('bs-version.installed-versions');
window.electron.ipcRenderer.sendMessage('bs-version.request-versions');
}, [])
const initIpcsListener= () => {
window.electron.ipcRenderer.on('bs-version.installed-versions', versions => dispatch({type: 'INSTALLED_BS_ADD_ALL', payload: versions}));
window.electron.ipcRenderer.on('bs-version.request-versions', versions => dispatch({type: 'AVAILABLE_BS_INIT', payload: versions}));
}
return (
<div className="w-screen h-screen overflow-hidden flex dark:bg-[#202225]">
<div className="w-screen h-screen overflow-hidden flex dark:bg-[#202225] z-0">
<NavBar/>
<div className="flex flex-col grow">
<TitleBar/>
<div className="bg-[#2C2F33] rounded-tl-lg grow">
<div className="bg-[#2C2F33] relative rounded-tl-lg grow overflow-hidden">
<Routes>
<Route path={"/bs-version/:versionNumber"} element={<VersionViewer/>}/>
<Route path="*" element={<VersionsList/>}/>
<Route path="*" element={<AvailableVersionsList/>}/>
</Routes>
</div>
</div>
@@ -0,0 +1,31 @@
import { BSVersion } from "../../main/services/bs-version-manager.service"
import { useEffect, useState } from "react"
export function AvailableVersionsArray({versions}: {versions: BSVersion[]}) {
const [versionsMap, setVersionsMap] = useState(new Map<string, BSVersion[]>())
console.log(versions);
useEffect(() => {
organiseVersions()
}, [])
const organiseVersions = () => {
const newMap = new Map<string, BSVersion[]>();
versions.forEach(v => {
newMap.set(v.year, [...(newMap.has(v.year) ? newMap.get(v.year) : []), v]);
})
setVersionsMap(newMap);
}
console.log(versionsMap);
return (
<div>
{ versions.map(v => <button className="bg-gray-200 m-2">{v.BSVersion}</button>) }
</div>
)
}
@@ -7,12 +7,10 @@ import { BSVersion } from 'main/services/bs-version-manager.service';
export function NavBar() {
const { installedVersions }: {installedVersions: BSVersion[]} = useSelector((state: any) => ({...state.installedBSReducer}));
console.log(installedVersions);
const { installedVersions }: {installedVersions: BSVersion[]} = useSelector((state: any) => state.installedBSReducer);
return (
<div id='nav-bar' className='flex flex-col items-center w-fit h-full max-h-full p-2 bg-gray-200 dark:bg-[#202225]'>
<div id='nav-bar' className='z-10 flex flex-col items-center w-fit h-full max-h-full p-2 bg-gray-200 dark:bg-[#202225]'>
<div className='w-full flex items-start content-start justify-center relative mb-3'>
<div className='relative aspect-square w-16'>
<span id='logo-bottom' className='bg-blue-500 aspect-square w-16'> </span>
@@ -28,7 +28,7 @@ export default function TitleBar() {
}
return (
<header id="titlebar" className="dark:bg-[#202225] w-screen flex content-center items-center justify-start">
<header id="titlebar" className="dark:bg-[#202225] w-screen flex content-center items-center justify-start z-10">
<div id="drag-region" className='grow basis-0'>
<div id="window-title" className='pl-1'>
<span className='text-gray-100 font-bold text-sm'>BSManager</span>
+3 -3
View File
@@ -5,6 +5,6 @@
display: inline;
}
::-webkit-scrollbar-thumb {
border-radius: 20px;
}
::-webkit-scrollbar-thumb {
border-radius: 20px;
}
@@ -0,0 +1,17 @@
import { BSVersion } from "../../main/services/bs-version-manager.service";
import { useSelector } from "react-redux";
import { AvailableVersionsArray } from "renderer/components/available-versions-array.component";
export function AvailableVersionsList() {
const { availableVersions }: {availableVersions: BSVersion[]} = useSelector((state: any) => state.availableBsReducer);
console.log(availableVersions);
return (
<div>
<h1 className="w-full text-center font-bold text-gray-200 text-3xl mt-6 tracking-wider text-sh">CHOOSE BS VERSION</h1>
{availableVersions && <AvailableVersionsArray versions={availableVersions}/>}
</div>
)
}
@@ -1,7 +1,6 @@
import React from 'react'
import { useLocation } from 'react-router-dom'
export default function VersionViewer() {
export function VersionViewer() {
const {state} = useLocation();
console.log(state);
@@ -1,7 +0,0 @@
import React from 'react'
export default function VersionsList() {
return (
<div>versions-list.components</div>
)
}
@@ -0,0 +1,20 @@
import { BSVersion } from "../../../main/services/bs-version-manager.service"
import { ReducerAction } from "../store"
const INITIAL_STATE = {
availableVersions: [] as BSVersion[]
}
function availableBsReducer(state = INITIAL_STATE, action: ReducerAction<BSVersion[]>){
switch(action.type){
case 'AVAILABLE_BS_INIT': {
if(!action.payload){ return state; }
const payload = action.payload as BSVersion[];
return { ...state, availableVersions: [...state.availableVersions, ...payload] };
}
}
return state;
}
export default availableBsReducer;
+2 -1
View File
@@ -1,9 +1,10 @@
import { configureStore } from "@reduxjs/toolkit";
import installedBSReducer from './reducers/bs-versions-installed.reducer'
import availableBsReducer from './reducers/bs-versions-available.reducer'
const store = configureStore({
reducer:{
installedBSReducer,
installedBSReducer, availableBsReducer
}
});
+10
View File
@@ -4,5 +4,15 @@ module.exports = {
plugins: [require('tailwind-scrollbar-hide'), require('tailwind-scrollbar')],
variants: {
scrollbar: ['rounded']
},
theme:{
extend:{
keyframes:{
zoominimg: {
'0%, 100%': { scale: '100%' },
'100%': { scale: '200%' }
}
},
}
}
};