From 5a45fdc94fc79624592b2c8894a035c56e374a16 Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Fri, 29 Nov 2024 15:19:22 +0100 Subject: [PATCH] Added progress --- l10n/bundle.l10n.json | 3 + src/listeners/dashboard/MediaListener.ts | 91 ++++++++++++++---------- src/localization/localization.enum.ts | 8 +++ 3 files changed, 63 insertions(+), 39 deletions(-) diff --git a/l10n/bundle.l10n.json b/l10n/bundle.l10n.json index fdfd1080..2be9bf0a 100644 --- a/l10n/bundle.l10n.json +++ b/l10n/bundle.l10n.json @@ -776,6 +776,9 @@ "listeners.dashboard.dashboardListener.pinItem.coundNotPin.error": "Could not pin item.", "listeners.dashboard.dashboardListener.pinItem.coundNotUnPin.error": "Could not unpin item.", + "listeners.dashboard.mediaListeners.deleteMediaFolder.progress.title": "Deleting folder...", + "listeners.dashboard.mediaListeners.updateMediaFolder.progress.title": "Updating folder...", + "listeners.dashboard.settingsListener.triggerTemplate.notification": "Template files copied.", "listeners.dashboard.settingsListener.triggerTemplate.progress.title": "Downloading and initializing the template...", "listeners.dashboard.settingsListener.triggerTemplate.download.error": "Failed to download the template.", diff --git a/src/listeners/dashboard/MediaListener.ts b/src/listeners/dashboard/MediaListener.ts index a3444018..6ca11ea4 100644 --- a/src/listeners/dashboard/MediaListener.ts +++ b/src/listeners/dashboard/MediaListener.ts @@ -3,7 +3,7 @@ import { DashboardMessage } from '../../dashboardWebView/DashboardMessage'; import { BaseListener } from './BaseListener'; import { DashboardCommand } from '../../dashboardWebView/DashboardCommand'; import { SortingOption } from '../../dashboardWebView/models'; -import { commands, env, Uri, window, workspace } from 'vscode'; +import { commands, env, ProgressLocation, Uri, window, workspace } from 'vscode'; import { COMMAND_NAME } from '../../constants'; import * as os from 'os'; import { Folders } from '../../commands'; @@ -11,6 +11,7 @@ import { PostMessageData, UnmappedMedia } from '../../models'; import { FilesHelper, MediaLibrary } from '../../helpers'; import { existsAsync, flattenObjectKeys } from '../../utils'; import { join, parse } from 'path'; +import { LocalizationKey, localize } from '../../localization'; export class MediaListener extends BaseListener { private static timers: { [folder: string]: any } = {}; @@ -74,19 +75,25 @@ export class MediaListener extends BaseListener { return; } - const folderPath = parse(msg.folder).dir; + window.withProgress({ + location: ProgressLocation.Notification, + title: localize(LocalizationKey.listenersDashboardMediaListenersDeleteMediaFolderProgressTitle), + cancellable: false + }, async () => { + const folderPath = parse(msg.folder).dir; - const mediaLib = MediaLibrary.getInstance(); - const parsedPath = mediaLib.parsePath(msg.folder); - const mediaFiles = await mediaLib.getAllByPath(parsedPath); + const mediaLib = MediaLibrary.getInstance(); + const parsedPath = mediaLib.parsePath(msg.folder); + const mediaFiles = await mediaLib.getAllByPath(parsedPath); - for (const fileName of Object.keys(mediaFiles)) { - const filePath = join(msg.folder, fileName); - await mediaLib.remove(filePath); - } + for (const fileName of Object.keys(mediaFiles)) { + const filePath = join(msg.folder, fileName); + await mediaLib.remove(filePath); + } - await workspace.fs.delete(Uri.file(msg.folder), { recursive: true, useTrash: false }); - this.sendMediaFiles(0, folderPath); + await workspace.fs.delete(Uri.file(msg.folder), { recursive: true, useTrash: false }); + await MediaListener.sendMediaFiles(0, folderPath); + }); } public static async updateMediaFolder(msg: { @@ -98,35 +105,41 @@ export class MediaListener extends BaseListener { return; } - const folderName = parse(msg.folder).base; - - const newFolderName = await window.showInputBox({ - prompt: 'Enter new folder name', - value: folderName + window.withProgress({ + location: ProgressLocation.Notification, + title: localize(LocalizationKey.listenersDashboardMediaListenersUpdateMediaFolderProgressTitle), + cancellable: false + }, async () => { + const folderName = parse(msg.folder).base; + + const newFolderName = await window.showInputBox({ + prompt: 'Enter new folder name', + value: folderName + }); + + if (!newFolderName || newFolderName === folderName) { + return; + } + + const newFolderPath = join(parse(msg.folder).dir, newFolderName); + + // Get all media files from the folder + const mediaLib = MediaLibrary.getInstance(); + const parsedPath = mediaLib.parsePath(msg.folder); + const mediaFiles = await mediaLib.getAllByPath(parsedPath); + + // Update the folder + await workspace.fs.rename(Uri.file(msg.folder), Uri.file(newFolderPath), { overwrite: false }); + + // Update the media files + for (const fileName of Object.keys(mediaFiles)) { + const newFilePath = join(newFolderPath, fileName); + const oldFilePath = join(msg.folder, fileName); + await mediaLib.rename(oldFilePath, newFilePath); + } + + await this.sendMediaFiles(0, parse(msg.folder).dir); }); - - if (!newFolderName || newFolderName === folderName) { - return; - } - - const newFolderPath = join(parse(msg.folder).dir, newFolderName); - - // Get all media files from the folder - const mediaLib = MediaLibrary.getInstance(); - const parsedPath = mediaLib.parsePath(msg.folder); - const mediaFiles = await mediaLib.getAllByPath(parsedPath); - - // Update the folder - await workspace.fs.rename(Uri.file(msg.folder), Uri.file(newFolderPath), { overwrite: false }); - - // Update the media files - for (const fileName of Object.keys(mediaFiles)) { - const newFilePath = join(newFolderPath, fileName); - const oldFilePath = join(msg.folder, fileName); - await mediaLib.rename(oldFilePath, newFilePath); - } - - this.sendMediaFiles(0, parse(msg.folder).dir); } /** diff --git a/src/localization/localization.enum.ts b/src/localization/localization.enum.ts index 37a6e24a..5deac3fb 100644 --- a/src/localization/localization.enum.ts +++ b/src/localization/localization.enum.ts @@ -2576,6 +2576,14 @@ export enum LocalizationKey { * Could not unpin item. */ listenersDashboardDashboardListenerPinItemCoundNotUnPinError = 'listeners.dashboard.dashboardListener.pinItem.coundNotUnPin.error', + /** + * Deleting folder... + */ + listenersDashboardMediaListenersDeleteMediaFolderProgressTitle = 'listeners.dashboard.mediaListeners.deleteMediaFolder.progress.title', + /** + * Updating folder... + */ + listenersDashboardMediaListenersUpdateMediaFolderProgressTitle = 'listeners.dashboard.mediaListeners.updateMediaFolder.progress.title', /** * Template files copied. */