diff --git a/src/components/OptionsForm.vue b/src/components/OptionsForm.vue index eba7f11..eb09c96 100644 --- a/src/components/OptionsForm.vue +++ b/src/components/OptionsForm.vue @@ -80,29 +80,6 @@ onMounted(() => { @save="saveKeyValue" /> - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/components/PanelHeader.vue b/src/components/PanelHeader.vue index 8225a9f..6d70a93 100644 --- a/src/components/PanelHeader.vue +++ b/src/components/PanelHeader.vue @@ -58,13 +58,14 @@ console.log('config:', config)
- +
@@ -96,10 +97,8 @@ console.log('config:', config)
{ chrome.runtime.onInstalled.addListener(onInstalled) chrome.runtime.onStartup.addListener(onStartup) - chrome.runtime.onMessage.addListener(onMessage) chrome.storage.onChanged.addListener(onChanged) + chrome.runtime.onMessage.addListener(onMessage) chrome.commands?.onCommand.addListener(onCommand) chrome.contextMenus?.onClicked.addListener(onClicked) }) async function setUninstallURL() { const manifest = chrome.runtime.getManifest() - const url = new URL(`${manifest.homepage_url}`) + if (!manifest.homepage_url) return console.warn('No manifest.homepage_url') + const url = new URL(manifest.homepage_url) url.pathname = '/uninstall/' url.searchParams.append('version', manifest.version) await chrome.runtime.setUninstallURL(url.href) - console.debug(`setUninstallURL: ${url.href}`) +} + +async function setDefaultOptions(defaultOptions: object) { + console.log('setDefaultOptions', defaultOptions) + options = await getOptions() + let changed = false + for (const [key, value] of Object.entries(defaultOptions)) { + // console.log(`${key}: default: ${value} current: ${options[key]}`) + if (options[key] === undefined) { + changed = true + options[key] = value + console.log(`Set %c${key}:`, 'color: Khaki', value) + } + } + if (changed) { + await chrome.storage.sync.set({ options }) + console.log('changed options:', options) + } + return options } async function onInstalled(details: chrome.runtime.InstalledDetails) { @@ -34,14 +54,14 @@ async function onInstalled(details: chrome.runtime.InstalledDetails) { options = await setDefaultOptions(defaultOptions) console.debug('options:', options) - createContextMenus(options) + createContextMenus(options).catch(console.warn) + setUninstallURL().catch(console.warn) + const config = useAppConfig() + console.log('config:', config) const manifest = chrome.runtime.getManifest() console.debug('manifest:', manifest) - // await chrome.runtime.setUninstallURL(`${manifest.homepage_url}/issues`) - await setUninstallURL() - if (details.reason === chrome.runtime.OnInstalledReason.INSTALL) { // await chrome.runtime.openOptionsPage() // const hasPerms = await checkPerms(manifest) @@ -58,7 +78,7 @@ async function onInstalled(details: chrome.runtime.InstalledDetails) { } else if (details.reason === chrome.runtime.OnInstalledReason.UPDATE) { if (options.showUpdate) { if (manifest.version !== details.previousVersion) { - const url = `${manifest.homepage_url}/releases/tag/${manifest.version}` + const url = `${config.github_url}/releases/tag/${manifest.version}` await chrome.tabs.create({ active: false, url }) } } @@ -72,75 +92,56 @@ async function onStartup() { // NOTE: Confirm these checks are still necessary... options = await getOptions() console.debug('options:', options) - createContextMenus(options) - - // const manifest = chrome.runtime.getManifest() - // console.debug('manifest:', manifest) - // await chrome.runtime.setUninstallURL(`${manifest.homepage_url}/issues`) - await setUninstallURL() - } -} - -async function setDefaultOptions(defaultOptions: object) { - console.log('setDefaultOptions', defaultOptions) - options = await getOptions() - let changed = false - for (const [key, value] of Object.entries(defaultOptions)) { - // console.log(`${key}: default: ${value} current: ${options[key]}`) - if (options[key] === undefined) { - changed = true - options[key] = value - console.log(`Set %c${key}:`, 'color: Khaki', value) - } - } - if (changed) { - await chrome.storage.sync.set({ options }) - console.log('changed options:', options) - } - return options -} - -function onMessage( - message: any, - _sender: chrome.runtime.MessageSender, - _sendResponse: Function, -) { - console.log('background/index.ts: onMessage:', message) - if (message === 'openPopup') { - openPopup().catch(console.log) + createContextMenus(options).catch(console.warn) + setUninstallURL().catch(console.warn) } } function onChanged(changes: object, namespace: string) { - // console.debug('onChanged:', changes, namespace) + // console.debug('background/index.ts: onChanged:', changes, namespace) for (const [key, { oldValue, newValue }] of Object.entries(changes)) { if (namespace === 'sync' && key === 'options' && oldValue && newValue) { options = newValue if (oldValue.contextMenu !== newValue.contextMenu) { if (newValue?.contextMenu) { console.log('%c Enabled contextMenu...', 'color: SpringGreen') - createContextMenus(newValue) + createContextMenus(newValue).catch(console.warn) } else { console.log('%c Disabled contextMenu...', 'color: OrangeRed') - chrome.contextMenus?.removeAll() + chrome.contextMenus?.removeAll().catch(console.warn) } } } } } +function onMessage( + message: any, + _sender: chrome.runtime.MessageSender, + _sendResponse: Function, +) { + console.log('background/index.ts: onMessage:', message) + if (message === 'openPopup') { + openPopup().catch(console.log) + } +} + async function onCommand(command: string, tab?: chrome.tabs.Tab) { console.debug('onCommand:', command, tab) - if (command === 'openOptions') { - await chrome.runtime.openOptionsPage() - } else if (command === 'openExtPanel') { - await openExtPanel() - } else if (command === 'openSidePanel') { - openSidePanel() - } else if (command === 'cmdExtractAll') { - await extractAndOpen(options) - } else { - console.warn(`Unknown Command: ${command}`) + try { + if (command === 'openOptions') { + await chrome.runtime.openOptionsPage() + } else if (command === 'openExtPanel') { + await openExtPanel() + } else if (command === 'openSidePanel') { + openSidePanel() + } else if (command === 'cmdExtractAll') { + await extractAndOpen(options) + } else { + console.warn(`Unknown Command: ${command}`) + } + } catch (e) { + console.warn(e) } } diff --git a/src/entrypoints/background/menus.ts b/src/entrypoints/background/menus.ts index ce2ed85..02b4220 100644 --- a/src/entrypoints/background/menus.ts +++ b/src/entrypoints/background/menus.ts @@ -21,16 +21,12 @@ const contexts: chrome.contextMenus.CreateProperties[] = config.map((entry) => ( : { title: i18n.t(`ctx.${entry.id}` as any) }), })) -// NOTE: Below is ported from VanillaJS - -export function createContextMenus(options: Options) { +export async function createContextMenus(options: Options) { console.log('createContextMenus:', options) if (!options.contextMenu) return console.log('Disabled: options.contextMenu') if (!chrome.contextMenus) return console.log('Unsupported: chrome.contextMenus') - chrome.contextMenus.removeAll().then(() => { - contexts.forEach((item) => { - // console.log(item.id, options[item.id!]) - chrome.contextMenus.create(item) - }) + await chrome.contextMenus.removeAll() + contexts.forEach((item) => { + chrome.contextMenus.create(item) }) } diff --git a/src/entrypoints/options/App.vue b/src/entrypoints/options/App.vue index 985acbb..a120431 100644 --- a/src/entrypoints/options/App.vue +++ b/src/entrypoints/options/App.vue @@ -1,5 +1,5 @@