Add ribbonIcon with ExoCommands
Add ExoCommand that opens random old note
This commit is contained in:
parent
17a3bcb009
commit
4662be38ac
|
@ -0,0 +1,7 @@
|
|||
import {App} from "obsidian";
|
||||
|
||||
export default interface ExoCommand {
|
||||
name: string;
|
||||
|
||||
execute(app: App): Promise<void>;
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
import OpenRandomNoteExoCommand from "./OpenRandomNoteExoCommand";
|
||||
import ExoCommand from "./ExoCommand";
|
||||
|
||||
export default class ExoCommands {
|
||||
static all(): ExoCommand[] {
|
||||
return [
|
||||
new OpenRandomNoteExoCommand()
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
import {FuzzySuggestModal} from "obsidian";
|
||||
import ExoCommand from "./ExoCommand";
|
||||
import ExoCommands from "./ExoCommands";
|
||||
|
||||
export class ExoCommandsModal extends FuzzySuggestModal<ExoCommand> {
|
||||
|
||||
getItems(): ExoCommand[] {
|
||||
return ExoCommands.all();
|
||||
}
|
||||
|
||||
getItemText(cmd: ExoCommand): string {
|
||||
return cmd.name;
|
||||
}
|
||||
|
||||
async onChooseItem(cmd: ExoCommand, evt: MouseEvent | KeyboardEvent) {
|
||||
await cmd.execute(this.app);
|
||||
}
|
||||
}
|
|
@ -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<void> {
|
||||
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.");
|
||||
}
|
||||
}
|
||||
}
|
24
main.ts
24
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<void> {
|
||||
new Notice('This is Exocortex!');
|
||||
}
|
||||
|
||||
onunload() {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue