advence on oneclic playlist

This commit is contained in:
MathieuG-P
2022-12-20 15:57:26 +01:00
parent 58faea04a3
commit 7e10d28d28
13 changed files with 112 additions and 23 deletions
@@ -138,12 +138,12 @@ export class LocalMapsManagerService {
}
private openOneClickDownloadMapWindow(mapId: string, isHash = false): void{
this.windows.openWindow("oneclick-download-map.html");
ipcMain.once("one-click-map-info", async (event, req: IpcRequest<void>) => {
this.utils.ipcSend(req.responceChannel, {success: true, data: {id: mapId, isHash}});
});
this.windows.openWindow("oneclick-download-map.html");
}
@@ -4,9 +4,17 @@ import { Observable } from "rxjs";
import { BSVersion } from "shared/bs-version.interface";
import { BsvPlaylist, BsvPlaylistPage } from "shared/models/maps/beat-saver.model";
import { BSLocalVersionService } from "../bs-local-version.service";
import { DeepLinkService } from "../deep-link.service";
import { RequestService } from "../request.service";
import { UtilsService } from "../utils.service";
import { LocalMapsManagerService } from "./local-maps-manager.service";
import log from "electron-log"
import { isValidUrl } from "../../helpers/url.helpers";
import { ipcMain } from "electron";
import { WindowManagerService } from "../window-manager.service";
import { IpcRequest } from "shared/models/ipc";
import { BPList } from "shared/models/playlists/playlist.interface";
import { readFileSync } from "fs";
export class LocalPlaylistsManagerService {
@@ -25,19 +33,40 @@ export class LocalPlaylistsManagerService {
private readonly versions: BSLocalVersionService;
private readonly maps: LocalMapsManagerService;
public readonly utils: UtilsService;
public readonly request: RequestService;
private readonly utils: UtilsService;
private readonly request: RequestService;
private readonly deepLink: DeepLinkService;
private readonly windows: WindowManagerService;
private constructor(){
this.maps = LocalMapsManagerService.getInstance();
this.versions = BSLocalVersionService.getInstance();
this.utils = UtilsService.getInstance();
this.request = RequestService.getInstance();
this.deepLink = DeepLinkService.getInstance();
this.windows = WindowManagerService.getInstance();
this.deepLink.addLinkOpenedListener(this.DEEP_LINKS.BeatSaver, link => {
log.info("DEEP-LINK RECEIVED FROM", this.DEEP_LINKS.BeatSaver, link);
const url = new URL(link);
const bplistUrl = url.host === "playlist" ? url.pathname.replace("/", "") : "";
const playlistId = this.getPlaylistIdFromDownloadUrl(bplistUrl);
this.openOneClickDownloadPlaylistWindow(playlistId);
});
}
private getPlaylistIdFromDownloadUrl(url: string): string{
if(!isValidUrl(url)){ return ""; }
const splited = url.split("/")
const idIndex = splited.indexOf("id");
if(idIndex < 0){ return ""; }
return splited[idIndex + 1];
}
@@ -52,6 +81,26 @@ export class LocalPlaylistsManagerService {
}
private async readPlaylistFile(path: string): Promise<BPList>{
if(!this.utils.pathExist(path)){ return null; }
const content = readFileSync(path).toJSON();
// TODO
}
private openOneClickDownloadPlaylistWindow(playlistId: string): void{
ipcMain.once("one-click-playlist-info", async (event, req: IpcRequest<void>) => {
this.utils.ipcSend(req.responceChannel, {success: true, data: playlistId});
});
this.windows.openWindow("oneclick-download-playlist.html");
}
public downloadPlaylist(playlistPage: BsvPlaylistPage, version: BSVersion): Observable<string[]>{
const res = new BehaviorSubject<string[]>([]);
+2 -1
View File
@@ -13,7 +13,8 @@ export class WindowManagerService{
private readonly appWindowsOptions: Record<AppWindow, BrowserWindowConstructorOptions> = {
"launcher.html": {width: 380, height: 500, minWidth: 380, minHeight: 500, resizable: false},
"index.html": {width: 1080, height: 720, minWidth: 900, minHeight: 500},
"oneclick-download-map.html": {width: 350, height: 400, minWidth: 350, minHeight: 400, resizable: false}
"oneclick-download-map.html": {width: 350, height: 400, minWidth: 350, minHeight: 400, resizable: false},
"oneclick-download-playlist.html": {width: 350, height: 400, minWidth: 350, minHeight: 400, resizable: false},
}
private readonly baseWindowOption: BrowserWindowConstructorOptions = {