From 7659788490540385a581aae1ebfd7b2bbec491cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Fassi?= Date: Thu, 27 Feb 2025 14:51:39 +0100 Subject: [PATCH] wip: poc hide already downloaded songs --- src-angular/app/core/services/search.service.ts | 12 +++++++++++- src-electron/IpcHandler.ts | 5 +++-- src-electron/ipc/UtilHandlers.ipc.ts | 5 +++++ src-electron/preload.ts | 1 + src-shared/interfaces/ipc.interface.ts | 4 ++++ 5 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src-angular/app/core/services/search.service.ts b/src-angular/app/core/services/search.service.ts index d257ae1..ced330d 100644 --- a/src-angular/app/core/services/search.service.ts +++ b/src-angular/app/core/services/search.service.ts @@ -116,9 +116,19 @@ export class SearchService { return timer(2000).pipe(mergeMap(() => caught)) } }), - tap(response => { + tap(async (response) => { this.searchLoading = false + // TODO: Do this operation at the start of the app and when downloading new songs instead of at every search ? + const songs = await window.electron.invoke.readDirectory() + + // TODO: Add a toggle in the option to show/hide downloaded songs + // ! Currently this only works if the user have "artist", "name" and "charter" in the chartFolderName setting + // ! Maybe add a way to make it work everytime ? Or make this option require the user to have those 3 in the setting + response.data = response.data.filter(c => { + return !songs.some(s => s.includes(c.artist!) && s.includes(c.name!) && s.includes(c.charter!)) + }) + if (!nextPage) { // Don't reload results if they are the same if (this.groupedSongs diff --git a/src-electron/IpcHandler.ts b/src-electron/IpcHandler.ts index 6222482..8288cb8 100644 --- a/src-electron/IpcHandler.ts +++ b/src-electron/IpcHandler.ts @@ -3,7 +3,7 @@ import { download } from './ipc/DownloadHandler.ipc.js' import { scanIssues } from './ipc/issue-scan/IssueScanHandler.ipc.js' import { getSettings, setSettings } from './ipc/SettingsHandler.ipc.js' import { downloadUpdate, getCurrentVersion, getUpdateAvailable, quitAndInstall, retryUpdate } from './ipc/UpdateHandler.ipc.js' -import { getPlatform, getThemeColors, isMaximized, maximize, minimize, openUrl, quit, restore, showFile, showFolder, showOpenDialog, toggleDevTools } from './ipc/UtilHandlers.ipc.js' +import { getPlatform, getThemeColors, isMaximized, maximize, minimize, openUrl, quit, restore, showFile, showFolder, showOpenDialog, toggleDevTools, readDirectory } from './ipc/UtilHandlers.ipc.js' export function getIpcInvokeHandlers(): IpcInvokeHandlers { return { @@ -14,6 +14,7 @@ export function getIpcInvokeHandlers(): IpcInvokeHandlers { isMaximized, showOpenDialog, getThemeColors, + readDirectory } } @@ -32,6 +33,6 @@ export function getIpcToMainEmitHandlers(): IpcToMainEmitHandlers { quit, showFile, showFolder, - scanIssues, + scanIssues } } diff --git a/src-electron/ipc/UtilHandlers.ipc.ts b/src-electron/ipc/UtilHandlers.ipc.ts index ecf48a6..14147b9 100644 --- a/src-electron/ipc/UtilHandlers.ipc.ts +++ b/src-electron/ipc/UtilHandlers.ipc.ts @@ -3,6 +3,7 @@ import fsExtra from 'fs-extra' import { ThemeColors } from '../../src-shared/interfaces/theme.interface.js' import { mainWindow } from '../main.js' +import { settings } from './SettingsHandler.ipc.js' /** * Opens `url` in the default browser. @@ -58,3 +59,7 @@ export async function getThemeColors(path: string) { return null } } + +export async function readDirectory() { + return await fsExtra.readdir(settings.libraryPath || '') +} diff --git a/src-electron/preload.ts b/src-electron/preload.ts index ee96da8..7a303b5 100644 --- a/src-electron/preload.ts +++ b/src-electron/preload.ts @@ -25,6 +25,7 @@ const electronApi: ContextBridgeApi = { isMaximized: getInvoker('isMaximized'), showOpenDialog: getInvoker('showOpenDialog'), getThemeColors: getInvoker('getThemeColors'), + readDirectory: getInvoker('readDirectory'), }, emit: { download: getEmitter('download'), diff --git a/src-shared/interfaces/ipc.interface.ts b/src-shared/interfaces/ipc.interface.ts index 7996797..7699c08 100644 --- a/src-shared/interfaces/ipc.interface.ts +++ b/src-shared/interfaces/ipc.interface.ts @@ -50,6 +50,10 @@ export interface IpcInvokeEvents { input: string output: ThemeColors | null } + readDirectory: { + input: void + output: string[] + } } export type IpcInvokeHandlers = {