Merge branch 'check-nightlight' into 'master'

Check if Night Light is enabled

See merge request rmnvgr/nightthemeswitcher-gnome-shell-extension!5
This commit is contained in:
Romain
2020-02-25 19:43:12 +00:00
7 changed files with 111 additions and 28 deletions
+1 -1
View File
@@ -72,7 +72,7 @@ pot:
--package-name="$(NAME)" \
--package-version="$(VERSION)" \
--output=./src/po/$(UUID).pot \
./src/*.js
./src/**/*.js
sed -i '1,4s/SOME DESCRIPTIVE TITLE./$(NAME)/g' ./src/po/$(UUID).pot
sed -i '1,4s/YEAR/$(COPYRIGHT_YEAR)/' ./src/po/$(UUID).pot
sed -i "1,4s/THE PACKAGE'S COPYRIGHT HOLDER/$(AUTHOR_NAME)/" ./src/po/$(UUID).pot
+5 -2
View File
@@ -19,5 +19,8 @@ this program. If not, see <http s ://www.gnu.org/licenses/>.
var EXT_NAME = 'Night Theme Switcher';
var EXT_UUID = 'nightthemeswitcher@romainvigier.fr';
var GSETTINGS_SCHEMA = 'org.gnome.desktop.interface';
var GSETTINGS_PROPERTY = 'gtk-theme';
var THEME_GSETTINGS_SCHEMA = 'org.gnome.desktop.interface';
var THEME_GSETTINGS_PROPERTY = 'gtk-theme';
var NIGHTLIGHT_GSETTINGS_SCHEMA = 'org.gnome.settings-daemon.plugins.color';
var NIGHTLIGHT_GSETTINGS_PROPERTY = 'night-light-enabled';
+67 -7
View File
@@ -18,6 +18,7 @@ this program. If not, see <http s ://www.gnu.org/licenses/>.
const { extensionUtils } = imports.misc;
const { Gio } = imports.gi;
const { main } = imports.ui;
const Me = extensionUtils.getCurrentExtension();
const config = Me.imports.config;
@@ -29,39 +30,86 @@ const _ = Gettext.gettext;
/*
The Nightlighter establishes a connection with the session bus to get the
current Night Light status. It can also be asked to listen to status changes.
As Night Light is essential for the extension to work, it continuously checks
if it is enabled and warns the user if that's not the case.
*/
var Nightlighter = class {
constructor() {
this.nightlight_gsettings = new Gio.Settings({ schema: config.NIGHTLIGHT_GSETTINGS_SCHEMA });
}
enable() {
// As Night Light must be enabled for the extension to work, we have to monitor any change of that setting.
this._listen_to_nightlight_status();
try {
this._check_nightlight_status();
this._connect_to_dbus();
this._listen_to_nightlight_changes();
}
catch(e) {
throw e; // Let's pass the error up.
main.notifyError(config.EXT_NAME, e.message);
}
}
disable() {
this._stop_listening_to_nightlight_status();
this._stop_listening_to_nightlight_changes();
}
get status() {
if ( !this.proxy ) {
throw new Error();
}
try {
return this.proxy.get_cached_property('NightLightActive').get_boolean();
}
catch(e) {
return false; // If Night Light is disabled, we consider it is inactive.
return false; // Sometimes when Night Light hasn't changed colors yet it returns an error, we consider it is inactive.
}
}
listen(callback) {
this.connect = this.proxy.connect('g-properties-changed', callback);
subscribe(callback) {
this.nightlight_change_callback = callback;
}
stop_listening() {
if ( this.proxy && this.connect ) {
this.proxy.disconnect(this.connect);
emit() {
if ( !this.nightlight_change_callback ) return;
this.nightlight_change_callback();
}
_is_nightlight_enabled() {
return this.nightlight_gsettings.get_boolean(config.NIGHTLIGHT_GSETTINGS_PROPERTY);
}
_check_nightlight_status() {
if ( !this._is_nightlight_enabled() ) {
const message = _('Night Light must be enabled to use this extension. Please enable it in your system settings.');
throw new Error(message);
}
}
_listen_to_nightlight_status() {
if ( this.nightlight_status_connect ) return;
this.nightlight_status_connect = this.nightlight_gsettings.connect('changed::' + config.NIGHTLIGHT_GSETTINGS_PROPERTY, this._on_nightlight_status_change.bind(this));
}
_stop_listening_to_nightlight_status() {
if ( this.nightlight_gsettings && this.nightlight_status_connect ) {
this.nightlight_gsettings.disconnect(this.nightlight_status_connect);
this.nightlight_status_connect = null;
}
}
_on_nightlight_status_change() {
this.enable();
this.emit();
}
_connect_to_dbus() {
if ( this.proxy ) return;
const connection = Gio.bus_get_sync(Gio.BusType.SESSION, null);
if ( connection === null ) {
const message = _('Unable to connect to the session bus.');
@@ -82,4 +130,16 @@ var Nightlighter = class {
}
}
_listen_to_nightlight_changes() {
if ( this.connect ) return;
this.connect = this.proxy.connect('g-properties-changed', this.emit.bind(this));
}
_stop_listening_to_nightlight_changes() {
if ( this.proxy && this.connect ) {
this.proxy.disconnect(this.connect);
this.connect == null;
}
}
}
+9 -3
View File
@@ -54,7 +54,8 @@ var Switcher = class {
this.theme.listen(this._on_theme_change.bind(this));
this.nightlight = new Nightlighter();
this.nightlight.listen(this._apply_theme_variant.bind(this));
this.nightlight.enable();
this.nightlight.subscribe(this._apply_theme_variant.bind(this));
this._apply_theme_variant();
}
@@ -67,7 +68,7 @@ var Switcher = class {
try {
this.theme.current = this.variants.original;
this.theme.stop_listening();
this.nightlight.stop_listening();
this.nightlight.disable();
}
catch(e) {} // Since we're disabling, we'll just ignore errors.
finally {
@@ -78,7 +79,12 @@ var Switcher = class {
}
_apply_theme_variant() {
this.theme.current = this.nightlight.status ? this.variants.night : this.variants.day;
try {
this.theme.current = this.nightlight.status ? this.variants.night : this.variants.day;
}
catch(e) {
this.theme.current = this.variants.original;
}
}
_on_theme_change() {
+4 -4
View File
@@ -31,20 +31,20 @@ one. It can also be asked to listen to theme changes.
var Themer = class {
constructor() {
this.gsettings = new Gio.Settings({ schema: config.GSETTINGS_SCHEMA });
this.gsettings = new Gio.Settings({ schema: config.THEME_GSETTINGS_SCHEMA });
}
get current() {
return this.gsettings.get_string(config.GSETTINGS_PROPERTY);
return this.gsettings.get_string(config.THEME_GSETTINGS_PROPERTY);
}
set current(theme) {
if ( theme === this.current ) return;
this.gsettings.set_string(config.GSETTINGS_PROPERTY, theme);
this.gsettings.set_string(config.THEME_GSETTINGS_PROPERTY, theme);
}
listen(callback) {
this.connect = this.gsettings.connect('changed::' + config.GSETTINGS_PROPERTY, callback);
this.connect = this.gsettings.connect('changed::' + config.THEME_GSETTINGS_PROPERTY, callback);
}
stop_listening() {
+13 -5
View File
@@ -1,14 +1,14 @@
# Night Theme Switcher
# Copyright (C) 2019 Romain Vigier
# This file is distributed under the same license as the Night Theme Switcher package.
# Romain Vigier <>, 2019.
# Romain Vigier <>, 2019-2020.
#
msgid ""
msgstr ""
"Project-Id-Version: Night Theme Switcher 7\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-08 23:18+0100\n"
"PO-Revision-Date: 2019-11-25 00:28+0100\n"
"POT-Creation-Date: 2020-02-25 20:28+0100\n"
"PO-Revision-Date: 2020-02-25 20:31+0100\n"
"Last-Translator: Romain Vigier <>\n"
"Language-Team: French <none>\n"
"Language: fr\n"
@@ -18,11 +18,19 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
"X-Generator: Gtranslator 3.34.0\n"
#: src/extension.js:150
#: src/modules/Nightlighter.js:86
msgid ""
"Night Light must be enabled to use this extension. Please enable it in your "
"system settings."
msgstr ""
"Le mode nuit doit être activé pour utiliser lextension. Veuillez lactiver "
"dans les réglages du système."
#: src/modules/Nightlighter.js:112
msgid "Unable to connect to the session bus."
msgstr "Impossible de se connecter au bus de la session."
#: src/extension.js:163
#: src/modules/Nightlighter.js:125
msgid "Unable to create proxy to the session bus."
msgstr "Impossible de créer une passerelle vers le bus de la session."
+12 -6
View File
@@ -1,14 +1,14 @@
# Night Theme Switcher
# Copyright (C) 2019 Romain Vigier
# Copyright (C) 2019, 2020 Romain Vigier
# This file is distributed under the same license as the Night Theme Switcher package.
# Romain Vigier <>, 2019.
# Romain Vigier <>, 2019, 2020.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: Night Theme Switcher 12\n"
"Project-Id-Version: Night Theme Switcher 17\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-08 23:18+0100\n"
"POT-Creation-Date: 2020-02-25 20:28+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,10 +17,16 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#: src/extension.js:150
#: src/modules/Nightlighter.js:86
msgid ""
"Night Light must be enabled to use this extension. Please enable it in your "
"system settings."
msgstr ""
#: src/modules/Nightlighter.js:112
msgid "Unable to connect to the session bus."
msgstr ""
#: src/extension.js:163
#: src/modules/Nightlighter.js:125
msgid "Unable to create proxy to the session bus."
msgstr ""