blob: e4af064d65c82625d77e0193157921df5f99dd04 [file] [log] [blame]
avm999634c1a6792020-08-31 21:30:42 +02001const defaultOptions = {
2 'list': true,
3 'thread': true,
4 'threadall': false,
5 'fixedtoolbar': false,
6 'redirect': false,
7 'history': false,
8 'loaddrafts': false,
9 'batchduplicate': false,
10 'escalatethreads': false,
11 'movethreads': false,
12 'increasecontrast': false,
13 'stickysidebarheaders': false,
14 'profileindicator': false,
avm99963ad65e752020-09-01 00:13:59 +020015 'profileindicatoralt': false,
16 'profileindicatoralt_months': 12,
avm999630bc113a2020-09-07 13:02:11 +020017 'ccdarktheme': false,
18 'ccdarktheme_mode': 'switch',
19 'ccdarktheme_switch_enabled': true,
avm99963129942f2020-09-08 02:07:18 +020020 'ccforcehidedrawer': false,
avm999638e0c1002020-12-03 16:54:20 +010021 'ccdragndropfix': false,
avm99963f5923962020-12-07 16:44:37 +010022 'batchlock': false,
avm99963b38b7412020-12-11 17:59:02 +010023 'smei_sortdirection': false,
avm99963698d3762021-02-16 01:19:54 +010024 'enhancedannouncementsdot': false,
avm99963d98126f2021-02-17 10:44:36 +010025 'repositionexpandthread': false,
avm999634c1a6792020-08-31 21:30:42 +020026};
27
avm99963ad65e752020-09-01 00:13:59 +020028const specialOptions = [
29 'profileindicatoralt_months',
avm999630bc113a2020-09-07 13:02:11 +020030 'ccdarktheme_mode',
31 'ccdarktheme_switch_enabled',
avm999638e0c1002020-12-03 16:54:20 +010032 'ccdragndropfix',
avm99963ad65e752020-09-01 00:13:59 +020033];
34
avm999634c1a6792020-08-31 21:30:42 +020035const deprecatedOptions = [
36 'escalatethreads',
37 'movethreads',
38 'batchduplicate',
39];
40
41function isEmpty(obj) {
42 return Object.keys(obj).length === 0;
43}
44
45function cleanUpOptions(options) {
46 console.log('[cleanUpOptions] Previous options', options);
avm99963ad65e752020-09-01 00:13:59 +020047
48 if (typeof options !== 'object' || options === null) {
49 options = defaultOptions;
50 } else {
51 var ok = true;
52 for (const [opt, value] of Object.entries(defaultOptions)) {
53 if (!(opt in options)) {
54 ok = false;
55 options[opt] = value;
56 }
avm999634c1a6792020-08-31 21:30:42 +020057 }
58 }
59
60 console.log('[cleanUpOptions] New options', options);
61
62 if (!ok) {
63 chrome.storage.sync.set(options);
64 }
65
66 return options;
67}
avm999638e0c1002020-12-03 16:54:20 +010068
69// This method is based on the fact that when building the extension for Firefox
70// the browser_specific_settings.gecko entry is included.
71function isFirefox() {
72 var manifest = chrome.runtime.getManifest();
73 return manifest.browser_specific_settings !== undefined &&
74 manifest.browser_specific_settings.gecko !== undefined;
75}