From 60ea70cfffee7682e4d6b63460759abe7b774e6e Mon Sep 17 00:00:00 2001 From: Leo Yao <45076643+leoccyao@users.noreply.github.com> Date: Sun, 26 Dec 2021 10:17:22 -0500 Subject: [PATCH] Add basic filename filtering functionality Adds a new setting fileNameFilter that omits filenames including that string from total word/character/sentence counts. --- src/data/collector.ts | 31 ++++++++++++++++--------------- src/settings/settings-tab.ts | 10 ++++++++++ src/settings/settings.ts | 2 ++ 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/data/collector.ts b/src/data/collector.ts index 43e1c02..4793f08 100644 --- a/src/data/collector.ts +++ b/src/data/collector.ts @@ -18,12 +18,15 @@ export class DataCollector { return this.vault.getMarkdownFiles().length; } + fileFiltered(fileName: string){ + return this.settings.fileNameFilter.length > 0 && fileName.includes(this.settings.fileNameFilter); + } + async getTotalWordCount() { let words = 0; - const files = this.vault.getFiles(); - for (const i in files) { - const file = files[i]; - if (file.extension === "md") { + const files = this.vault.getMarkdownFiles(); + for (const file of files) { + if (!this.fileFiltered(file.basename)) { words += getWordCount(await this.vault.cachedRead(file)); } } @@ -33,10 +36,9 @@ export class DataCollector { async getTotalCharacterCount() { let characters = 0; - const files = this.vault.getFiles(); - for (const i in files) { - const file = files[i]; - if (file.extension === "md") { + const files = this.vault.getMarkdownFiles(); + for (const file of files) { + if (!this.fileFiltered(file.basename)) { characters += getCharacterCount(await this.vault.cachedRead(file)); } } @@ -45,15 +47,14 @@ export class DataCollector { } async getTotalSentenceCount() { - let sentence = 0; - const files = this.vault.getFiles(); - for (const i in files) { - const file = files[i]; - if (file.extension === "md") { - sentence += getSentenceCount(await this.vault.cachedRead(file)); + let sentences = 0; + const files = this.vault.getMarkdownFiles(); + for (const file of files) { + if (!this.fileFiltered(file.basename)) { + sentences += getSentenceCount(await this.vault.cachedRead(file)); } } - return sentence; + return sentences; } } diff --git a/src/settings/settings-tab.ts b/src/settings/settings-tab.ts index c46f1ed..789b6cf 100644 --- a/src/settings/settings-tab.ts +++ b/src/settings/settings-tab.ts @@ -48,6 +48,16 @@ export class BetterWordCountSettingsTab extends PluginSettingTab { await this.plugin.saveSettings(); }); }); + new Setting(containerEl) + .setName("Filter Out Filenames") + .setDesc("Filenames including this string will be omitted from total counts. Leave blank to count all files.") + .addText((text) => { + text.setValue(this.plugin.settings.fileNameFilter) + text.onChange(async (value: string) => { + this.plugin.settings.fileNameFilter = value; + await this.plugin.saveSettings(); + }); + }); // Status Bar Settings containerEl.createEl("h3", { text: "Status Bar Settings" }); diff --git a/src/settings/settings.ts b/src/settings/settings.ts index 73abded..4f083ab 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -10,6 +10,7 @@ export const DEFAULT_SETTINGS: BetterWordCountSettings = { "{file_count} files {total_word_count} words {total_character_count} characters", countComments: false, collectStats: false, + fileNameFilter: "", }; export const PRESETS: PresetOption[] = [ @@ -38,6 +39,7 @@ export interface BetterWordCountSettings { statusBarAltQuery: string; countComments: boolean; collectStats: boolean; + fileNameFilter: string; } export interface PresetOption {