advancement on onclick install model AND fix circual dependency

This commit is contained in:
MathieuG-P
2022-12-25 01:04:36 +01:00
parent 2aed523480
commit c674fce0c0
7 changed files with 94 additions and 7 deletions
+16
View File
@@ -0,0 +1,16 @@
import { ipcMain } from "electron";
import { UtilsService } from "../services/utils.service";
import { IpcRequest } from "shared/models/ipc";
import { MSModel } from "shared/models/model-saber/model-saber.model";
import { LocalModelsManagerService } from "../services/additional-content/local-models-manager.service";
ipcMain.on("one-click-install-model", async (event, request: IpcRequest<MSModel>) => {
const utils = UtilsService.getInstance();
const models = LocalModelsManagerService.getInstance();
models.oneClickDownloadModel(request.args).then(() => {
utils.ipcSend(request.responceChannel, {success: true});
}).catch(e => {
utils.ipcSend(request.responceChannel, {success: false, error: e});
})
});
-3
View File
@@ -18,11 +18,8 @@ import { DeepLinkService } from './services/deep-link.service';
import { AppWindow } from 'shared/models/window-manager/app-window.model';
import { LocalMapsManagerService } from './services/additional-content/local-maps-manager.service';
import { LocalPlaylistsManagerService } from './services/additional-content/local-playlists-manager.service';
import { ModelSaberService } from './services/thrid-party/model-saber/model-saber.service';
import { LocalModelsManagerService } from './services/additional-content/local-models-manager.service';
export const PRELOAD_PATH = app.isPackaged ? path.join(__dirname, 'preload.js') : path.join(__dirname, '../../.erb/dll/preload.js')
const isDebug = process.env.NODE_ENV === 'development' || process.env.DEBUG_PROD === 'true';
log.transports.file.level = 'info';
@@ -4,6 +4,8 @@ import { ipcMain } from "electron";
import { IpcRequest } from "shared/models/ipc";
import { UtilsService } from "../utils.service";
import { WindowManagerService } from "../window-manager.service";
import { MSModel, MSModelType } from "shared/models/model-saber/model-saber.model";
import { BSVersion } from "shared/bs-version.interface";
export class LocalModelsManagerService {
@@ -49,6 +51,16 @@ export class LocalModelsManagerService {
}
private getModelFolderPath(type: MSModelType, version?: BSVersion): Promise<string>{
// TODO : return path of model type of version
}
public downloadModel(model: MSModel, version: BSVersion): Promise<string>{
// TODO : Download model to the version
}
public async oneClickDownloadModel(model: MSModel): Promise<void>{
}
}
+4 -2
View File
@@ -2,12 +2,14 @@ import { app, BrowserWindow, BrowserWindowConstructorOptions } from "electron";
import { resolveHtmlPath } from "../util";
import { UtilsService } from "./utils.service";
import { AppWindow } from "shared/models/window-manager/app-window.model";
import { PRELOAD_PATH } from "../main";
import path from "path";
export class WindowManagerService{
private static instance: WindowManagerService;
private readonly PRELOAD_PATH = app.isPackaged ? path.join(__dirname, 'preload.js') : path.join(__dirname, '../../../.erb/dll/preload.js')
private readonly utilsService: UtilsService = UtilsService.getInstance();
private readonly appWindowsOptions: Record<AppWindow, BrowserWindowConstructorOptions> = {
@@ -23,7 +25,7 @@ export class WindowManagerService{
show: false,
frame: false,
titleBarOverlay: false,
webPreferences: { preload: PRELOAD_PATH, webSecurity: false }
webPreferences: { preload: this.PRELOAD_PATH, webSecurity: false }
}
private readonly windows: Map<AppWindow, BrowserWindow> = new Map<AppWindow, BrowserWindow>();
@@ -15,7 +15,7 @@ export const BsmImage = forwardRef(({className, image, errorImage, placeholder,
const [isLoaded, setIsLoaded] = useState(false);
image = image ? image : (placeholder||errorImage);
image = image || (placeholder||errorImage);
const styles: CSSProperties = (() => {
return {
@@ -0,0 +1,39 @@
import { timer } from "rxjs";
import { MSModel } from "shared/models/model-saber/model-saber.model";
import { IpcService } from "./ipc.service";
import { ProgressBarService } from "./progress-bar.service";
export class ModelDownloaderService {
private static instance: ModelDownloaderService;
public static getInstance(): ModelDownloaderService{
if(!ModelDownloaderService.instance){ ModelDownloaderService.instance = new ModelDownloaderService(); }
return ModelDownloaderService.instance;
}
private readonly ipc: IpcService;
private readonly progress: ProgressBarService;
private constructor(){
this.ipc = IpcService.getInstance();
this.progress = ProgressBarService.getInstance();
}
public async oneClickInstallModel(model: MSModel): Promise<boolean>{
this.progress.showFake(0.07);
const res = await this.ipc.send("one-click-install-model", {args: model});
this.progress.complete();
await timer(500).toPromise();
this.progress.hide(true);
return res.success;
}
}
@@ -1,17 +1,26 @@
import { useEffect, useState } from "react";
import { BsmProgressBar } from "renderer/components/progress-bar/bsm-progress-bar.component";
import { BsmImage } from "renderer/components/shared/bsm-image.component";
import TitleBar from "renderer/components/title-bar/title-bar.component";
import { IpcService } from "renderer/services/ipc.service";
import { ProgressBarService } from "renderer/services/progress-bar.service";
import { ThemeService } from "renderer/services/theme.service";
import { ModelSaberService } from "renderer/services/thrird-partys/model-saber.service";
import { MSModel } from "shared/models/model-saber/model-saber.model";
import defaultImage from '../../../../assets/images/default-version-img.jpg'
export default function OneClickDownloadModel() {
const ipc = IpcService.getInstance();
const themeService = ThemeService.getInstance();
const modelSaber = ModelSaberService.getInstance();
const progress = ProgressBarService.getInstance();
const [model, setModel] = useState<MSModel>(null);
const cover = model ? model.thumbnail : null;
const title = model ? model.name : null;
useEffect(() => {
const sub = themeService.theme$.subscribe(() => {
@@ -29,10 +38,14 @@ export default function OneClickDownloadModel() {
setModel(() => model);
progress.open();
// Download model
});
promise.finally(() => console.log("close"));
return () => {
sub.unsubscribe();
}
@@ -40,6 +53,14 @@ export default function OneClickDownloadModel() {
return (
<div>OneClickDownloadModel</div>
<div className="relative w-screen h-screen overflow-hidden">
{cover && <BsmImage className="absolute top-0 left-0 w-full h-full object-cover" image={cover}/>}
<div className="w-full h-full backdrop-brightness-50 backdrop-blur-md flex flex-col justify-start items-center gap-10">
<TitleBar template="oneclick-download-map.html"/>
<BsmImage className="aspect-[1/1] w-1/2 object-cover rounded-md shadow-black shadow-lg" placeholder={defaultImage} image={cover} errorImage={defaultImage}/>
<h1 className="overflow-hidden font-bold italic text-xl text-gray-200 tracking-wide w-full text-center whitespace-nowrap text-ellipsis px-2">{title}</h1>
</div>
<BsmProgressBar/>
</div>
)
}