Extension: Group migrations in a single file

This commit is contained in:
Romain Vigier
2026-08-08 22:09:40 +02:00
parent 035fd5a439
commit 2d99980ee5
6 changed files with 36 additions and 14 deletions
+3
View File
@@ -5,6 +5,7 @@
import { Extension } from "resource:///org/gnome/shell/extensions/extension.js"; import { Extension } from "resource:///org/gnome/shell/extensions/extension.js";
import { migrate } from "./migrations.js";
import * as debug from "./debug.js"; import * as debug from "./debug.js";
import { AccentColorSwitcher } from "./modules/AccentColorSwitcher.js"; import { AccentColorSwitcher } from "./modules/AccentColorSwitcher.js";
@@ -18,6 +19,8 @@ export default class NightThemeSwitcher extends Extension {
enable() { enable() {
globalThis.NTS = this; globalThis.NTS = this;
migrate(this);
debug.message("Enabling extension..."); debug.message("Enabling extension...");
const timer = new Timer(); const timer = new Timer();
+1
View File
@@ -16,6 +16,7 @@ configure_file(
main = [ main = [
'debug.js', 'debug.js',
'extension.js', 'extension.js',
'migrations.js',
'prefs.js', 'prefs.js',
] ]
enums = [ enums = [
+27
View File
@@ -0,0 +1,27 @@
// SPDX-FileCopyrightText: Night Theme Switcher Contributors
// SPDX-License-Identifier: GPL-3.0-or-later
import Gio from "gi://Gio";
/**
* Migrate the extension from a previous version.
* @param {ExtensionBase} extension The extension base class.
*/
export function migrate(extension) {
initializeAccentColorSettings(extension);
}
/**
* Initialize the accent color settings to the current system accent color.
* @param {ExtensionBase} extension The extension base class.
*/
function initializeAccentColorSettings(extension) {
const accentColorSettings = extension.getSettings(`${extension.metadata["settings-schema"]}.accent-color`);
const interfaceSettings = new Gio.Settings({ schema: "org.gnome.desktop.interface" });
if (accentColorSettings.get_string("day") === "unset")
accentColorSettings.set_string("day", interfaceSettings.get_string("accent-color"));
if (accentColorSettings.get_string("night") === "unset")
accentColorSettings.set_string("night", interfaceSettings.get_string("accent-color"));
}
-8
View File
@@ -34,7 +34,6 @@ export class AccentColorSwitcher extends Switcher {
this.#timer = timer; this.#timer = timer;
this.#settings = settings; this.#settings = settings;
this.#interfaceSettings = new Gio.Settings({ schema: "org.gnome.desktop.interface" }); this.#interfaceSettings = new Gio.Settings({ schema: "org.gnome.desktop.interface" });
this.#initSettings();
} }
enable() { enable() {
@@ -47,13 +46,6 @@ export class AccentColorSwitcher extends Switcher {
this.#disconnectSettings(); this.#disconnectSettings();
} }
#initSettings() {
if (this.#settings.get_string(Time.DAY) === "unset")
this.#settings.set_string(Time.DAY, this.#interfaceSettings.get_string("accent-color"));
if (this.#settings.get_string(Time.NIGHT) === "unset")
this.#settings.set_string(Time.NIGHT, this.#interfaceSettings.get_string("accent-color"));
}
#connectSettings() { #connectSettings() {
debug.message("Connecting Accent Color Switcher to settings..."); debug.message("Connecting Accent Color Switcher to settings...");
this.#settingsConnections.push({ this.#settingsConnections.push({
-6
View File
@@ -20,12 +20,6 @@ export class AppearancePage extends Adw.PreferencesPage {
constructor({ accentColorSettings, ...params } = {}) { constructor({ accentColorSettings, ...params } = {}) {
super(params); super(params);
const backgroundSettings = new Gio.Settings({ schema: "org.gnome.desktop.background" }); const backgroundSettings = new Gio.Settings({ schema: "org.gnome.desktop.background" });
const interfaceSettings = new Gio.Settings({ schema: "org.gnome.desktop.interface" });
if (accentColorSettings.get_string("day") === "unset")
accentColorSettings.set_string("day", interfaceSettings.get_string("accent-color"));
if (accentColorSettings.get_string("night") === "unset")
accentColorSettings.set_string("night", interfaceSettings.get_string("accent-color"));
accentColorSettings.bind("day", this._day_appearance_chooser, "accent-color", Gio.SettingsBindFlags.DEFAULT); accentColorSettings.bind("day", this._day_appearance_chooser, "accent-color", Gio.SettingsBindFlags.DEFAULT);
accentColorSettings.bind("night", this._night_appearance_chooser, "accent-color", Gio.SettingsBindFlags.DEFAULT); accentColorSettings.bind("night", this._night_appearance_chooser, "accent-color", Gio.SettingsBindFlags.DEFAULT);
+5
View File
@@ -11,12 +11,17 @@ import Gtk from "gi://Gtk";
import { ExtensionPreferences } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js"; import { ExtensionPreferences } from "resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js";
import { migrate } from "./migrations.js";
export default class NightThemeSwitcherPreferences extends ExtensionPreferences { export default class NightThemeSwitcherPreferences extends ExtensionPreferences {
/** /**
* Fill the PreferencesWindow. * Fill the PreferencesWindow.
* @param {import("gi://Adw").default.PreferencesWindow} window The PreferencesWindow to fill. * @param {import("gi://Adw").default.PreferencesWindow} window The PreferencesWindow to fill.
*/ */
async fillPreferencesWindow(window) { async fillPreferencesWindow(window) {
// Migrate from a previous version
migrate(this);
// Load resources // Load resources
const resource = Gio.Resource.load(GLib.build_filenamev([this.path, "resources", "preferences.gresource"])); const resource = Gio.Resource.load(GLib.build_filenamev([this.path, "resources", "preferences.gresource"]));
Gio.resources_register(resource); Gio.resources_register(resource);