diff --git a/src/interface/components/ThemeSelector.tsx b/src/interface/components/ThemeSelector.tsx index 7f873b19..9f3d9555 100644 --- a/src/interface/components/ThemeSelector.tsx +++ b/src/interface/components/ThemeSelector.tsx @@ -26,8 +26,6 @@ const ThemeSelector: ForwardRefExoticComponent & try { const { themes, selectedTheme } = await listThemes(); - console.log(await listThemes()); - setThemes(themes); setSelectedThemeId(selectedTheme ? selectedTheme : null); } catch (error) { diff --git a/src/interface/hooks/ThemeManagment.tsx b/src/interface/hooks/ThemeManagment.ts similarity index 72% rename from src/interface/hooks/ThemeManagment.tsx rename to src/interface/hooks/ThemeManagment.ts index 2d68b7ac..1619a8d4 100644 --- a/src/interface/hooks/ThemeManagment.tsx +++ b/src/interface/hooks/ThemeManagment.ts @@ -62,39 +62,43 @@ export const deleteTheme = async (themeID: string) => { }); } -export const sendThemeUpdate = debounce((updatedTheme: CustomTheme, saveTheme?: boolean) => { +export const sendThemeUpdate = (updatedTheme: CustomTheme, saveTheme?: boolean) => { // Create a copy of the updatedTheme object const updatedThemeCopy: CustomTheme = { ...updatedTheme }; saveTheme = saveTheme || false; - // Convert image blobs to base64 - const base64ConversionPromises = updatedThemeCopy.CustomImages.map(async (image) => { - const base64 = await blobToBase64(image.blob); - return { ...image, base64 }; + // Send the updated theme (without image data) to the content script for live preview + browser.runtime.sendMessage({ + type: 'currentTab', + info: 'UpdateThemePreview', + body: { + ...updatedThemeCopy, + CustomImages: updatedThemeCopy.CustomImages.map(image => ({ + id: image.id, + variableName: image.variableName, + })), + }, + save: saveTheme, }); - Promise.all(base64ConversionPromises) - .then((convertedImages) => { - // Update the CustomImages array with the converted base64 images - updatedThemeCopy.CustomImages = convertedImages; - - // Send the updated theme to the content script for live preview - browser.runtime.sendMessage({ - type: 'currentTab', - info: 'UpdateThemePreview', - body: updatedThemeCopy, - save: saveTheme, - }); - - if (saveTheme) { - browser.runtime.sendMessage({ type: 'currentTab', info: 'CloseThemeCreator' }) - } - }) - .catch((error) => { - console.error('Error converting image blobs to base64:', error); + // Send image data separately + updatedThemeCopy.CustomImages.forEach(async (image) => { + const base64 = await blobToBase64(image.blob); + browser.runtime.sendMessage({ + type: 'currentTab', + info: 'UpdateThemeImageData', + body: { + id: image.id, + base64, + }, }); -}, 100); + }); + + if (saveTheme) { + browser.runtime.sendMessage({ type: 'currentTab', info: 'CloseThemeCreator' }); + } +}; // Helper function to convert a Blob to base64 const blobToBase64 = (blob: Blob): Promise => { diff --git a/src/seqta/ui/Themes.ts b/src/seqta/ui/Themes.ts index b7b02ee2..d1326353 100644 --- a/src/seqta/ui/Themes.ts +++ b/src/seqta/ui/Themes.ts @@ -1,6 +1,6 @@ import browser from 'webextension-polyfill' import localforage from 'localforage'; -import { CustomImageBase64, CustomTheme, CustomThemeBase64, ThemeList } from '../../interface/types/CustomThemes'; +import { CustomImage, CustomImageBase64, CustomTheme, CustomThemeBase64, ThemeList } from '../../interface/types/CustomThemes'; const imageData: Record = {}; @@ -95,7 +95,7 @@ export const saveTheme = async (theme: CustomThemeBase64) => { } }; -export const UpdateThemePreview = async (updatedTheme: CustomThemeBase64) => { +export const UpdateThemePreview = async (updatedTheme: Omit & { CustomImages: Omit[] }) => { const { CustomCSS, CustomImages, defaultColour } = updatedTheme; // Update image data @@ -121,7 +121,7 @@ export const UpdateThemePreview = async (updatedTheme: CustomThemeBase64) => { } imageData[image.id] = { - url: updateImage(image), + url: '', variableName: image.variableName, }; }); @@ -133,14 +133,16 @@ export const UpdateThemePreview = async (updatedTheme: CustomThemeBase64) => { if (defaultColour !== '') { browser.storage.local.set({ selectedColor: defaultColour }); } +}; - // Apply custom images - CustomImages.forEach((image) => { - const imageUrl = imageData[image.id]?.url; - if (imageUrl) { - document.documentElement.style.setProperty('--' + image.variableName, `url(${imageUrl})`); - } - }); +export const UpdateImageData = (imageData2: { id: string; base64: string }) => { + const { id, base64 } = imageData2; + + if (imageData[id]) { + imageData[id].url = base64; + const { variableName } = imageData[id]; + document.documentElement.style.setProperty('--' + variableName, `url(${base64})`); + } }; function applyCustomCSS(customCSS: string) { diff --git a/src/seqta/utils/listeners/MessageListener.ts b/src/seqta/utils/listeners/MessageListener.ts index d4fe6875..0170d8e6 100644 --- a/src/seqta/utils/listeners/MessageListener.ts +++ b/src/seqta/utils/listeners/MessageListener.ts @@ -1,7 +1,7 @@ import browser from 'webextension-polyfill' import { MenuOptionsOpen, OpenMenuOptions, OpenWhatsNewPopup, closeSettings } from '../../../SEQTA'; -import { UpdateThemePreview, deleteTheme, disableTheme, getAvailableThemes, saveTheme, setTheme } from '../../ui/Themes'; +import { UpdateImageData, UpdateThemePreview, deleteTheme, disableTheme, getAvailableThemes, saveTheme, setTheme } from '../../ui/Themes'; import { CloseThemeCreator, OpenThemeCreator } from '../../ui/ThemeCreator'; export class MessageHandler { @@ -28,6 +28,11 @@ export class MessageHandler { sendResponse({ status: 'success' }); } break; + + case 'UpdateThemeImageData': + UpdateImageData(request.body); + sendResponse({ status: 'success' }); + break; case 'SaveTheme': saveTheme(request.body).then(() => {