🔧 Work on setting migration
This commit is contained in:
@@ -56,15 +56,17 @@ var ProfileManager = class {
|
||||
return this._profiles;
|
||||
}
|
||||
|
||||
// This will create a new profile with all values initialized to their defaults. The
|
||||
// method will return an effect profile object (as described above). We will use the
|
||||
// current system time in microseconds as profile name. This ensures that they are
|
||||
// always sorted according to their creation date.
|
||||
createProfile() {
|
||||
// This will create a new profile. If no content is given, all values will be
|
||||
// initialized to their defaults. The method will return an effect profile object (as
|
||||
// described above). We will use the current system time in microseconds as profile
|
||||
// name. This ensures that they are always sorted according to their creation date.
|
||||
createProfile(content = '') {
|
||||
const path = `${GLib.get_user_config_dir()}/burn-my-windows/profiles/${
|
||||
GLib.get_real_time()}.conf`;
|
||||
const file = Gio.File.new_for_path(path);
|
||||
file.create(Gio.FileCreateFlags.NONE, null);
|
||||
file.replace_contents(content, null, false, Gio.FileCreateFlags.REPLACE_DESTINATION,
|
||||
null);
|
||||
|
||||
const profile = {'path': path, 'settings': this._getProfileSettings(path)};
|
||||
|
||||
|
||||
+98
-36
@@ -16,27 +16,35 @@
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
const ProfileManager = Me.imports.src.ProfileManager.ProfileManager;
|
||||
const utils = Me.imports.src.utils;
|
||||
|
||||
function migrate() {
|
||||
utils.executeCommand(['dconf', 'dump', '/org/gnome/shell/extensions/burn-my-windows/'])
|
||||
// Migrating from pre-27 versions is pretty involved. Before, all settings were stored in
|
||||
// the standard Gio.Settings backend. Now, there are effect profiles. Depending on the
|
||||
// settings one or two profiles may be required.
|
||||
async function fromVersion26() {
|
||||
return utils
|
||||
.executeCommand(['dconf', 'dump', '/org/gnome/shell/extensions/burn-my-windows/'])
|
||||
.catch(r => utils.debug('Failed to get old settings for effect migration: ' + r))
|
||||
.then(r => {
|
||||
utils.debug('Starting Burn-My-Windows profile migration!');
|
||||
utils.debug('Starting Burn-My-Windows profile migration (old version <= 26)!');
|
||||
|
||||
// The default value of this is false, so not-present is equal to false.
|
||||
// We use this to write the new profiles.
|
||||
const profileManager = new ProfileManager();
|
||||
|
||||
// The default value of this was false, so not-present is equal to false.
|
||||
const destroyDialogs = r.includes('destroy-dialogs=true');
|
||||
if (!destroyDialogs) {
|
||||
utils.debug('Only normal windows will be burned by the new profile(s).');
|
||||
}
|
||||
|
||||
// The default value of this is false, so not-present is equal to false.
|
||||
// The default value of this was false, so not-present is equal to false.
|
||||
const disableOnBattery = r.includes('disable-on-battery=true');
|
||||
if (disableOnBattery) {
|
||||
utils.debug('The new profile(s) will not be active on battery.');
|
||||
}
|
||||
|
||||
// The default value of this is false, so not-present is equal to false.
|
||||
// The default value of this was false, so not-present is equal to false.
|
||||
const disableOnPowerSave = r.includes('disable-on-power-save=true');
|
||||
if (disableOnPowerSave) {
|
||||
utils.debug('The new profile(s) will not be active in power-save mode.');
|
||||
@@ -45,7 +53,8 @@ function migrate() {
|
||||
// Remove some unnecessary lines.
|
||||
r = r.replace(/^active-profile=.*\n?/gm, '');
|
||||
r = r.replace(/^test-mode=.*\n?/gm, '');
|
||||
r = r.replace(/^last-version=.*\n?/gm, '');
|
||||
r = r.replace(/^last-extension-version=.*\n?/gm, '');
|
||||
r = r.replace(/^last-prefs-version=.*\n?/gm, '');
|
||||
r = r.replace(/^destroy-dialogs=.*\n?/gm, '');
|
||||
r = r.replace(/^disable-on-battery=.*\n?/gm, '');
|
||||
r = r.replace(/^disable-on-power-save=.*\n?/gm, '');
|
||||
@@ -53,15 +62,14 @@ function migrate() {
|
||||
r = r.replace('[/]\n', '');
|
||||
r = r.trim();
|
||||
|
||||
// There were some inconsistencies in the key names.
|
||||
// There were some inconsistencies in the key names. The update fixes them.
|
||||
r.replace('flame-', 'fire-');
|
||||
r.replace('claw-', 'trex-');
|
||||
|
||||
let lines = r.split('\n');
|
||||
|
||||
// Find all effects which were used for openeing and closing. This first extracts
|
||||
// all lines which end in "-open-effect=true" and then remove this suffix from the
|
||||
// lines. This leaves only the effect nicks.
|
||||
let lines = r.split('\n');
|
||||
let openEffects = lines.filter(l => l.includes('-open-effect=true'))
|
||||
.map(l => l.replace('-open-effect=true', ''));
|
||||
let closeEffects = lines.filter(l => l.includes('-close-effect=true'))
|
||||
@@ -73,11 +81,13 @@ function migrate() {
|
||||
closeEffects.push('fire');
|
||||
}
|
||||
|
||||
// Print all effects we've found.
|
||||
utils.debug('Enabled open effects: ' + openEffects);
|
||||
utils.debug('Enabled close effects: ' + closeEffects);
|
||||
|
||||
// If the same effects were used for opening and closing windows, only one profile
|
||||
// is required. Else we have to create two new profiles.
|
||||
// If the same effects were used for opening and closing windows or there is either
|
||||
// no opening or no closing animation configured, only one profile is required. Else
|
||||
// we have to create two new profiles.
|
||||
const numProfiles = openEffects.join() == closeEffects.join() ? 1 : 2;
|
||||
if (numProfiles == 1) {
|
||||
utils.debug('Only one profile is required.');
|
||||
@@ -89,69 +99,121 @@ function migrate() {
|
||||
utils.debug('Two profiles are required.');
|
||||
}
|
||||
|
||||
const profile =
|
||||
// Remove all open / close lines.
|
||||
const profileLines =
|
||||
lines.filter(l => !l.includes('-close-effect=') && !l.includes('-open-effect='));
|
||||
profile.unshift('[burn-my-windows-profile]');
|
||||
|
||||
// Add the header.
|
||||
profileLines.unshift('[burn-my-windows-profile]');
|
||||
|
||||
// Push the line which makes the profile only apply to normal windows.
|
||||
if (!destroyDialogs) {
|
||||
profile.push('profile-window-type=1');
|
||||
profileLines.push('profile-window-type=1');
|
||||
}
|
||||
|
||||
// Push the line which makes the profile only active when plugged in.
|
||||
if (disableOnBattery) {
|
||||
profile.push('profile-power-mode=2');
|
||||
profileLines.push('profile-power-mode=2');
|
||||
}
|
||||
|
||||
// Push the line which makes the profile only active when on balanced or performance
|
||||
// mode.
|
||||
if (disableOnPowerSave) {
|
||||
profile.push('profile-power-profile=5');
|
||||
profileLines.push('profile-power-profile=5');
|
||||
}
|
||||
|
||||
// Now comes a bit of code repetition, but it is more readable this way.
|
||||
if (numProfiles == 1) {
|
||||
openEffects.forEach(e => profile.push(e + '-enable-effect=true'));
|
||||
|
||||
// Add all relevant effects.
|
||||
openEffects.forEach(e => profileLines.push(e + '-enable-effect=true'));
|
||||
|
||||
// The fire effect is enabled per default, so we have to explicitly disable it if
|
||||
// not required.
|
||||
if (!openEffects.includes('fire')) {
|
||||
profile.push('fire-enable-effect=false');
|
||||
profileLines.push('fire-enable-effect=false');
|
||||
}
|
||||
|
||||
// Print and save the new profile.
|
||||
const profile = profileLines.join('\n');
|
||||
|
||||
utils.debug('The new profile:');
|
||||
utils.debug(profile.join('\n'));
|
||||
utils.debug(profile);
|
||||
|
||||
profileManager.createProfile(profile);
|
||||
|
||||
} else if (closeEffects.length == 0) {
|
||||
|
||||
profile.push('profile-animation-type=1')
|
||||
openEffects.forEach(e => profile.push(e + '-enable-effect=true'));
|
||||
// This profile is only for window openeing.
|
||||
profileLines.push('profile-animation-type=1')
|
||||
|
||||
// Add all relevant effects.
|
||||
openEffects.forEach(e => profileLines.push(e + '-enable-effect=true'));
|
||||
|
||||
// The fire effect is enabled per default, so we have to explicitly disable it if
|
||||
// not required.
|
||||
if (!openEffects.includes('fire')) {
|
||||
profile.push('fire-enable-effect=false');
|
||||
profileLines.push('fire-enable-effect=false');
|
||||
}
|
||||
|
||||
// Print and save the new profile.
|
||||
const profile = profileLines.join('\n');
|
||||
|
||||
utils.debug('The new window-open profile:');
|
||||
utils.debug(profile.join('\n'));
|
||||
utils.debug(profile);
|
||||
|
||||
profileManager.createProfile(profile);
|
||||
|
||||
} else if (openEffects.length == 0) {
|
||||
|
||||
profile.push('profile-animation-type=2')
|
||||
closeEffects.forEach(e => profile.push(e + '-enable-effect=true'));
|
||||
// This profile is only for window closing.
|
||||
profileLines.push('profile-animation-type=2')
|
||||
|
||||
// Add all relevant effects.
|
||||
closeEffects.forEach(e => profileLines.push(e + '-enable-effect=true'));
|
||||
|
||||
// The fire effect is enabled per default, so we have to explicitly disable it if
|
||||
// not required.
|
||||
if (!closeEffects.includes('fire')) {
|
||||
profile.push('fire-enable-effect=false');
|
||||
profileLines.push('fire-enable-effect=false');
|
||||
}
|
||||
|
||||
// Print and save the new profile.
|
||||
const profile = profileLines.join('\n');
|
||||
|
||||
utils.debug('The new window-close profile:');
|
||||
utils.debug(profile.join('\n'));
|
||||
utils.debug(profile);
|
||||
|
||||
profileManager.createProfile(profile);
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
const openProfile = [...profile, 'profile-animation-type=1'];
|
||||
const closeProfile = [...profile, 'profile-animation-type=2'];
|
||||
const openProfileLines = [...profile, 'profile-animation-type=1'];
|
||||
const closeProfileLines = [...profile, 'profile-animation-type=2'];
|
||||
|
||||
openEffects.forEach(e => openProfile.push(e + '-enable-effect=true'));
|
||||
closeEffects.forEach(e => closeProfile.push(e + '-enable-effect=true'));
|
||||
// Add all relevant effects.
|
||||
openEffects.forEach(e => openProfileLines.push(e + '-enable-effect=true'));
|
||||
closeEffects.forEach(e => closeProfileLines.push(e + '-enable-effect=true'));
|
||||
|
||||
// The fire effect is enabled per default, so we have to explicitly disable it if
|
||||
// not required.
|
||||
if (!closeEffects.includes('fire')) {
|
||||
closeProfile.push('fire-enable-effect=false');
|
||||
closeProfileLines.push('fire-enable-effect=false');
|
||||
}
|
||||
|
||||
// Print and save the new profiles.
|
||||
const openProfile = openProfileLines.join('\n');
|
||||
const closeProfile = closeProfileLines.join('\n');
|
||||
|
||||
utils.debug('The new open-window profile:');
|
||||
utils.debug(openProfile.join('\n'));
|
||||
utils.debug(openProfile);
|
||||
utils.debug('The new close-window profile:');
|
||||
utils.debug(closeProfile.join('\n'));
|
||||
utils.debug(closeProfile);
|
||||
|
||||
profileManager.createProfile(openProfile);
|
||||
profileManager.createProfile(closeProfile);
|
||||
}
|
||||
})
|
||||
.catch(r => utils.debug('Failed migrate settings: ' + r));
|
||||
.catch(r => utils.debug('Failed to migrate settings: ' + r));
|
||||
}
|
||||
Reference in New Issue
Block a user