diff --git a/src/background.ts b/src/background.ts index 2084324e..1cc18952 100644 --- a/src/background.ts +++ b/src/background.ts @@ -3,6 +3,7 @@ import browser from 'webextension-polyfill' import { onError } from './seqta/utils/onError'; import { SettingsState } from "./types/storage"; import DownloadTheme from "./seqta/ui/themes/downloadTheme"; +import localforage from "localforage"; browser.storage.local.get([ "telemetry" ]).then((telemetry) => { if (telemetry.telemetry === true) { @@ -17,6 +18,26 @@ browser.storage.local.get([ "telemetry" ]).then((telemetry) => { } }) +const DeleteDownloadedTheme = async (themeID: string) => { + console.log('DeleteDownloaded Theme:', themeID) + await localforage.removeItem(themeID); + + const availableThemesList = await localforage.getItem('availableThemes') as string[]; + const updatedThemesList = availableThemesList.filter(theme => theme !== themeID); + + await localforage.setItem('availableThemes', updatedThemesList); + + browser.tabs.query({}).then(function (tabs) { + for (let tab of tabs) { + if (tab.url?.includes('chrome-extension://')) { + browser.tabs.sendMessage(tab.id!, { + info: 'themeChanged' + }); + } + } + }); +} + export const openDB = () => { return new Promise((resolve, reject) => { const request = indexedDB.open('MyDatabase', 1); @@ -145,6 +166,10 @@ browser.runtime.onMessage.addListener((request: any, _sender: any, sendResponse: case 'DownloadTheme': DownloadTheme(request.body.theme); break; + + case 'DeleteDownloadedTheme': + DeleteDownloadedTheme(request.body); + break; default: console.log('Unknown request type'); diff --git a/src/interface/components/ThemeCover.tsx b/src/interface/components/ThemeCover.tsx index d1dc6ddf..2ad30b0c 100644 --- a/src/interface/components/ThemeCover.tsx +++ b/src/interface/components/ThemeCover.tsx @@ -22,10 +22,14 @@ export const ThemeCover: React.FC = ({ onThemeDelete, }) => { const [uploading, setUploading] = useState(false); - const handleThemeClick = () => { + const handleThemeClick = async () => { if (isEditMode) return; if (downloaded) { - sendThemeUpdate(theme as DownloadedTheme, true) + await sendThemeUpdate(theme as DownloadedTheme, true) + browser.runtime.sendMessage({ + type: 'DeleteDownloadedTheme', + body: theme.id + }) } else { console.log(theme) onThemeSelect(theme.id); diff --git a/src/interface/components/ThemeSelector.tsx b/src/interface/components/ThemeSelector.tsx index a5d55b63..4ce99f87 100644 --- a/src/interface/components/ThemeSelector.tsx +++ b/src/interface/components/ThemeSelector.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useState, useCallback, forwardRef, useImperativeHandle, ForwardRefExoticComponent, RefAttributes } from 'react'; import { listThemes, deleteTheme, setTheme, disableTheme, getDownloadedThemes } from '../hooks/ThemeManagment'; import { ThemeCover } from './ThemeCover'; -import Browser from 'webextension-polyfill'; +import browser from 'webextension-polyfill'; import { CustomTheme, DownloadedTheme } from '../types/CustomThemes'; import { useSettingsContext } from '../SettingsContext'; import { SettingsState } from '../types/AppProps'; @@ -37,14 +37,14 @@ const ThemeSelector: ForwardRefExoticComponent & fetchThemes(); }; - Browser.runtime.onMessage.addListener((message) => { + browser.runtime.onMessage.addListener((message) => { if (message.info === 'themeChanged') { handleThemeChange(); } }); return () => { - Browser.runtime.onMessage.removeListener((message) => { + browser.runtime.onMessage.removeListener((message) => { if (message.info === 'themeChanged') { handleThemeChange(); } @@ -133,7 +133,7 @@ const ThemeSelector: ForwardRefExoticComponent & ))}