import {RssFeedItem} from "../parser/rssParser"; import {createNewNote, openInBrowser, pasteToNote} from "../functions"; import RssReaderPlugin from "../main"; import {htmlToMarkdown, Notice} from "obsidian"; import {copy} from "obsidian-community-lib"; import {TagModal} from "../modals/TagModal"; import t from "../l10n/locale"; export default class Action { static CREATE_NOTE = new Action(t("create_note"), "create-new", (plugin, item) : Promise<void> => { return createNewNote(plugin, item); }); static PASTE = new Action(t("paste_to_note"), "paste", (plugin, item) : Promise<void> => { return pasteToNote(plugin, item); }); static COPY = new Action(t("copy_to_clipboard"), "documents", ((_, item) : Promise<void> => { return copy(htmlToMarkdown(item.content)); })); static OPEN = new Action(t("open_browser"), "open-elsewhere-glyph", ((_, item) : Promise<void> => { openInBrowser(item); return Promise.resolve(); })); static TAGS = new Action(t("edit_tags"), "tag-glyph", (((plugin, item) => { const modal = new TagModal(plugin, item.tags); modal.onClose = async () => { item.tags = modal.tags; const items = plugin.settings.items; await plugin.writeFeedContent(() => { return items; }); }; modal.open(); return Promise.resolve(); }))); static READ = new Action(t("mark_as_read_unread"), "eye", ((async (plugin, item) : Promise<void> => { if (item.read) { item.read = false; new Notice(t("marked_as_unread")); } else { item.read = true; new Notice(t("marked_as_read")); } const items = plugin.settings.items; await plugin.writeFeedContent(() => { return items; }); return Promise.resolve(); }))); static FAVORITE = new Action(t("mark_as_favorite_remove"), "star", ((async (plugin, item) : Promise<void> => { if (item.favorite) { item.favorite = false; new Notice(t("removed_from_favorites")); } else { item.favorite = true; new Notice(t("added_to_favorites")); } const items = plugin.settings.items; await plugin.writeFeedContent(() => { return items; }); return Promise.resolve(); }))); static actions = Array.of(Action.FAVORITE, Action.READ, Action.TAGS, Action.CREATE_NOTE, Action.PASTE, Action.COPY, Action.OPEN); readonly name: string; readonly icon: string; readonly processor: (plugin: RssReaderPlugin, value: RssFeedItem) => Promise<void>; constructor(name: string, icon: string, processor: (plugin: RssReaderPlugin, item: RssFeedItem) => Promise<void>) { this.name = name; this.icon = icon; this.processor = processor; } }