diff --git a/src/electron/lib/api/apis/ProjectApi.ts b/src/electron/lib/api/apis/ProjectApi.ts index 0b1c5bba..ca2ab1a2 100644 --- a/src/electron/lib/api/apis/ProjectApi.ts +++ b/src/electron/lib/api/apis/ProjectApi.ts @@ -61,11 +61,11 @@ export class ProjectApi implements ElectronMainApi { if (res === -1 && graphs) this.blix.graphManager.deleteGraphs(graphs); } - async addCacheObjects(projectUUID: UUID, cacheUUIDs: UUID[]) { - this.blix.projectManager.addCacheObjects(projectUUID, cacheUUIDs); + async addCacheObjects(projectUUID: UUID, cacheUUIDs: UUID[]): Promise> { + return this.blix.projectManager.addCacheObjects(projectUUID, cacheUUIDs); } - async removeCacheObjects(projectUUID: UUID, cacheUUIDs: UUID[]) { - this.blix.projectManager.removeCacheObjects(projectUUID, cacheUUIDs); + async removeCacheObjects(projectUUID: UUID, cacheUUIDs: UUID[]): Promise> { + return this.blix.projectManager.removeCacheObjects(projectUUID, cacheUUIDs); } } diff --git a/src/electron/lib/projects/CoreProject.ts b/src/electron/lib/projects/CoreProject.ts index 3b2cc7a3..843a8388 100644 --- a/src/electron/lib/projects/CoreProject.ts +++ b/src/electron/lib/projects/CoreProject.ts @@ -4,6 +4,7 @@ import type { UUID } from "../../../shared/utils/UniqueEntity"; import type { PathLike } from "fs"; import type { GraphToJSON } from "../../lib/core-graph/CoreGraphExporter"; import { layoutTemplate } from "../../../frontend/lib/Project"; +import { IpcResponse } from "../../lib/api/MainApi"; // Encapsulates the backend state for one of the open Blix projects export class CoreProject extends UniqueEntity { private _name: string; @@ -110,12 +111,22 @@ export class CoreProject extends UniqueEntity { this._saved = flag; } - public addCacheObjects(cacheUUIDs: UUID[]) { - this._cache = [...this._cache, ...cacheUUIDs]; + public addCacheObjects(cacheUUIDs: UUID[]): IpcResponse { + try { + this._cache = [...this._cache, ...cacheUUIDs]; + return { success: true, data: "Asset successfully added" }; + } catch (e: any) { + return { success: false, data: e }; + } } - public removeCacheObjects(cacheUUIDs: UUID[]) { - this._cache = this._cache.filter((id) => !cacheUUIDs.includes(id)); + public removeCacheObjects(cacheUUIDs: UUID[]): IpcResponse { + try { + this._cache = this._cache.filter((id) => !cacheUUIDs.includes(id)); + return { success: true, data: "Asset successfully removed" }; + } catch (e: any) { + return { success: false, data: e }; + } } } diff --git a/src/electron/lib/projects/ProjectManager.ts b/src/electron/lib/projects/ProjectManager.ts index 84bc2f99..9634095d 100644 --- a/src/electron/lib/projects/ProjectManager.ts +++ b/src/electron/lib/projects/ProjectManager.ts @@ -11,6 +11,7 @@ import { dialog } from "electron"; import type { LayoutPanel } from "../../../shared/types/index"; import { saveProjectCommand } from "./ProjectCommands"; import { Blix } from "../Blix"; +import { IpcResponse } from "../../lib/api/MainApi"; export class ProjectManager { private _projects: { [id: string]: CoreProject }; @@ -204,14 +205,16 @@ export class ProjectManager { this.onProjectChanged(projectId); } - public addCacheObjects(projectUUID: UUID, cacheUUIDs: UUID[]) { - this._projects[projectUUID].addCacheObjects(cacheUUIDs); + public addCacheObjects(projectUUID: UUID, cacheUUIDs: UUID[]): IpcResponse { + const res = this._projects[projectUUID].addCacheObjects(cacheUUIDs); this.onProjectChanged(projectUUID); + return res; } - public removeCacheObjects(projectUUID: UUID, cacheUUIDs: UUID[]) { - this._projects[projectUUID].removeCacheObjects(cacheUUIDs); + public removeCacheObjects(projectUUID: UUID, cacheUUIDs: UUID[]): IpcResponse { + const res = this._projects[projectUUID].removeCacheObjects(cacheUUIDs); this.onProjectChanged(projectUUID); + return res; } } diff --git a/src/frontend/ui/tiles/Assets.svelte b/src/frontend/ui/tiles/Assets.svelte index 3f6b7534..e8775ffa 100644 --- a/src/frontend/ui/tiles/Assets.svelte +++ b/src/frontend/ui/tiles/Assets.svelte @@ -18,7 +18,6 @@ import Fa from "svelte-fa"; import { toastStore } from "../../lib/stores/ToastStore"; import { projectsStore } from "../../lib/stores/ProjectStore"; - import { readable } from "svelte/store"; let selectedCacheItems: CacheUUID[] = []; // Not used at the moment @@ -73,8 +72,12 @@ name: file.name, contentType: file.type, }); - if ($projectsStore.activeProject && cacheId) - await window.apis.projectApi.addCacheObjects($projectsStore.activeProject.id, [cacheId]); + if ($projectsStore.activeProject && cacheId) { + const res = await window.apis.projectApi.addCacheObjects($projectsStore.activeProject.id, [ + cacheId, + ]); + toastStore.trigger({ message: res.data, type: res.success ? "success" : "error" }); + } } catch (error) { console.error(error); } @@ -96,11 +99,13 @@ toastStore.trigger({ message: "No asset selected.", type: "warn" }); return; } - if ($projectsStore.activeProject) - await window.apis.projectApi.removeCacheObjects( + if ($projectsStore.activeProject) { + const res = await window.apis.projectApi.removeCacheObjects( $projectsStore.activeProject.id, selectedCacheItems ); + toastStore.trigger({ message: res.data, type: res.success ? "success" : "error" }); + } await cacheStore.deleteSelectedAssets(selectedCacheItems); } @@ -117,8 +122,7 @@ return url; } - let cacheIds = readable([]); - $: cacheIds = projectsStore.getReactiveActiveProjectCacheIds(); + let cacheIds = projectsStore.getReactiveActiveProjectCacheIds(); {#if $projectsStore.activeProject}