Migrate Plugin to Gnome 45 Shell (#267)

* Migrate Plugin to Gnome 45 Shell

* Use TextDecoder instead of ByteArray or toString()

* use the Glib timeout functions

* remove unused imports
This commit is contained in:
Manuel Selinger
2023-10-10 14:06:04 +02:00
committed by GitHub
parent 54ae50c51b
commit 4465c14786
15 changed files with 111 additions and 129 deletions

View File

@@ -1,9 +1,8 @@
const GLib = imports.gi.GLib;
import GLib from 'gi://GLib';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const CommandLineUtil = Me.imports.commandLineUtil;
import CommandLineUtil from './commandLineUtil.js';
var AticonfigUtil = class extends CommandLineUtil.CommandLineUtil {
export default class AticonfigUtil extends CommandLineUtil {
constructor() {
super();

View File

@@ -1,10 +1,9 @@
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const CommandLineUtil = Me.imports.commandLineUtil;
import CommandLineUtil from './commandLineUtil.js';
var BumblebeeNvidiaUtil = class extends CommandLineUtil.CommandLineUtil {
export default class BumblebeeNvidiaUtil extends CommandLineUtil {
constructor() {
super();

View File

@@ -1,8 +1,6 @@
const ByteArray = imports.byteArray;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
import Gio from 'gi://Gio';
var CommandLineUtil = class {
export default class CommandLineUtil {
constructor(){
this._argv = null;

View File

@@ -1,34 +1,30 @@
const St = imports.gi.St;
const PanelMenu = imports.ui.panelMenu;
const PopupMenu = imports.ui.popupMenu;
const Main = imports.ui.main;
const Util = imports.misc.util;
const Mainloop = imports.mainloop;
const Clutter = imports.gi.Clutter;
const Gio = imports.gi.Gio;
const GLib = imports.gi.GLib;
const GObject = imports.gi.GObject;
import Clutter from 'gi://Clutter';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
import St from 'gi://St';
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
import * as PanelMenu from 'resource:///org/gnome/shell/ui/panelMenu.js';
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as Util from 'resource:///org/gnome/shell/misc/util.js';
const SensorsUtil = Me.imports.sensorsUtil.SensorsUtil;
const FreeipmiUtil = Me.imports.freeipmiUtil.FreeipmiUtil;
const LiquidctlUtil = Me.imports.liquidctlUtil.LiquidctlUtil;
import {Extension, gettext as _} from 'resource:///org/gnome/shell/extensions/extension.js';
const NvidiaUtil = Me.imports.nvidiaUtil.NvidiaUtil;
const BumblebeeNvidiaUtil = Me.imports.bumblebeeNvidiaUtil.BumblebeeNvidiaUtil;
const AticonfigUtil = Me.imports.aticonfigUtil.AtiConfigUtil;
import SensorsUtil from './sensorsUtil.js';
import FreeipmiUtil from './freeipmiUtil.js';
import LiquidctlUtil from './liquidctlUtil.js';
const Udisks2Util = Me.imports.udisks2.UDisks2;
const HddtempUtil = Me.imports.hddtempUtil.HddtempUtil;
const SmartctlUtil = Me.imports.smartctlUtil.SmartctlUtil;
const NvmecliUtil = Me.imports.nvmecliUtil.NvmecliUtil;
import NvidiaUtil from './nvidiaUtil.js';
import BumblebeeNvidiaUtil from './bumblebeeNvidiaUtil.js';
import AticonfigUtil from './aticonfigUtil.js';
const FreonItem = Me.imports.freonItem.FreonItem;
import Udisks2Util from './udisks2.js';
import HddtempUtil from './hddtempUtil.js';
import SmartctlUtil from './smartctlUtil.js';
import NvmecliUtil from './nvmecliUtil.js';
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
const _ = Gettext.gettext;
import FreonItem from './freonItem.js';
function _makeLogFunction(prefix) {
return msg => {
@@ -55,10 +51,12 @@ function _makeLogFunction(prefix) {
}
const FreonMenuButton = GObject.registerClass(class Freon_FreonMenuButton extends PanelMenu.Button {
_init() {
super._init(St.Align.START);
this._settings = ExtensionUtils.getSettings();
constructor(uuid, path, settings) {
super(0);
this._extension_uuid = uuid;
this._settings = settings;
var _debugFunc = _makeLogFunction('DEBUG');
this.debug = this._settings.get_boolean('debug') ? _debugFunc : () => {};
@@ -84,17 +82,17 @@ const FreonMenuButton = GObject.registerClass(class Freon_FreonMenuButton extend
this._initSmartctlUtility();
this._initNvmecliUtility();
let temperatureIcon = Gio.icon_new_for_string(Me.path + '/icons/material-icons/material-temperature-symbolic.svg');
let voltageIcon = Gio.icon_new_for_string(Me.path + '/icons/freon-voltage-symbolic.svg');
let temperatureIcon = Gio.icon_new_for_string(path + '/icons/material-icons/material-temperature-symbolic.svg');
let voltageIcon = Gio.icon_new_for_string(path + '/icons/freon-voltage-symbolic.svg');
this._sensorIcons = {
'temperature' : temperatureIcon,
'temperature-average' : temperatureIcon,
'temperature-maximum' : temperatureIcon,
'gpu-temperature' : Gio.icon_new_for_string(Me.path + '/icons/material-icons/material-gpu-temperature-symbolic.svg'),
'gpu-temperature' : Gio.icon_new_for_string(path + '/icons/material-icons/material-gpu-temperature-symbolic.svg'),
'drive-temperature' : Gio.icon_new_for_string('drive-harddisk-symbolic'),
'voltage' : voltageIcon,
'fan' : Gio.icon_new_for_string(Me.path + '/icons/freon-fan-symbolic.svg'),
'fan' : Gio.icon_new_for_string(path + '/icons/freon-fan-symbolic.svg'),
'power' : voltageIcon,
}
@@ -163,7 +161,7 @@ const FreonMenuButton = GObject.registerClass(class Freon_FreonMenuButton extend
this._addTimer();
this._updateUI(true);
this._updateUITimeoutId = Mainloop.timeout_add(250, () => {
this._updateUITimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 250, () => {
this._updateUI();
// readd to update queue
return true;
@@ -429,12 +427,12 @@ const FreonMenuButton = GObject.registerClass(class Freon_FreonMenuButton extend
}
_updateTimeChanged(){
Mainloop.source_remove(this._timeoutId);
GLib.Source.remove(this._timeoutId);
this._addTimer();
}
_addTimer(){
this._timeoutId = Mainloop.timeout_add_seconds(this._settings.get_int('update-time'), () => {
this._timeoutId = GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, this._settings.get_int('update-time'), () => {
this._querySensors();
// readd to update queue
return true;
@@ -459,8 +457,8 @@ const FreonMenuButton = GObject.registerClass(class Freon_FreonMenuButton extend
this._destroySmartctlUtility();
this._destroyNvmecliUtility();
Mainloop.source_remove(this._timeoutId);
Mainloop.source_remove(this._updateUITimeoutId);
GLib.Source.remove(this._timeoutId);
GLib.Source.remove(this._updateUITimeoutId);
for (let signal of this._settingChangedSignals){
this._settings.disconnect(signal);
@@ -778,7 +776,7 @@ const FreonMenuButton = GObject.registerClass(class Freon_FreonMenuButton extend
let wiki = new PopupMenu.PopupBaseMenuItem();
wiki.actor.add_child(new St.Label({ text: _("Go to the Freon wiki"), x_align: Clutter.ActorAlign.START, x_expand: true }));
wiki.connect('activate', function () {
wiki.connect('activate', () => {
Util.spawn(["xdg-open", "https://github.com/UshakovVasilii/gnome-shell-extension-freon/wiki"]);
});
@@ -786,8 +784,8 @@ const FreonMenuButton = GObject.registerClass(class Freon_FreonMenuButton extend
let settings = new PopupMenu.PopupBaseMenuItem();
settings.actor.add_child(new St.Label({ text: _("Sensor Settings"), x_align: Clutter.ActorAlign.START, x_expand: true }));
settings.connect('activate', function () {
Util.spawn(["gnome-extensions", "prefs", Me.metadata.uuid]);
settings.connect('activate', () => {
Util.spawn(["gnome-extensions", "prefs", this._extension_uuid]);
});
this.menu.addMenuItem(settings);
@@ -970,19 +968,16 @@ const FreonMenuButton = GObject.registerClass(class Freon_FreonMenuButton extend
}
});
let freonMenu;
export default class extends Extension {
function init(extensionMeta) {
ExtensionUtils.initTranslations();
}
enable() {
this._freonMenu = new FreonMenuButton(this.uuid, this.path, this.getSettings());
Main.panel.addToStatusArea('freonMenu', this._freonMenu);
this._freonMenu._positionInPanelChanged();
}
function enable() {
freonMenu = new FreonMenuButton();
Main.panel.addToStatusArea('freonMenu', freonMenu);
freonMenu._positionInPanelChanged();
}
function disable() {
freonMenu.destroy();
freonMenu = null;
disable() {
this._freonMenu?.destroy();
this._freonMenu = null;
}
}

View File

@@ -1,9 +1,9 @@
const GLib = imports.gi.GLib;
import GLib from 'gi://GLib';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const CommandLineUtil = Me.imports.commandLineUtil;
import CommandLineUtil from './commandLineUtil.js';
export default class FreeipmiUtil extends CommandLineUtil {
var FreeipmiUtil = class extends CommandLineUtil.CommandLineUtil {
constructor() {
super();

View File

@@ -1,12 +1,13 @@
const GObject = imports.gi.GObject;
const PopupMenu = imports.ui.popupMenu;
const St = imports.gi.St;
const Clutter = imports.gi.Clutter;
import Clutter from 'gi://Clutter';
import GObject from 'gi://GObject';
import St from 'gi://St';
var FreonItem = GObject.registerClass(class FreonItem extends PopupMenu.PopupBaseMenuItem {
import * as PopupMenu from 'resource:///org/gnome/shell/ui/popupMenu.js';
_init(gIcon, key, label, value, displayName) {
super._init();
export default GObject.registerClass(class FreonItem extends PopupMenu.PopupBaseMenuItem {
constructor(gIcon, key, label, value, displayName) {
super();
this._main = false;
this._key = key;
this._gIcon = gIcon;

View File

@@ -1,9 +1,12 @@
const GLib = imports.gi.GLib;
import GLib from 'gi://GLib';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const CommandLineUtil = Me.imports.commandLineUtil;
import CommandLineUtil from './commandLineUtil.js';
var HddtempUtil = class extends CommandLineUtil.CommandLineUtil {
function run_command(argv) {
return new TextDecoder().decode(GLib.spawn_command_line_sync(argv)[1]).trim();
}
export default class HddtempUtil extends CommandLineUtil {
constructor() {
super();
@@ -24,9 +27,9 @@ var HddtempUtil = class extends CommandLineUtil.CommandLineUtil {
let pid = undefined;
if(systemctl) {
let activeState = GLib.spawn_command_line_sync(systemctl + " show hddtemp.service -p ActiveState")[1].toString().trim();
let activeState = run_command(systemctl + " show hddtemp.service -p ActiveState");
if(activeState == "ActiveState=active") {
let output = GLib.spawn_command_line_sync(systemctl + " show hddtemp.service -p MainPID")[1].toString().trim();
let output = run_command(systemctl + " show hddtemp.service -p MainPID");
if(output.length && output.split("=").length == 2)
pid = Number(output.split("=")[1].trim());
@@ -35,7 +38,7 @@ var HddtempUtil = class extends CommandLineUtil.CommandLineUtil {
// systemd isn't used on this system, try sysvinit instead
if(!pid && pidof) {
let output = GLib.spawn_command_line_sync("pidof hddtemp")[1].toString().trim();
let output = run_command("pidof hddtemp");
if(output.length)
pid = Number(output.trim());
}

View File

@@ -1,11 +1,10 @@
// Provide sensor data from liquidctl.
import GLib from 'gi://GLib';
const GLib = imports.gi.GLib;
import CommandLineUtil from './commandLineUtil.js';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const commandLineUtil = Me.imports.commandLineUtil;
export default class LiquidctlUtil extends CommandLineUtil {
var LiquidctlUtil = class extends commandLineUtil.CommandLineUtil {
constructor() {
super();
const path = GLib.find_program_in_path('liquidctl');

View File

@@ -1,5 +1,5 @@
{
"shell-version": ["40", "41", "42", "43","44"],
"shell-version": ["45"],
"uuid": "freon@UshakovVasilii_Github.yahoo.com",
"name": "Freon",
"description": "Shows CPU temperature, disk temperature, video card temperature (NVIDIA/Catalyst/Bumblebee&NVIDIA), voltage and fan RPM (forked from xtranophilist/gnome-shell-extension-sensors)",

View File

@@ -1,11 +1,7 @@
const ByteArray = imports.byteArray;
const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const CommandLineUtil = Me.imports.commandLineUtil;
var NvidiaUtil = class {
export default class NvidiaUtil {
constructor() {
this._nvidiaSmiPath = GLib.find_program_in_path('nvidia-smi');

View File

@@ -1,13 +1,12 @@
const GLib = imports.gi.GLib;
const Me = imports.misc.extensionUtils.getCurrentExtension();
import GLib from 'gi://GLib';
function getNvmeData (argv){
const nvme = GLib.find_program_in_path('nvme')
return JSON.parse(GLib.spawn_command_line_sync(`${nvme} ${argv} -o json`)[1].toString())
return JSON.parse(new TextDecoder().decode(GLib.spawn_command_line_sync(`${nvme} ${argv} -o json`)[1]))
}
var NvmecliUtil = class {
export default class NvmecliUtil {
constructor(callback) {
this._nvmeDevices = [];
try {

View File

@@ -1,29 +1,21 @@
const GObject = imports.gi.GObject;
const Gio = imports.gi.Gio;
const Gtk = imports.gi.Gtk;
import Gio from 'gi://Gio';
import GObject from 'gi://GObject';
import Gtk from 'gi://Gtk?version=4.0';
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Gettext = imports.gettext.domain(Me.metadata['gettext-domain']);
const _ = Gettext.gettext;
import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js';
const modelColumn = {
label: 0,
separator: 1
}
function init() {
ExtensionUtils.initTranslations();
}
var FreonPrefsWidget = new GObject.registerClass(class Freon_FreonPrefsWidget extends Gtk.Grid {
_init() {
super._init();
constructor(settings) {
super();
this.margin = this.row_spacing = this.column_spacing = 20;
this._settings = ExtensionUtils.getSettings();
this._settings = settings;
let i = 0;
let j = 0;
@@ -230,6 +222,9 @@ var FreonPrefsWidget = new GObject.registerClass(class Freon_FreonPrefsWidget ex
}
});
function buildPrefsWidget() {
return new FreonPrefsWidget();
export default class extends ExtensionPreferences {
getPreferencesWidget() {
return new FreonPrefsWidget(this.getSettings());
}
}

View File

@@ -1,9 +1,8 @@
const GLib = imports.gi.GLib;
import GLib from 'gi://GLib';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const CommandLineUtil = Me.imports.commandLineUtil;
import CommandLineUtil from './commandLineUtil.js';
var SensorsUtil = class extends CommandLineUtil.CommandLineUtil {
export default class SensorsUtil extends CommandLineUtil {
constructor() {
super();

View File

@@ -1,13 +1,12 @@
const GLib = imports.gi.GLib;
import GLib from 'gi://GLib';
const Me = imports.misc.extensionUtils.getCurrentExtension();
const ByteArray = imports.byteArray;
function getSmartData (argv){
const smartctl = GLib.find_program_in_path('smartctl')
return JSON.parse(ByteArray.toString( GLib.spawn_command_line_sync(`'${smartctl}' ${argv} -j`)[1] ))
return JSON.parse(new TextDecoder().decode( GLib.spawn_command_line_sync(`'${smartctl}' ${argv} -j`)[1] ))
}
var SmartctlUtil = class {
export default class SmartctlUtil {
constructor(callback) {
this._smartDevices = [];
try {

View File

@@ -1,4 +1,4 @@
const Gio = imports.gi.Gio;
import Gio from 'gi://Gio';
const UDisksDriveProxy = Gio.DBusProxy.makeProxyWrapper(
'<node> \
@@ -30,7 +30,7 @@ const Async = {
}
// routines for handling of udisks2
var UDisks2 = class {
export default class UDisks2 {
constructor(callback) {
this._udisksProxies = [];