From f637def2785f81de0de8c701d9fe262fed0a24c4 Mon Sep 17 00:00:00 2001 From: Elio Struyf Date: Mon, 29 Apr 2024 11:39:41 +0200 Subject: [PATCH] #801 - Faster folder processing --- CHANGELOG.md | 1 + src/commands/Folders.ts | 22 +++++++++++++++++++++- src/helpers/SettingsHelper.ts | 3 +++ src/services/PagesParser.ts | 2 ++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9285f547..59359b89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ ### 🐞 Fixes - [#796](https://github.com/estruyf/vscode-front-matter/issues/796): Fix issue in retrieving folders/files on dashboard load +- [#801](https://github.com/estruyf/vscode-front-matter/issues/801): Faster folder processing on updates ## [10.1.0] - 2024-04-11 - [Release notes](https://beta.frontmatter.codes/updates/v10.1.0) diff --git a/src/commands/Folders.ts b/src/commands/Folders.ts index e864c054..982d35e1 100644 --- a/src/commands/Folders.ts +++ b/src/commands/Folders.ts @@ -32,6 +32,13 @@ import { LocalizationKey } from '../localization'; export const WORKSPACE_PLACEHOLDER = `[[workspace]]`; export class Folders { + private static _folders: ContentFolder[] = []; + + public static clearCached() { + Logger.verbose(`Folders:clearCached`); + Folders._folders = []; + } + /** * Add a media folder * @returns @@ -282,6 +289,7 @@ export class Folders { * Get the registered folders information */ public static async getInfo(limit?: number): Promise { + Logger.verbose('Folders:getInfo:start'); const supportedFiles = Settings.get(SETTING_CONTENT_SUPPORTED_FILETYPES); const folders = Folders.get(); @@ -295,9 +303,11 @@ export class Folders { } } + Logger.verbose('Folders:getInfo:end'); return folderInfo; } + Logger.verbose('Folders:getInfo:end - no folders found'); return null; } @@ -306,6 +316,13 @@ export class Folders { * @returns */ public static get(): ContentFolder[] { + Logger.verbose('Folders:get:start'); + + if (Folders._folders.length > 0) { + Logger.verbose('Folders:get:end - cached folders'); + return Folders._folders; + } + const wsFolder = Folders.getWorkspaceFolder(); let folders: ContentFolder[] = Settings.get(SETTING_CONTENT_PAGE_FOLDERS) as ContentFolder[]; const i18nSettings = Settings.get(SETTING_CONTENT_I18N); @@ -323,6 +340,7 @@ export class Folders { const folderPath = Folders.absWsFolder(folder, wsFolder); const subFolders = glob.sync(folderPath, { ignore: '**/node_modules/**' }); + // const subFolders = await Folders.findFolders(folderPath); for (const subFolder of subFolders) { const subFolderPath = parseWinPath(subFolder); @@ -417,7 +435,9 @@ export class Folders { } }); - return contentFolders.filter((folder) => folder !== null) as ContentFolder[]; + Logger.verbose('Folders:get:end'); + Folders._folders = contentFolders.filter((folder) => folder !== null) as ContentFolder[]; + return Folders._folders; } /** diff --git a/src/helpers/SettingsHelper.ts b/src/helpers/SettingsHelper.ts index eca2a1b4..e6c3e0d2 100644 --- a/src/helpers/SettingsHelper.ts +++ b/src/helpers/SettingsHelper.ts @@ -1139,6 +1139,9 @@ export class Settings { */ private static async reloadConfig(debounced: boolean = true) { Logger.info(`Reloading config...`); + // Clear the folder cache as we need to see the latest folders + Folders.clearCached(); + if (Settings.readConfigPromise === undefined) { Settings.readConfigPromise = Settings.readConfig(); } diff --git a/src/services/PagesParser.ts b/src/services/PagesParser.ts index 73919b71..d36cc11f 100644 --- a/src/services/PagesParser.ts +++ b/src/services/PagesParser.ts @@ -79,6 +79,7 @@ export class PagesParser { public static async parsePages() { Logger.info('PagesParser:parsePages:start'); i18n.clearFiles(); + Folders.clearCached(); const ext = Extension.getInstance(); // Update the dashboard with the fresh data @@ -138,6 +139,7 @@ export class PagesParser { PagesParser.allPages = [...pages]; PagesParser.pagesStatusBar.hide(); + Folders.clearCached(); Logger.info('PagesParser:parsePages:end'); }