diff --git a/RefresherModal.ts b/RefresherModal.ts index fae100f..e8595f9 100644 --- a/RefresherModal.ts +++ b/RefresherModal.ts @@ -1,11 +1,11 @@ -import { App, Modal } from "obsidian"; +import { App, Modal, TFile } from "obsidian"; export class RefresherModal extends Modal { - private summaries: { name: string; summary: string }[] | null; + private summaries: { file: TFile; summary: string }[] | null; constructor( app: App, - summaries: { name: string; summary: string }[] | null + summaries: { file: TFile; summary: string }[] | null ) { super(app); this.summaries = summaries; @@ -27,8 +27,17 @@ export class RefresherModal extends Modal { contentEl.createEl("h2", { text: "Daily refresher" }); this.summaries?.forEach((note) => { - const noteName = note.name.replace(/\.md$/, ""); - contentEl.createEl("h3", { text: noteName }); + const noteName = note.file.basename; + const noteLink = contentEl.createEl("a", { + text: noteName, + href: note.file.path, + cls: "note-link", + }); + noteLink.addEventListener("click", (e) => { + e.preventDefault(); + this.app.workspace.openLinkText(note.file.path, note.file.path); + this.close(); + }); contentEl.createEl("p", { text: note.summary }); }); } @@ -38,8 +47,16 @@ export class RefresherModal extends Modal { contentEl.empty(); } - updateSummaries(summaries: { name: string; summary: string }[]) { + updateSummaries(summaries: { file: TFile; summary: string }[]) { this.summaries = summaries; this.displaySummaries(this.contentEl); } + + displayError(errorMessage: string) { + this.summaries = []; + const { contentEl } = this; + contentEl.empty(); + contentEl.createEl("h2", { text: "Daily refresher" }); + contentEl.createEl("p", { text: "Error: " + errorMessage }); + } } diff --git a/main.ts b/main.ts index 8d6883b..dc09f74 100644 --- a/main.ts +++ b/main.ts @@ -34,6 +34,15 @@ export default class NotesRefresher extends Plugin { this.addSettingTab(new NotesRefresherSettingTab(this.app, this)); this.addRibbonIcon("clock-4", "Get note summaries", async () => { + if (!this.settings.apiKey) { + const modal = new RefresherModal(this.app, null); + modal.open(); + modal.displayError( + "API key is not provided. Please enter your OpenAI API key in settings." + ); + return; + } + const modal = new RefresherModal(this.app, null); modal.open(); @@ -89,8 +98,8 @@ export default class NotesRefresher extends Plugin { async summarizeNotes( notes: TFile[] - ): Promise<{ name: string; summary: string }[]> { - const summaries: { name: string; summary: string }[] = []; + ): Promise<{ file: TFile; summary: string }[]> { + const summaries: { file: TFile; summary: string }[] = []; const apiKey = this.settings.apiKey; const llm = new ChatOpenAI({ @@ -119,7 +128,7 @@ export default class NotesRefresher extends Plugin { const fullSummary = result.text; summaries.push({ - name: note.name, + file: note, summary: fullSummary.trim(), }); } diff --git a/manifest.json b/manifest.json index 14b184a..c12066e 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "id": "notes-refresher", "name": "Notes Refresher", - "version": "1.0.2", + "version": "1.1.0", "minAppVersion": "1.6.5", "description": "Provides AI-generated summaries (GPT) of three notes from your Vault every day.", "author": "Connor Park", diff --git a/package.json b/package.json index afcdc92..3404a4a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "notes-refresher", - "version": "1.0.2", + "version": "1.1.0", "description": "Provides AI-generated summaries (GPT) of three notes from your Vault every day.", "main": "main.js", "scripts": { diff --git a/styles.css b/styles.css index 969147c..4999117 100644 --- a/styles.css +++ b/styles.css @@ -8,8 +8,16 @@ margin: 0 auto; } + @keyframes spin { to { transform: rotate(360deg); } } + +.note-link { + font-size: 1.5em; + font-weight: 600; + display: block; + margin-bottom: 0.5em; +} diff --git a/versions.json b/versions.json index 8a45b2e..7c0b2b8 100644 --- a/versions.json +++ b/versions.json @@ -1,5 +1,6 @@ { "1.0.0": "1.6.5", "1.0.1": "1.6.5", - "1.0.2": "1.6.5" + "1.0.2": "1.6.5", + "1.1.0": "1.6.5" }