From 818ba9ea1a6c46036a7ed448861217e63d3aa5be Mon Sep 17 00:00:00 2001 From: Shin'ya Ueoka Date: Mon, 3 Feb 2020 19:07:55 +0900 Subject: Synchronize settings via Firefox Sync --- src/settings/actions/setting.ts | 1 + src/settings/storage.ts | 25 ++++++++++++++++++------- 2 files changed, 19 insertions(+), 7 deletions(-) (limited to 'src/settings') diff --git a/src/settings/actions/setting.ts b/src/settings/actions/setting.ts index 589ec36..93ca5f8 100644 --- a/src/settings/actions/setting.ts +++ b/src/settings/actions/setting.ts @@ -26,6 +26,7 @@ const save = async(data: SettingData): Promise => { return set(data); }; + const switchToForm = (json: JSONTextSettings): actions.SettingAction => { try { // toSettings exercise validation diff --git a/src/settings/storage.ts b/src/settings/storage.ts index f375e58..55cca96 100644 --- a/src/settings/storage.ts +++ b/src/settings/storage.ts @@ -1,20 +1,31 @@ import SettingData, { DefaultSettingData } from '../shared/SettingData'; -export const load = async(): Promise => { - const { settings } = await browser.storage.local.get('settings'); - if (!settings) { - return DefaultSettingData; +const loadSettingData = async(): Promise => { + const { settings: syncSettings } = await browser.storage.sync.get('settings'); + if (syncSettings) { + return SettingData.fromJSON(syncSettings as any); } + const { settings: localSettings } = await browser.storage.local.get('settings'); + if (localSettings) { + return SettingData.fromJSON(localSettings as any); + } + return DefaultSettingData +}; + +export const load = async(): Promise => { try { - return SettingData.fromJSON(settings as any); + return loadSettingData(); } catch (e) { console.error('unable to load settings', e); return DefaultSettingData; } }; -export const save = (data: SettingData) => { - return browser.storage.local.set({ +export const save = async (data: SettingData) => { + await browser.storage.local.set({ + settings: data.toJSON(), + }); + return browser.storage.sync.set({ settings: data.toJSON(), }); }; -- cgit v1.2.3