use the new ipcService

This commit is contained in:
MathieuG-P
2022-07-17 16:38:18 +02:00
parent 8a714be24a
commit e98ae7c4dd
2 changed files with 53 additions and 40 deletions
@@ -1,62 +1,66 @@
import { BSVersion } from "../../main/services/bs-version-manager.service";
import { BehaviorSubject } from "rxjs";
import { IpcService } from "./ipc.service";
export class BSVersionManagerService {
private static instance: BSVersionManagerService;
private static instance: BSVersionManagerService;
public readonly installedVersions$: BehaviorSubject<BSVersion[]> = new BehaviorSubject([]);
public readonly availableVersions$: BehaviorSubject<BSVersion[]> = new BehaviorSubject([]);
public readonly ipcService: IpcService;
public readonly installedVersions$: BehaviorSubject<BSVersion[]> = new BehaviorSubject([]);
public readonly availableVersions$: BehaviorSubject<BSVersion[]> = new BehaviorSubject([]);
private constructor(){
this.ipcService = IpcService.getInstance();
private constructor(){
window.electron.ipcRenderer.on('bs-version.request-versions', (versions: BSVersion[]) => {
this.availableVersions$.next(versions);
});
window.electron.ipcRenderer.on('bs-version.installed-versions', (versions: BSVersion[]) => {
this.setInstalledVersions(versions);
});
});
this.askAvailableVersions();
this.askInstalledVersions();
}
public static getInstance(){
if(!BSVersionManagerService.instance){ BSVersionManagerService.instance = new BSVersionManagerService(); }
return BSVersionManagerService.instance;
}
public setInstalledVersions(versions: BSVersion[]){
const sorted: BSVersion[] = versions.sort((a, b) => +b.ReleaseDate - +a.ReleaseDate)
const steamIndex = sorted.findIndex(v => v.steam);
if(steamIndex > 0){
[sorted[0], sorted[steamIndex]] = [sorted[steamIndex], sorted[0]];
}
const cleanedSort = [...new Map(sorted.map(version => [`${version.BSVersion}-${version.steam}`, version])).values()]
this.installedVersions$.next(cleanedSort);
}
public static getInstance(){
if(!BSVersionManagerService.instance){ BSVersionManagerService.instance = new BSVersionManagerService(); }
return BSVersionManagerService.instance;
}
public getInstalledVersions(): BSVersion[]{
return this.installedVersions$.value;
}
public setInstalledVersions(versions: BSVersion[]){
const sorted: BSVersion[] = versions.sort((a, b) => +b.ReleaseDate - +a.ReleaseDate)
const steamIndex = sorted.findIndex(v => v.steam);
if(steamIndex > 0){
[sorted[0], sorted[steamIndex]] = [sorted[steamIndex], sorted[0]];
}
const cleanedSort = [...new Map(sorted.map(version => [`${version.BSVersion}-${version.steam}`, version])).values()]
this.installedVersions$.next(cleanedSort);
}
public askAvailableVersions(): void{
this.ipcService.send<BSVersion[]>("bs-version.request-versions").then(res => this.availableVersions$.next(res.data));
}
public getInstalledVersions(): BSVersion[]{
return this.installedVersions$.value;
}
public askInstalledVersions(): void{
this.ipcService.send<BSVersion[]>("bs-version.installed-versions").then(res => this.setInstalledVersions(res.data));
}
public askAvailableVersions(): void{
window.electron.ipcRenderer.sendMessage("bs-version.request-versions", null);
}
public askInstalledVersions(): void{
window.electron.ipcRenderer.sendMessage("bs-version.installed-versions", null);
}
public getAvailableYears(): string[]{
public getAvailableYears(): string[]{
return [...new Set(this.availableVersions$.value.map(v => v.year))].sort((a, b) => b.localeCompare(a));
}
}
public isVersionInstalled(version: BSVersion): boolean{
public isVersionInstalled(version: BSVersion): boolean{
return !!this.getInstalledVersions().find(v => v.BSVersion === version.BSVersion && v.steam === version.steam);
}
}
public getAvaibleVersionsOfYear(year: string): BSVersion[]{
public getAvaibleVersionsOfYear(year: string): BSVersion[]{
return this.availableVersions$.value.filter(v => v.year === year).sort((a, b) => +b.ReleaseDate - +a.ReleaseDate);
}
}
}