From 2d0af0b10cf58140a947837d4a2504417f357406 Mon Sep 17 00:00:00 2001 From: kamtschatka Date: Sun, 9 Jun 2024 12:23:26 +0200 Subject: feature(extension): Add a context menu to open your hoarder saves. Fixes #188 (#206) * Feature request: Browser extension "Open your Hoarder saves" #188 Adds a context menu entry when a hoarder instance is configured and removes it again, if it is not configured anymore * Feature request: Browser extension "Open your Hoarder saves" #188 moved storage related functions to settings.ts fixed issues with context menu registration * only fire callback when the settings change --------- Co-authored-by: kamtschatka Co-authored-by: MohamedBassem --- .../browser-extension/src/background/background.ts | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 apps/browser-extension/src/background/background.ts (limited to 'apps/browser-extension/src/background') diff --git a/apps/browser-extension/src/background/background.ts b/apps/browser-extension/src/background/background.ts new file mode 100644 index 00000000..9c4604af --- /dev/null +++ b/apps/browser-extension/src/background/background.ts @@ -0,0 +1,49 @@ +import { + getPluginSettings, + Settings, + subscribeToSettingsChanges, +} from "../utils/settings.ts"; + +const OPEN_HOARDER_ID = "open-hoarder"; + +function checkSettingsState(settings: Settings) { + if (settings?.address) { + registerContextMenu(); + } else { + chrome.contextMenus.remove(OPEN_HOARDER_ID); + } +} + +/** + * Registers a context menu button to open a tab with the currently configured hoarder instance + */ +function registerContextMenu() { + chrome.contextMenus.create({ + id: OPEN_HOARDER_ID, + title: "Open Hoarder", + contexts: ["action"], + }); +} + +/** + * Reads the current settings and opens a new tab with hoarder + * @param info the information about the click in the context menu + */ +function handleContextMenuClick(info: chrome.contextMenus.OnClickData) { + const { menuItemId } = info; + if (menuItemId === OPEN_HOARDER_ID) { + getPluginSettings().then((settings: Settings) => { + chrome.tabs.create({ url: settings.address, active: true }); + }); + } +} + +getPluginSettings().then((settings: Settings) => { + checkSettingsState(settings); +}); + +subscribeToSettingsChanges((settings) => { + checkSettingsState(settings); +}); + +chrome.contextMenus.onClicked.addListener(handleContextMenuClick); -- cgit v1.2.3-70-g09d2