diff --git a/src/extension/_locales/ko-kr/messages.json b/src/extension/_locales/ko/messages.json similarity index 100% rename from src/extension/_locales/ko-kr/messages.json rename to src/extension/_locales/ko/messages.json diff --git a/src/extension/_locales/pt-br/messages.json b/src/extension/_locales/pt_BR/messages.json similarity index 100% rename from src/extension/_locales/pt-br/messages.json rename to src/extension/_locales/pt_BR/messages.json diff --git a/src/extension/_locales/zh-cn/messages.json b/src/extension/_locales/zh_CN/messages.json similarity index 100% rename from src/extension/_locales/zh-cn/messages.json rename to src/extension/_locales/zh_CN/messages.json diff --git a/src/extension/_locales/zh-tw/messages.json b/src/extension/_locales/zh_TW/messages.json similarity index 100% rename from src/extension/_locales/zh-tw/messages.json rename to src/extension/_locales/zh_TW/messages.json diff --git a/src/extension/background.js b/src/extension/background.js index 20b2c1045..b8dc3f52f 100644 --- a/src/extension/background.js +++ b/src/extension/background.js @@ -28,7 +28,6 @@ import { getGitHubSettings, setConfig, getConfig, - updateProjectConfigs, populateUrlCache, queryUrlCache, setDisplay, @@ -46,10 +45,10 @@ const LANGS = [ 'fr', 'it', 'ja', - 'ko-kr', - 'pt-br', - 'zh-cn', - 'zh-tw', + 'ko', + 'pt_BR', + 'zh_CN', + 'zh_TW', ]; /** @@ -321,15 +320,16 @@ function toggle(id) { } /** - * Retrieves the sidekick language preferred by the user. + * Retrieves the help language based on the language preferred by the user. * The default language is en. * @private * @return {string} The language */ -function getLanguage() { - return navigator.languages - .map((prefLang) => LANGS.find((lang) => prefLang.toLowerCase().startsWith(lang))) - .filter((lang) => !!lang)[0] || LANGS[0]; +function getHelpLanguage() { + const uLang = chrome.i18n.getUILanguage(); + const lang = LANGS.find((l) => uLang.replace('-', '_') === l + || l.startsWith(uLang.split('_')[0])) || LANGS[0]; + return lang.replace('_', '-').toLowerCase(); } /** @@ -337,9 +337,14 @@ function getLanguage() { * while respecting previous user acknowledgements. */ async function updateHelpContent() { - const hlxSidekickHelpContent = await getConfig('sync', 'hlxSidekickHelpContent') || []; - log.debug('existing help content', hlxSidekickHelpContent); - const lang = getLanguage(); + // don't fetch new help content for at least 4 hours + const helpContentFetched = await getConfig('local', 'hlxSidekickHelpContentFetched'); + if ((helpContentFetched || 0) > Date.now() - 14400000) { + return; + } + const helpContent = await getConfig('sync', 'hlxSidekickHelpContent') || []; + log.debug('existing help content', helpContent); + const lang = getHelpLanguage(); const resp = await fetch(`https://www.hlx.live/tools/sidekick/${lang}/help.json`); if (resp.ok) { try { @@ -362,9 +367,9 @@ async function updateHelpContent() { return true; }) .map((incoming) => { - const index = hlxSidekickHelpContent.findIndex((existing) => existing.id === incoming.id); + const index = helpContent.findIndex((existing) => existing.id === incoming.id); return { - ...(index >= 0 ? hlxSidekickHelpContent[index] : {}), + ...(index >= 0 ? helpContent[index] : {}), ...incoming, steps: incoming.steps .split(',') @@ -376,6 +381,10 @@ async function updateHelpContent() { await setConfig('sync', { hlxSidekickHelpContent: updatedHelpContent, }); + // remember when help content was last fetched + await setConfig('local', { + hlxSidekickHelpContentFetched: Date.now(), + }); } catch (e) { log.error('failed to update help content', e); } @@ -732,7 +741,6 @@ const internalActions = { // }); await updateHelpContent(); - await updateProjectConfigs(); await setUserAgentHeader(); await updateAdminAuthHeaderRules(); log.info('sidekick extension initialized'); diff --git a/src/extension/module.js b/src/extension/module.js index f1796c91b..7fe208786 100644 --- a/src/extension/module.js +++ b/src/extension/module.js @@ -251,10 +251,10 @@ 'fr', 'it', 'ja', - 'ko-kr', - 'pt-br', - 'zh-cn', - 'zh-tw', + 'ko', + 'pt_BR', + 'zh_CN', + 'zh_TW', ]; /** @@ -529,7 +529,9 @@ */ function getLanguage() { return navigator.languages - .map((prefLang) => LANGS.find((lang) => prefLang.toLowerCase().startsWith(lang))) + .map((uLang) => LANGS + .find((lang) => ((uLang.replace('-', '_') === lang || lang.startsWith(uLang.split('-')[0])) + ? lang : undefined))) .filter((lang) => !!lang)[0] || LANGS[0]; } diff --git a/src/extension/utils.js b/src/extension/utils.js index 0a89c7972..98e4ccdbb 100644 --- a/src/extension/utils.js +++ b/src/extension/utils.js @@ -711,23 +711,3 @@ export function toggleDisplay(cb) { setDisplay(!display, cb); }); } - -/** - * Updates the legacy project configurations to the new format. - * @deprecated - * @todo remove - */ -export async function updateProjectConfigs() { - const configs = await getConfig('sync', 'hlxSidekickConfigs'); - const projects = await getConfig('sync', 'hlxSidekickProjects'); - if (configs && !projects) { - // migrate old to new project configs - for (let i = 0; i < configs.length; i += 1) { - // eslint-disable-next-line no-await-in-loop - await setProject(configs[i]); - } - // TODO: remove old project configs - // await removeConfig('sync', 'hlxSidekickConfigs'); - log.info('project config updated'); - } -} diff --git a/test/extension/utils.test.js b/test/extension/utils.test.js index 26e257d0d..b879e825a 100644 --- a/test/extension/utils.test.js +++ b/test/extension/utils.test.js @@ -335,17 +335,6 @@ describe('Test extension utils', () => { })).to.be.true; }); - it('updateProjectConfigs', async () => { - sandbox.spy(window.chrome.storage.sync, 'set'); - sandbox.spy(window.chrome.storage.sync, 'remove'); - await utils.removeConfig('sync', 'hlxSidekickProjects'); - await utils.updateProjectConfigs(); - // expect(chrome.storage.sync.remove.calledWith('hlxSidekickConfigs')).to.be.true; - expect(chrome.storage.sync.set.calledWith({ - hlxSidekickProjects: ['test/legacy-project'], - })).to.be.true; - }); - it('setDisplay', async () => { const spy = sandbox.spy(window.chrome.storage.local, 'set'); await utils.setDisplay(true);