Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Address deprecation warnings #56

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions src/docker.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@

const GLib = imports.gi.GLib;
const Gio = imports.gi.Gio;
const ExtensionUtils = imports.misc.extensionUtils;
const Me = ExtensionUtils.getCurrentExtension();
const Utils = Me.imports.src.utils;

/**
* Dictionary for Docker actions
Expand Down Expand Up @@ -108,12 +111,16 @@ var isDockerRunning = () => {
let hasLine = true;
do {
const [out, size] = outReader.read_line(null);
if (out && out.toString().indexOf("docker") > -1) {
dockerRunning = true;

if (out) {
const outString = Utils.getByteArrayString(out);

if (outString && outString.indexOf("docker") > -1) {
dockerRunning = true;
}
} else if (size <= 0) {
hasLine = false;
}

} while (!dockerRunning && hasLine);

return dockerRunning;
Expand Down
6 changes: 3 additions & 3 deletions src/dockerMenu.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ var DockerMenu = class DockerMenu extends PanelMenu.Button {
const dockerIcon = new St.Icon({ gicon: gicon, icon_size: "24" });

hbox.add_child(dockerIcon);
this.actor.add_child(hbox);
this.actor.connect("button_press_event", this._refreshMenu.bind(this));
this.add_child(hbox);
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just tested in with:

  • Ubuntu 18.04
  • Gnome Shell 3.28.4

and the extension does not start because of error this.add_child is not a function

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh no, my bad :(
I'm very sorry but I have not been able to test on older OS/Gnome versions. I think that the moment has come to spin up a VM running Ubuntu 18.04 (I think it's the main "legacy" version that is worth supporting) for testing purposes.

However, this shouldn't be a too much of a problem, I'll try to add some sort of check on the class of the objects before invoking those methods.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I came out with a solution that involves checking the type of the instance at runtime, I hope you'll find it acceptable.
The alternative could be to ignore the warnings for now and deal with them when it will become mandatory.

I took the chance to bring up a VM with 18.04 and gs 3.28.4, which allowed me to test for compatibility issues, no problems detected.

this.connect("button_press_event", this._refreshMenu.bind(this));

this._renderMenu();
}
Expand Down Expand Up @@ -71,7 +71,7 @@ var DockerMenu = class DockerMenu extends PanelMenu.Button {
this.menu.addMenuItem(new PopupMenu.PopupMenuItem(errMsg));
log(errMsg);
}
this.actor.show();
this.show();
}

// Append containers to menu
Expand Down
8 changes: 4 additions & 4 deletions src/dockerSubMenuMenuItem.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,23 +60,23 @@ var DockerSubMenuMenuItem = class DockerSubMenuMenuItem extends PopupMenu.PopupS

switch (getStatus(containerStatusMessage)) {
case "stopped":
this.actor.insert_child_at_index(createIcon('process-stop-symbolic', 'status-stopped'), 1);
this.insert_child_at_index(createIcon('process-stop-symbolic', 'status-stopped'), 1);
this.menu.addMenuItem(new DockerMenuItem.DockerMenuItem(containerName, DockerActions.START));
this.menu.addMenuItem(new DockerMenuItem.DockerMenuItem(containerName, DockerActions.REMOVE));
break;
case "running":
this.actor.insert_child_at_index(createIcon('system-run-symbolic', 'status-running'), 1);
this.insert_child_at_index(createIcon('system-run-symbolic', 'status-running'), 1);
this.menu.addMenuItem(new DockerMenuItem.DockerMenuItem(containerName, DockerActions.OPEN_SHELL));
this.menu.addMenuItem(new DockerMenuItem.DockerMenuItem(containerName, DockerActions.RESTART));
this.menu.addMenuItem(new DockerMenuItem.DockerMenuItem(containerName, DockerActions.PAUSE));
this.menu.addMenuItem(new DockerMenuItem.DockerMenuItem(containerName, DockerActions.STOP));
break;
case "paused":
this.actor.insert_child_at_index(createIcon('media-playback-pause-symbolic', 'status-paused'), 1);
this.insert_child_at_index(createIcon('media-playback-pause-symbolic', 'status-paused'), 1);
this.menu.addMenuItem(new DockerMenuItem.DockerMenuItem(containerName, DockerActions.UNPAUSE));
break;
default:
this.actor.insert_child_at_index(createIcon('action-unavailable-symbolic', 'status-undefined'), 1);
this.insert_child_at_index(createIcon('action-unavailable-symbolic', 'status-undefined'), 1);
break;
}
}
Expand Down
28 changes: 27 additions & 1 deletion src/utils.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* Gnome3 Docker Menu Extension
* Copyright (C) 2017 Guillaume Pouilloux <[email protected]>
* Copyright (C) 2020 Guillaume Pouilloux <[email protected]>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Expand All @@ -18,6 +18,8 @@

'use strict';

const ByteArray = imports.byteArray;
const GLib = imports.gi.GLib;
const Config = imports.misc.config;

var isGnomeShellVersionLegacy = () => {
Expand All @@ -27,3 +29,27 @@ var isGnomeShellVersionLegacy = () => {
return gnomeShellMajor < 3 ||
(gnomeShellMajor === 3 && gnomeShellMinor < 30);
};

/**
* Run a function in asynchronous mode using GLib
* @param {Function} fn The function to run
* @param {Function} callback The callback to call after fn
*/
var async = (fn, callback) => GLib.timeout_add(GLib.PRIORITY_DEFAULT, 0, () => callback(fn()));

/**
* Return a string representation of the given byteArray
*
* This is necessary for compatibility with older Gnome Shell versions,
* where GJS introspected methods handed back instances of the custom ByteArray
* type. Newer versions replace this behaviour by having methods return
* instances of JS Uint8Array type, whose "toString" method has a different
* purpose, hence an explicit call to ByteArray toString method is required.
* @param {Uint8Array|ByteArray} byteArray
* @return {String} The string representation of byteArray
*/
var getByteArrayString = (byteArray) => {
return byteArray instanceof Uint8Array ?
ByteArray.toString(byteArray)
: byteArray.toString();
};