From 698eab012ff3e5416e3b43aeffdf0a70d7d06a86 Mon Sep 17 00:00:00 2001 From: MathieuG-P Date: Fri, 23 Dec 2022 21:52:34 +0100 Subject: [PATCH] we can now enable deep links for playlists --- src/main/ipcs/bs-playlist-ipcs.ts | 45 +++++++++++++++++++ .../local-playlists-manager.service.ts | 16 +++++-- .../pages/settings-page.component.tsx | 10 ++++- .../services/playlists-manager.service.ts | 36 +++++++++++++++ 4 files changed, 103 insertions(+), 4 deletions(-) create mode 100644 src/renderer/services/playlists-manager.service.ts diff --git a/src/main/ipcs/bs-playlist-ipcs.ts b/src/main/ipcs/bs-playlist-ipcs.ts index c146c0be..82f1ca3b 100644 --- a/src/main/ipcs/bs-playlist-ipcs.ts +++ b/src/main/ipcs/bs-playlist-ipcs.ts @@ -14,4 +14,49 @@ ipcMain.on("one-click-install-playlist", async (event, request: IpcRequest) => { + + const maps = LocalPlaylistsManagerService.getInstance(); + const utils = UtilsService.getInstance(); + + try{ + const res = maps.enableDeepLinks(); + utils.ipcSend(request.responceChannel, {success: true, data: res}); + } + catch(e){ + utils.ipcSend(request.responceChannel, {success: false}); + } + +}); + +ipcMain.on("unregister-playlists-deep-link", async (event, request: IpcRequest) => { + + const maps = LocalPlaylistsManagerService.getInstance(); + const utils = UtilsService.getInstance(); + + try{ + const res = maps.disableDeepLinks(); + utils.ipcSend(request.responceChannel, {success: true, data: res}); + } + catch(e){ + utils.ipcSend(request.responceChannel, {success: false}); + } + +}); + +ipcMain.on("is-playlists-deep-links-enabled", async (event, request: IpcRequest) => { + + const maps = LocalPlaylistsManagerService.getInstance(); + const utils = UtilsService.getInstance(); + + try{ + const res = maps.isDeepLinksEnabled(); + utils.ipcSend(request.responceChannel, {success: true, data: res}); + } + catch(e){ + utils.ipcSend(request.responceChannel, {success: false}); + } + }); \ No newline at end of file diff --git a/src/main/services/additional-content/local-playlists-manager.service.ts b/src/main/services/additional-content/local-playlists-manager.service.ts index cd3be9ed..3955efb5 100644 --- a/src/main/services/additional-content/local-playlists-manager.service.ts +++ b/src/main/services/additional-content/local-playlists-manager.service.ts @@ -15,7 +15,6 @@ import { BPList, DownloadPlaylistProgression } from "shared/models/playlists/pla import { copyFileSync, readFileSync } from "fs"; import { BeatSaverService } from "../thrid-party/beat-saver/beat-saver.service"; import { copySync } from "fs-extra"; -import { timer } from "rxjs"; export class LocalPlaylistsManagerService { @@ -116,8 +115,7 @@ export class LocalPlaylistsManagerService { private openOneClickDownloadPlaylistWindow(downloadUrl: string): void{ - // TODO make once - ipcMain.on("one-click-playlist-info", async (event, req: IpcRequest) => { + ipcMain.once("one-click-playlist-info", async (event, req: IpcRequest) => { this.utils.ipcSend(req.responceChannel, {success: true, data: {bpListUrl: downloadUrl, id: this.getPlaylistIdFromDownloadUrl(downloadUrl)}}); }); @@ -213,4 +211,16 @@ export class LocalPlaylistsManagerService { } + public enableDeepLinks(): boolean{ + return Array.from(Object.values(this.DEEP_LINKS)).every(link => this.deepLink.registerDeepLink(link)); + } + + public disableDeepLinks(): boolean{ + return Array.from(Object.values(this.DEEP_LINKS)).every(link => this.deepLink.unRegisterDeepLink(link)); + } + + public isDeepLinksEnabled(): boolean{ + return Array.from(Object.values(this.DEEP_LINKS)).every(link => this.deepLink.isDeepLinkRegistred(link)); + } + } \ No newline at end of file diff --git a/src/renderer/pages/settings-page.component.tsx b/src/renderer/pages/settings-page.component.tsx index f320591d..36055b2e 100644 --- a/src/renderer/pages/settings-page.component.tsx +++ b/src/renderer/pages/settings-page.component.tsx @@ -28,6 +28,7 @@ import beastSaberIcon from "../../../assets/images/third-party-icons/beast-saber import scoreSaberIcon from "../../../assets/images/third-party-icons/score-saber.png"; import Tippy from '@tippyjs/react'; import { MapsManagerService } from "renderer/services/maps-manager.service"; +import { PlaylistsManagerService } from "renderer/services/playlists-manager.service"; export function SettingsPage() { @@ -42,6 +43,7 @@ export function SettingsPage() { const i18nService: I18nService = I18nService.getInstance(); const linkOpener: LinkOpenerService = LinkOpenerService.getInstance(); const mapsManager = MapsManagerService.getInstance(); + const playlistsManager = PlaylistsManagerService.getInstance(); const {firstColor, secondColor} = useThemeColor(); const sessionExist = useObservable(authService.sessionExist$); @@ -61,6 +63,7 @@ export function SettingsPage() { const [installationFolder, setInstallationFolder] = useState(null); const [showSupporters, setShowSupporters] = useState(false); const [mapDeepLinksEnabled, setMapDeepLinksEnabled] = useState(false); + const [playlistsDeepLinkEnabled, setPlaylistsDeeppLinkEnabled] = useState(false) const [appVersion, setAppVersion] = useState(""); const nav = useNavigate(); @@ -68,6 +71,7 @@ export function SettingsPage() { loadInstallationFolder(); ipcService.send("current-version").then(res => setAppVersion(res.data)); mapsManager.isDeepLinksEnabled().then(enabled => setMapDeepLinksEnabled(() => enabled)); + playlistsManager.isDeepLinksEnabled().then(enabled => setPlaylistsDeeppLinkEnabled(() => enabled)); }, []); const resetColors = () => { @@ -144,6 +148,10 @@ export function SettingsPage() { mapsManager.toogleDeepLinks().finally(() => mapsManager.isDeepLinksEnabled().then(enabled => setMapDeepLinksEnabled(() => enabled))); } + const tooglePlaylistsDeepLinks = () => { + playlistsManager.toogleDeepLinks().finally(() => playlistsManager.isDeepLinksEnabled().then(enabled => setPlaylistsDeeppLinkEnabled(() => enabled))); + } + return (
@@ -202,7 +210,7 @@ export function SettingsPage() {
  • - + Playlists
    diff --git a/src/renderer/services/playlists-manager.service.ts b/src/renderer/services/playlists-manager.service.ts new file mode 100644 index 00000000..598740dd --- /dev/null +++ b/src/renderer/services/playlists-manager.service.ts @@ -0,0 +1,36 @@ +import { IpcService } from "./ipc.service"; + +export class PlaylistsManagerService { + + private static instance: PlaylistsManagerService; + + public static getInstance(): PlaylistsManagerService{ + if(!PlaylistsManagerService.instance){ PlaylistsManagerService.instance = new PlaylistsManagerService(); } + return PlaylistsManagerService.instance; + } + + private readonly ipc: IpcService; + + private constructor(){ + this.ipc = IpcService.getInstance(); + } + + public isDeepLinksEnabled(): Promise{ + return this.ipc.send("is-playlists-deep-links-enabled").then(res => ( + res.success ? res.data : false + )); + } + + public async toogleDeepLinks(): Promise{ + + const isEnabled = await this.isDeepLinksEnabled(); + + const channel = isEnabled ? "unregister-playlists-deep-link" : "register-playlists-deep-link"; + + const res = await this.ipc.send(channel); + + return res.success ? res.data : false; + + } + +} \ No newline at end of file