mirror of
https://github.com/Zagrios/bs-manager.git
synced 2026-07-03 14:08:25 +02:00
listage des version BS dispo, le path de BS steam est mtn bien détécté
This commit is contained in:
@@ -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}});
|
||||
|
||||
|
||||
})
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
@@ -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
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -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%' }
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user