From 4662be38ac65520677a7cff0a9d80ed1f3ade1bb Mon Sep 17 00:00:00 2001 From: kitelev Date: Mon, 30 Dec 2024 20:02:56 +0500 Subject: [PATCH] Add ribbonIcon with ExoCommands Add ExoCommand that opens random old note --- Commands/ExoCommand.ts | 7 +++++++ Commands/ExoCommands.ts | 10 ++++++++++ Commands/ExoCommandsModal.ts | 18 ++++++++++++++++++ Commands/OpenRandomNoteExoCommand.ts | 25 +++++++++++++++++++++++++ main.ts | 24 ++++-------------------- 5 files changed, 64 insertions(+), 20 deletions(-) create mode 100644 Commands/ExoCommand.ts create mode 100644 Commands/ExoCommands.ts create mode 100644 Commands/ExoCommandsModal.ts create mode 100644 Commands/OpenRandomNoteExoCommand.ts diff --git a/Commands/ExoCommand.ts b/Commands/ExoCommand.ts new file mode 100644 index 0000000..9cbbcaa --- /dev/null +++ b/Commands/ExoCommand.ts @@ -0,0 +1,7 @@ +import {App} from "obsidian"; + +export default interface ExoCommand { + name: string; + + execute(app: App): Promise; +} diff --git a/Commands/ExoCommands.ts b/Commands/ExoCommands.ts new file mode 100644 index 0000000..a113270 --- /dev/null +++ b/Commands/ExoCommands.ts @@ -0,0 +1,10 @@ +import OpenRandomNoteExoCommand from "./OpenRandomNoteExoCommand"; +import ExoCommand from "./ExoCommand"; + +export default class ExoCommands { + static all(): ExoCommand[] { + return [ + new OpenRandomNoteExoCommand() + ]; + } +} diff --git a/Commands/ExoCommandsModal.ts b/Commands/ExoCommandsModal.ts new file mode 100644 index 0000000..3b971e6 --- /dev/null +++ b/Commands/ExoCommandsModal.ts @@ -0,0 +1,18 @@ +import {FuzzySuggestModal} from "obsidian"; +import ExoCommand from "./ExoCommand"; +import ExoCommands from "./ExoCommands"; + +export class ExoCommandsModal extends FuzzySuggestModal { + + getItems(): ExoCommand[] { + return ExoCommands.all(); + } + + getItemText(cmd: ExoCommand): string { + return cmd.name; + } + + async onChooseItem(cmd: ExoCommand, evt: MouseEvent | KeyboardEvent) { + await cmd.execute(this.app); + } +} diff --git a/Commands/OpenRandomNoteExoCommand.ts b/Commands/OpenRandomNoteExoCommand.ts new file mode 100644 index 0000000..75aa31e --- /dev/null +++ b/Commands/OpenRandomNoteExoCommand.ts @@ -0,0 +1,25 @@ +import ExoCommand from "./ExoCommand"; +import {App, Notice} from "obsidian"; + +export default class OpenRandomNoteExoCommand implements ExoCommand { + name: string = "Рандомная заметка из прошлого"; + + async execute(app: App): Promise { + const files = app.vault.getFiles(); + const today = new Date(); + const lastMonth = new Date(today.getFullYear(), today.getMonth() - 1, today.getDate()).setHours(0, 0, 0, 0); // Дата месяц назад без времени + + // Фильтрация заметок с датой изменения раньше прошлого месяца + const oldNotes = files.filter(file => file.stat.mtime < lastMonth); + + if (oldNotes.length > 0) { + // Выбираем случайную заметку + const randomNote = oldNotes[Math.floor(Math.random() * oldNotes.length)]; + // Открываем её в активной панели + const leaf = app.workspace.getLeaf(false); + await leaf.openFile(randomNote); + } else { + new Notice("No old notes found."); + } + } +} diff --git a/main.ts b/main.ts index adb8ee0..9b14c7d 100644 --- a/main.ts +++ b/main.ts @@ -1,26 +1,10 @@ -import {Notice, Plugin} from 'obsidian'; +import {Plugin} from 'obsidian'; +import {ExoCommandsModal} from "./Commands/ExoCommandsModal"; export default class ExoPlugin extends Plugin { - async onload() { - this.addRibbonIcon('dice', 'Exo', () => { - this.showNotice(); + this.addRibbonIcon('star', 'Exocortex Commands List', () => { + new ExoCommandsModal(this.app).open(); }); - - this.addCommand({ - id: 'exo-first-notice', - name: 'Shows simple Notice', - callback: () => { - this.showNotice() - } - }) - } - - async showNotice(): Promise { - new Notice('This is Exocortex!'); - } - - onunload() { - } }