Files
desktop/src/zen/common/ZenUIMigration.sys.mjs

95 lines
3.0 KiB
JavaScript

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
import { AppConstants } from 'resource://gre/modules/AppConstants.sys.mjs';
class nsZenUIMigration {
PREF_NAME = 'zen.ui.migration.version';
MIGRATION_VERSION = 5;
init(isNewProfile) {
if (!isNewProfile) {
try {
this._migrate();
} catch (e) {
console.error('ZenUIMigration: Error during migration', e);
}
}
this.clearVariables();
if (this.shouldRestart) {
Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart);
}
}
get _migrationVersion() {
return Services.prefs.getIntPref(this.PREF_NAME, 0);
}
set _migrationVersion(value) {
Services.prefs.setIntPref(this.PREF_NAME, value);
}
_migrate() {
for (let i = 0; i <= this.MIGRATION_VERSION; i++) {
if (this._migrationVersion < i) {
this[`_migrateV${i}`]?.();
}
}
}
clearVariables() {
this._migrationVersion = this.MIGRATION_VERSION;
}
_migrateV1() {
// If there's an userChrome.css or userContent.css existing, we set
// 'toolkit.legacyUserProfileCustomizations.stylesheets' back to true
// We do this to avoid existing user stylesheets to be ignored
const profileDir = Services.dirsvc.get('ProfD', Ci.nsIFile);
const userChromeFile = profileDir.clone();
userChromeFile.append('chrome');
userChromeFile.append('userChrome.css');
const userContentFile = profileDir.clone();
userContentFile.append('chrome');
userContentFile.append('userContent.css');
Services.prefs.setBoolPref(
'zen.workspaces.separate-essentials',
Services.prefs.getBoolPref('zen.workspaces.container-specific-essentials-enabled', false)
);
const theme = Services.prefs.getIntPref('layout.css.prefers-color-scheme.content-override', 0);
Services.prefs.setIntPref('zen.view.window.scheme', theme);
if (userChromeFile.exists() || userContentFile.exists()) {
Services.prefs.setBoolPref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
console.log('ZenUIMigration: User stylesheets detected, enabling legacy stylesheets.');
this.shouldRestart = true;
}
}
_migrateV2() {
if (AppConstants.platform !== 'linux') {
Services.prefs.setIntPref('zen.theme.gradient-legacy-version', 0);
}
}
_migrateV3() {
if (Services.prefs.getStringPref('zen.theme.accent-color', '').startsWith('system')) {
Services.prefs.setStringPref('zen.theme.accent-color', 'AccentColor');
}
}
_migrateV4() {
// Fix spelling mistake in preference name
Services.prefs.setBoolPref(
'zen.theme.use-system-colors',
Services.prefs.getBoolPref('zen.theme.use-sysyem-colors', false)
);
}
_migrateV5() {
Services.prefs.setBoolPref('zen.site-data-panel.show-callout', true);
}
}
export var gZenUIMigration = new nsZenUIMigration();