diff --git a/README.md b/README.md index 40b7bb6..bc1f2fc 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,22 @@ You can also reconnect to discord rich presence via the `Reconnect to Discord` c ### Settings +#### Vault Name Settings + - Toggle whether or not to show **Vault Name** +- Set a custom **Vault Name** to show publicly + +#### File Name Settings + - Toggle whether or not to show **Current File Name** +- Toggle whether or not to show the current file **extension** + +#### Time Settings + +- Toggle Whether or not to use the total time you have been using Obsidian, instead of the time spent editing a single file. + +#### Notice Settings + - Toggle whether or not to show **Connection Notices** ### Issues diff --git a/manifest.json b/manifest.json index f94b152..c0cde53 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "obsidian-discordrpc", "name": "Discord Rich Presence", - "version": "1.2.0", + "version": "1.3.2", "description": "Update your Discord Status to show your friends what you are working on in Obsidian. With Discord Rich Presence.", "author": "Luke Leppan", "authorUrl": "https://lukeleppan.com", diff --git a/package.json b/package.json index a4bd002..6f63243 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "obsidian-discordrpc", - "version": "1.2.0", + "version": "1.3.2", "description": "Update your Discord Status to show your friends what you are working on in Obsidian. With Discord Rich Presence.", "main": "main.js", "scripts": { diff --git a/src/logger.ts b/src/logger.ts index 26d8c7e..9c7e432 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -1,8 +1,8 @@ -import { Notice, Plugin } from "obsidian"; -import { DiscordRPCSettings } from "./settings/settings"; +import { Notice } from "obsidian"; +import ObsidianDiscordRPC from "./main"; export class Logger { - private settings: DiscordRPCSettings; + plugin: ObsidianDiscordRPC = (this as any).plugin; log(message: string, showPopups: boolean): void { if (showPopups) { diff --git a/src/main.ts b/src/main.ts index 8235dfc..6e93de9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,5 +1,5 @@ import { Client } from "discord-rpc"; -import { App, Plugin, PluginManifest, TFile } from "obsidian"; +import { Plugin, PluginManifest, TFile } from "obsidian"; import { Logger } from "./logger"; import { DiscordRPCSettings, PluginState } from "./settings/settings"; import { DiscordRPCSettingsTab } from "./settings/settings-tab"; @@ -11,6 +11,8 @@ export default class ObsidianDiscordRPC extends Plugin { public statusBar: StatusBar; public rpc: Client; public logger: Logger = new Logger(); + public currentFile: TFile; + public loadedTime: Date; setState(state: PluginState) { this.state = state; @@ -29,6 +31,7 @@ export default class ObsidianDiscordRPC extends Plugin { } async onload() { + this.loadedTime = new Date(); let statusBarEl = this.addStatusBarItem(); this.statusBar = new StatusBar(statusBarEl); @@ -53,11 +56,25 @@ export default class ObsidianDiscordRPC extends Plugin { }); await this.connectDiscord(); + + let activeLeaf = this.app.workspace.activeLeaf; + let files: TFile[] = this.app.vault.getMarkdownFiles(); + + files.forEach((file) => { + if (file.basename === activeLeaf.getDisplayText()) { + this.onFileOpen(file); + } + }); } async onFileOpen(file: TFile) { - if (this.getState() == PluginState.connected) { - await this.setActivity(this.app.vault.getName(), file.basename); + this.currentFile = file; + if (this.getState() === PluginState.connected) { + await this.setActivity( + this.app.vault.getName(), + file.basename, + file.extension + ); } } @@ -85,7 +102,7 @@ export default class ObsidianDiscordRPC extends Plugin { await this.rpc.login({ clientId: "763813185022197831", }); - await this.setActivity(this.app.vault.getName(), "..."); + await this.setActivity(this.app.vault.getName(), "...", ""); } catch (error) { this.setState(PluginState.disconnected); this.statusBar.displayState(this.getState()); @@ -93,27 +110,52 @@ export default class ObsidianDiscordRPC extends Plugin { } } - async setActivity(vaultName: string, fileName: string): Promise { - if (this.getState() == PluginState.connected) { + async setActivity( + vaultName: string, + fileName: string, + fileExtension: string + ): Promise { + if (this.getState() === PluginState.connected) { + let vault: string; + if (this.settings.customVaultName === "") { + vault = vaultName; + } else { + vault = this.settings.customVaultName; + } + + let file: string; + if (this.settings.showFileExtension) { + file = fileName + "." + fileExtension; + } else { + file = fileName; + } + + let date: Date; + if (this.settings.useLoadedTime) { + date = this.loadedTime; + } else { + date = new Date(); + } + if (this.settings.showVaultName && this.settings.showCurrentFileName) { await this.rpc.setActivity({ - details: `Editing ${fileName}`, - state: `Vault: ${vaultName}`, - startTimestamp: new Date(), + details: `Editing ${file}`, + state: `Vault: ${vault}`, + startTimestamp: date, largeImageKey: "logo", largeImageText: "Obsidian", }); } else if (this.settings.showVaultName) { await this.rpc.setActivity({ - state: `Vault: ${vaultName}`, - startTimestamp: new Date(), + state: `Vault: ${vault}`, + startTimestamp: date, largeImageKey: "logo", largeImageText: "Obsidian", }); } else if (this.settings.showCurrentFileName) { await this.rpc.setActivity({ - details: `Editing ${fileName}`, - startTimestamp: new Date(), + details: `Editing ${file}`, + startTimestamp: date, largeImageKey: "logo", largeImageText: "Obsidian", }); diff --git a/src/settings/settings-tab.ts b/src/settings/settings-tab.ts index 7ae2200..d4b8d51 100644 --- a/src/settings/settings-tab.ts +++ b/src/settings/settings-tab.ts @@ -1,4 +1,4 @@ -import { PluginSettingTab, Setting } from "obsidian"; +import { PluginSettingTab, Setting, TFile } from "obsidian"; import { Logger } from "src/logger"; import ObsidianDiscordRPC from "src/main"; @@ -12,6 +12,7 @@ export class DiscordRPCSettingsTab extends PluginSettingTab { containerEl.empty(); containerEl.createEl("h2", { text: "Discord Rich Presence Settings" }); + containerEl.createEl("h3", { text: "Vault Name Settings" }); new Setting(containerEl) .setName("Show Vault Name") .setDesc( @@ -28,10 +29,33 @@ export class DiscordRPCSettingsTab extends PluginSettingTab { this.logger.logIgnoreNoNotice("Vault Name is no longer Visable"); } - plugin.setActivity(this.app.vault.getName(), "..."); + plugin.setActivity( + this.app.vault.getName(), + plugin.currentFile.basename, + plugin.currentFile.extension + ); }) ); + new Setting(containerEl) + .setName("Set Custom Vault Name") + .setDesc( + "Change the vault name shown publicly. Leave blank to use your actual vault name." + ) + .addText((text) => + text.setValue(plugin.settings.customVaultName).onChange((value) => { + plugin.settings.customVaultName = value; + plugin.saveData(plugin.settings); + + plugin.setActivity( + this.app.vault.getName(), + plugin.currentFile.basename, + plugin.currentFile.extension + ); + }) + ); + + containerEl.createEl("h3", { text: "File Name Settings" }); new Setting(containerEl) .setName("Show Current File Name") .setDesc("Enable this to show the name of the file you are working on.") @@ -48,10 +72,52 @@ export class DiscordRPCSettingsTab extends PluginSettingTab { this.logger.logIgnoreNoNotice("File Name is no longer Visable"); } - plugin.setActivity(this.app.vault.getName(), "..."); + plugin.setActivity( + this.app.vault.getName(), + plugin.currentFile.basename, + plugin.currentFile.extension + ); }) ); + new Setting(containerEl) + .setName("Show File Extension") + .setDesc("Enable this to show file extension.") + .addToggle((boolean) => + boolean + .setValue(plugin.settings.showFileExtension) + .onChange((value) => { + plugin.settings.showFileExtension = value; + plugin.saveData(plugin.settings); + + plugin.setActivity( + this.app.vault.getName(), + plugin.currentFile.basename, + plugin.currentFile.extension + ); + }) + ); + + containerEl.createEl("h3", { text: "Time Settings" }); + new Setting(containerEl) + .setName("Use Obsidian Total Time") + .setDesc( + "Enable to use the total time you have been using Obsidian, instead of the time spent editing a single file." + ) + .addToggle((boolean) => { + boolean.setValue(plugin.settings.useLoadedTime).onChange((value) => { + plugin.settings.useLoadedTime = value; + plugin.saveData(plugin.settings); + + plugin.setActivity( + this.app.vault.getName(), + plugin.currentFile.basename, + plugin.currentFile.extension + ); + }); + }); + + containerEl.createEl("h3", { text: "Notice Settings" }); new Setting(containerEl) .setName("Show Notices") .setDesc("Enable this to show connection Notices.") @@ -66,7 +132,11 @@ export class DiscordRPCSettingsTab extends PluginSettingTab { this.logger.logIgnoreNoNotice("Notices Disabled"); } - plugin.setActivity(this.app.vault.getName(), "..."); + plugin.setActivity( + this.app.vault.getName(), + plugin.currentFile.basename, + plugin.currentFile.extension + ); }) ); } diff --git a/src/settings/settings.ts b/src/settings/settings.ts index a75609d..730084e 100644 --- a/src/settings/settings.ts +++ b/src/settings/settings.ts @@ -2,6 +2,9 @@ export class DiscordRPCSettings { showVaultName: boolean = true; showCurrentFileName: boolean = true; showPopups: boolean = true; + customVaultName: string = ""; + showFileExtension: boolean = false; + useLoadedTime: boolean = false; } export enum PluginState {