From 547fb32f9542d3fb9373b9ff12c13c492a5d1d5b Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 15:59:10 -0500 Subject: [PATCH 01/15] Add Page-Related Settings --- src/settings/Settings.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/settings/Settings.ts b/src/settings/Settings.ts index c01300c..b58c18a 100644 --- a/src/settings/Settings.ts +++ b/src/settings/Settings.ts @@ -2,6 +2,7 @@ export enum MetricCounter { words, characters, sentences, + pages, files, } @@ -38,6 +39,7 @@ export interface BetterWordCountSettings { altBar: StatusBarItem[]; countComments: boolean; collectStats: boolean; + pageWords: number; } export const DEFAULT_SETTINGS: BetterWordCountSettings = { @@ -71,4 +73,5 @@ export const DEFAULT_SETTINGS: BetterWordCountSettings = { ], countComments: false, collectStats: false, + pageWords: 300, }; From 88a3bd1a2ad8023f657bd75c23a1bd6435993ae3 Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 16:03:24 -0500 Subject: [PATCH 02/15] Add Page Word Count Setting --- src/settings/SettingsTab.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index 0e55833..f8f92cd 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -37,6 +37,18 @@ export default class BetterWordCountSettingsTab extends PluginSettingTab { await this.plugin.saveSettings(); }); }); + new Setting(containerEl) + .setName("Page Word Count") + .setDesc("Set how many words count as one \"page\"") + .addToggle((text: TextComponent) => { + text.inputEl.type = "number"; + text.setPlaceholder("300"); + text.setValue(this.plugin.settings.pageWords); + text.onChange(async (value) => { + this.plugin.settings.pageWords = value; + await this.plugin.saveSettings(); + }); + }); // Status Bar Settings addStatusBarSettings(this.plugin, containerEl); From 2cc592c13e812ab5e6ef83baa2221ad1c71d34ae Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 16:11:23 -0500 Subject: [PATCH 03/15] Add "Pages" as an Option --- src/settings/StatusBarSettings.svelte | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/settings/StatusBarSettings.svelte b/src/settings/StatusBarSettings.svelte index 9e2843a..6031454 100644 --- a/src/settings/StatusBarSettings.svelte +++ b/src/settings/StatusBarSettings.svelte @@ -18,6 +18,8 @@ return "Chars in Note" case MetricCounter.sentences: return "Sentences in Note" + case MetricCounter.pages: + return "Pages in Note" case MetricCounter.files: return "Total Notes" } @@ -29,6 +31,8 @@ return "Daily Chars" case MetricCounter.sentences: return "Daily Sentences" + case MetricCounter.pages: + return "Daily Pages" case MetricCounter.files: return "Total Notes" } @@ -40,6 +44,8 @@ return "Total Chars" case MetricCounter.sentences: return "Total Sentences" + case MetricCounter.pages: + return "Total Pages" case MetricCounter.files: return "Total Notes" } @@ -181,6 +187,7 @@ + @@ -348,6 +355,7 @@ + From 9885035ac8e73e10204a94527502e8b608f99831 Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 16:12:36 -0500 Subject: [PATCH 04/15] Add Pages --- src/stats/Stats.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/stats/Stats.ts b/src/stats/Stats.ts index 5209bb3..38a69aa 100644 --- a/src/stats/Stats.ts +++ b/src/stats/Stats.ts @@ -9,10 +9,12 @@ export interface Day { words: number; characters: number; sentences: number; + pages: number; files: number; totalWords: number; totalCharacters: number; totalSentences: number; + totalPages: number; } export type ModifiedFiles = Record; @@ -21,6 +23,7 @@ export interface FileStat { words: CountDiff; characters: CountDiff; sentences: CountDiff; + pages: CountDiff; } export interface CountDiff { From 759b4d949c599b30878890ed80008c1f65d5a3a1 Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 16:39:28 -0500 Subject: [PATCH 05/15] Add Page Calculations --- src/stats/StatsManager.ts | 47 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/stats/StatsManager.ts b/src/stats/StatsManager.ts index d96db15..0dd051c 100644 --- a/src/stats/StatsManager.ts +++ b/src/stats/StatsManager.ts @@ -5,19 +5,22 @@ import moment from "moment"; import { getCharacterCount, getSentenceCount, + getPageCount, getWordCount, } from "../utils/StatUtils"; export default class StatsManager { private vault: Vault; private workspace: Workspace; + private plugin: Plugin; private vaultStats: VaultStatistics; private today: string; public debounceChange; - constructor(vault: Vault, workspace: Workspace) { + constructor(vault: Vault, workspace: Workspace, plugin: Plugin) { this.vault = vault; this.workspace = workspace; + this.plugin = plugin; this.debounceChange = debounce( (text: string) => this.change(text), 50, @@ -76,15 +79,18 @@ export default class StatsManager { const totalWords = await this.calcTotalWords(); const totalCharacters = await this.calcTotalCharacters(); const totalSentences = await this.calcTotalSentences(); + const totalPages = await this.calcTotalPages(); const newDay: Day = { words: 0, characters: 0, sentences: 0, + pages: 0, files: 0, totalWords: totalWords, totalCharacters: totalCharacters, totalSentences: totalSentences, + totalPages: totalPages, }; this.vaultStats.modifiedFiles = {}; @@ -97,6 +103,8 @@ export default class StatsManager { const currentWords = getWordCount(text); const currentCharacters = getCharacterCount(text); const currentSentences = getSentenceCount(text); + const currentPages = getPageCount(text, this.plugin.settings.pageWords); + if ( this.vaultStats.history.hasOwnProperty(this.today) && this.today === moment().format("YYYY-MM-DD") @@ -110,9 +118,12 @@ export default class StatsManager { currentCharacters - modFiles[fileName].characters.current; this.vaultStats.history[this.today].totalSentences += currentSentences - modFiles[fileName].sentences.current; + this.vaultStats.history[this.today].totalPages += + currentSentences - modFiles[fileName].pages.current; modFiles[fileName].words.current = currentWords; modFiles[fileName].characters.current = currentCharacters; modFiles[fileName].sentences.current = currentSentences; + modFiles[fileName].pages.current = currentPages; } else { modFiles[fileName] = { words: { @@ -127,6 +138,10 @@ export default class StatsManager { initial: currentSentences, current: currentSentences, }, + pages: { + initial: currentPages, + current: currentPages, + }, }; } @@ -145,10 +160,16 @@ export default class StatsManager { Math.max(0, counts.sentences.current - counts.sentences.initial) ) .reduce((a, b) => a + b, 0); + const pages = Object.values(modFiles) + .map((counts) => + Math.max(0, counts.pages.current - counts.pages.initial) + ) + .reduce((a, b) => a + b, 0); this.vaultStats.history[this.today].words = words; this.vaultStats.history[this.today].characters = characters; this.vaultStats.history[this.today].sentences = sentences; + this.vaultStats.history[this.today].pages = pages; this.vaultStats.history[this.today].files = this.getTotalFiles(); await this.update(); @@ -167,6 +188,7 @@ export default class StatsManager { todayHist.totalWords = await this.calcTotalWords(); todayHist.totalCharacters = await this.calcTotalCharacters(); todayHist.totalSentences = await this.calcTotalSentences(); + todayHist.totalPages = await this.calcTotalPages(); this.update(); } else { this.updateToday(); @@ -211,6 +233,20 @@ export default class StatsManager { return sentence; } + + private async calcTotalPages(): Promise { + let pages = 0; + + const files = this.vault.getFiles(); + for (const i in files) { + const file = files[i]; + if (file.extension === "md") { + pages += getPageCount(await this.vault.cachedRead(file), this.plugin.settings.pageWords); + } + } + + return pages; + } public getDailyWords(): number { return this.vaultStats.history[this.today].words; @@ -224,6 +260,10 @@ export default class StatsManager { return this.vaultStats.history[this.today].sentences; } + public getDailyPages(): number { + return this.vaultStats.history[this.today].pages; + } + public getTotalFiles(): number { return this.vault.getMarkdownFiles().length; } @@ -242,4 +282,9 @@ export default class StatsManager { if (!this.vaultStats) return await this.calcTotalSentences(); return this.vaultStats.history[this.today].totalSentences; } + + public async getTotalPages(): Promise { + if (!this.vaultStats) return await this.calcTotalPages(); + return this.vaultStats.history[this.today].totalPages; + } } From de3172ee95cc4be67c358f31e338055469c3ad13 Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 16:42:00 -0500 Subject: [PATCH 06/15] Add Page Display Options --- src/status/StatusBar.ts | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/status/StatusBar.ts b/src/status/StatusBar.ts index 7d40bfc..3f458d0 100644 --- a/src/status/StatusBar.ts +++ b/src/status/StatusBar.ts @@ -107,6 +107,26 @@ export default class StatusBar { : 0)); break; } + } else if (metric.counter === MetricCounter.pages) { + switch (metric.type) { + case MetricType.file: + display = display + getPageCount(text, this.plugin.settings.pageWords); + break; + case MetricType.daily: + display = + display + + (this.plugin.settings.collectStats + ? this.plugin.statsManager.getDailyPages() + : 0); + break; + case MetricType.total: + display = + display + + (await (this.plugin.settings.collectStats + ? this.plugin.statsManager.getTotalPages() + : 0)); + break; + } } else if (metric.counter === MetricCounter.files) { switch (metric.type) { case MetricType.file: @@ -209,6 +229,26 @@ export default class StatusBar { : 0)); break; } + } else if (metric.counter === MetricCounter.pages) { + switch (metric.type) { + case MetricType.file: + display = display + 0; + break; + case MetricType.daily: + display = + display + + (this.plugin.settings.collectStats + ? this.plugin.statsManager.getDailyPages() + : 0); + break; + case MetricType.total: + display = + display + + (await (this.plugin.settings.collectStats + ? this.plugin.statsManager.getTotalPages() + : 0)); + break; + } } else if (metric.counter === MetricCounter.files) { switch (metric.type) { case MetricType.file: From 5e970cad74d7d02da285414f4eda0fbd1e57f9d2 Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 16:44:23 -0500 Subject: [PATCH 07/15] Add getPageCount --- src/utils/StatUtils.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/utils/StatUtils.ts b/src/utils/StatUtils.ts index eddaa6d..2d23966 100644 --- a/src/utils/StatUtils.ts +++ b/src/utils/StatUtils.ts @@ -37,6 +37,10 @@ export function getSentenceCount(text: string): number { return sentences; } +export function getPageCount(text: string, pageWords: number): number { + return parseFloat((getWordCount(text) / pageWords).toFixed(1)); +} + export function getTotalFileCount(vault: Vault): number { return vault.getMarkdownFiles().length; } From f43895645f6f9fabf33a3938e7035d2514dae00e Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 16:45:38 -0500 Subject: [PATCH 08/15] Update StatsManager Initialization --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 5cf97a8..cbc3293 100644 --- a/src/main.ts +++ b/src/main.ts @@ -33,7 +33,7 @@ export default class BetterWordCount extends Plugin { // Handle Statistics if (this.settings.collectStats) { - this.statsManager = new StatsManager(this.app.vault, this.app.workspace); + this.statsManager = new StatsManager(this.app.vault, this.app.workspace, this); } // Handle Status Bar From aabd175d5d8249a8c085c5227cbbf5f196cdac6f Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 17:18:06 -0500 Subject: [PATCH 09/15] Fix TS Build Mistakes --- src/stats/StatsManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stats/StatsManager.ts b/src/stats/StatsManager.ts index 0dd051c..ce77a65 100644 --- a/src/stats/StatsManager.ts +++ b/src/stats/StatsManager.ts @@ -1,4 +1,4 @@ -import { debounce, Debouncer, TFile, Vault, Workspace } from "obsidian"; +import { debounce, Debouncer, TFile, Vault, Workspace, Plugin } from "obsidian"; import { STATS_FILE } from "../constants"; import type { Day, VaultStatistics } from "./Stats"; import moment from "moment"; From 2b847ddcc9641f7cfe54a78b549a5460cdf1781c Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 17:18:49 -0500 Subject: [PATCH 10/15] Fix TS Build Mistakes --- src/status/StatusBar.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/status/StatusBar.ts b/src/status/StatusBar.ts index 3f458d0..da952c6 100644 --- a/src/status/StatusBar.ts +++ b/src/status/StatusBar.ts @@ -4,6 +4,7 @@ import { getWordCount, getCharacterCount, getSentenceCount, + getPageCount, } from "src/utils/StatUtils"; import { debounce } from "obsidian"; From fbf79771883717e4b918bd75955ff43043e3dd75 Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 17:31:07 -0500 Subject: [PATCH 11/15] Fix TS Build Mistakes --- src/settings/SettingsTab.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index f8f92cd..aa49a3e 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -1,4 +1,4 @@ -import { App, PluginSettingTab, Setting, ToggleComponent } from "obsidian"; +import { App, PluginSettingTab, Setting, ToggleComponent, TextComponent } from "obsidian"; import type BetterWordCount from "src/main"; import { addStatusBarSettings } from "./StatusBarSettings"; @@ -40,11 +40,11 @@ export default class BetterWordCountSettingsTab extends PluginSettingTab { new Setting(containerEl) .setName("Page Word Count") .setDesc("Set how many words count as one \"page\"") - .addToggle((text: TextComponent) => { + .addText((text: TextComponent) => { text.inputEl.type = "number"; text.setPlaceholder("300"); text.setValue(this.plugin.settings.pageWords); - text.onChange(async (value) => { + text.onChange(async (value: number) => { this.plugin.settings.pageWords = value; await this.plugin.saveSettings(); }); From ec21413d55bcde9cb330742a0b1e081c805def09 Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 18:15:04 -0500 Subject: [PATCH 12/15] Fix TS Build Mistakes --- src/stats/StatsManager.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/stats/StatsManager.ts b/src/stats/StatsManager.ts index ce77a65..00e687a 100644 --- a/src/stats/StatsManager.ts +++ b/src/stats/StatsManager.ts @@ -1,4 +1,5 @@ -import { debounce, Debouncer, TFile, Vault, Workspace, Plugin } from "obsidian"; +import { debounce, Debouncer, TFile, Vault, Workspace } from "obsidian"; +import type BetterWordCount from "../main"; import { STATS_FILE } from "../constants"; import type { Day, VaultStatistics } from "./Stats"; import moment from "moment"; @@ -12,12 +13,12 @@ import { export default class StatsManager { private vault: Vault; private workspace: Workspace; - private plugin: Plugin; + private plugin: BetterWordCount; private vaultStats: VaultStatistics; private today: string; public debounceChange; - constructor(vault: Vault, workspace: Workspace, plugin: Plugin) { + constructor(vault: Vault, workspace: Workspace, plugin: BetterWordCount) { this.vault = vault; this.workspace = workspace; this.plugin = plugin; From d865d61e2305400db41f6160ff5eb8992422e74c Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 18:16:09 -0500 Subject: [PATCH 13/15] Fix TS Build Mistakes --- src/settings/SettingsTab.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index aa49a3e..591fae2 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -44,8 +44,8 @@ export default class BetterWordCountSettingsTab extends PluginSettingTab { text.inputEl.type = "number"; text.setPlaceholder("300"); text.setValue(this.plugin.settings.pageWords); - text.onChange(async (value: number) => { - this.plugin.settings.pageWords = value; + text.onChange(async (value: string) => { + this.plugin.settings.pageWords = parseInt(value); await this.plugin.saveSettings(); }); }); From 86ca1199cce1f7dcc67028dae6999dd1950e4961 Mon Sep 17 00:00:00 2001 From: minermaniac447 <42500591+minermaniac447@users.noreply.github.com> Date: Wed, 8 Feb 2023 18:25:43 -0500 Subject: [PATCH 14/15] Fix TS Build Mistakes --- src/settings/SettingsTab.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/settings/SettingsTab.ts b/src/settings/SettingsTab.ts index 591fae2..a6aa43b 100644 --- a/src/settings/SettingsTab.ts +++ b/src/settings/SettingsTab.ts @@ -43,7 +43,7 @@ export default class BetterWordCountSettingsTab extends PluginSettingTab { .addText((text: TextComponent) => { text.inputEl.type = "number"; text.setPlaceholder("300"); - text.setValue(this.plugin.settings.pageWords); + text.setValue(this.plugin.settings.pageWords.toString()); text.onChange(async (value: string) => { this.plugin.settings.pageWords = parseInt(value); await this.plugin.saveSettings(); From 0712d9f61a2008e548574e45b6dd2ee8765a8fcd Mon Sep 17 00:00:00 2001 From: Luke Leppan Date: Thu, 30 Mar 2023 00:01:11 +0200 Subject: [PATCH 15/15] fix: calculating with currentSentences instead of page --- src/stats/StatsManager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/stats/StatsManager.ts b/src/stats/StatsManager.ts index 00e687a..59fad1e 100644 --- a/src/stats/StatsManager.ts +++ b/src/stats/StatsManager.ts @@ -120,7 +120,7 @@ export default class StatsManager { this.vaultStats.history[this.today].totalSentences += currentSentences - modFiles[fileName].sentences.current; this.vaultStats.history[this.today].totalPages += - currentSentences - modFiles[fileName].pages.current; + currentPages - modFiles[fileName].pages.current; modFiles[fileName].words.current = currentWords; modFiles[fileName].characters.current = currentCharacters; modFiles[fileName].sentences.current = currentSentences;