[gnome-shell/gnome-3-34] networkAgent: Make searching VPN binaries asynchronous
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell/gnome-3-34] networkAgent: Make searching VPN binaries asynchronous
- Date: Tue, 17 Mar 2020 18:39:31 +0000 (UTC)
commit 0a50b6ea0178c6a92d8fe3dc19d689b47d55898a
Author: Florian Müllner <fmuellner gnome org>
Date: Sat Mar 14 22:01:00 2020 +0100
networkAgent: Make searching VPN binaries asynchronous
Doing blocking IO in a graphical UI is bad, doing it in the compositor
is much much worse. So even if handling VPN requests is a relatively
rare event, doing it asynchronously is better.
https://gitlab.gnome.org/GNOME/gnome-shell/issues/2386
js/ui/components/networkAgent.js | 18 ++++++++++++------
1 file changed, 12 insertions(+), 6 deletions(-)
---
diff --git a/js/ui/components/networkAgent.js b/js/ui/components/networkAgent.js
index e1d688343c..7af6214f37 100644
--- a/js/ui/components/networkAgent.js
+++ b/js/ui/components/networkAgent.js
@@ -4,13 +4,15 @@
const { Clutter, Gio, GLib, GObject, NM, Pango, Shell, St } = imports.gi;
const Signals = imports.signals;
-const Config = imports.misc.config;
const Dialog = imports.ui.dialog;
const Main = imports.ui.main;
const MessageTray = imports.ui.messageTray;
const ModalDialog = imports.ui.modalDialog;
const ShellEntry = imports.ui.shellEntry;
+Gio._promisify(Shell.NetworkAgent.prototype,
+ 'search_vpn_plugin', 'search_vpn_plugin_finish');
+
const VPN_UI_GROUP = 'VPN Plugin UI';
var NetworkSecretDialog = GObject.registerClass(
@@ -761,11 +763,11 @@ var NetworkAgent = class {
}
}
- _vpnRequest(requestId, connection, hints, flags) {
+ async _vpnRequest(requestId, connection, hints, flags) {
let vpnSetting = connection.get_setting_vpn();
let serviceType = vpnSetting.service_type;
- let binary = this._findAuthBinary(serviceType);
+ let binary = await this._findAuthBinary(serviceType);
if (!binary) {
log('Invalid VPN service type (cannot find authentication binary)');
@@ -781,11 +783,15 @@ var NetworkAgent = class {
this._vpnRequests[requestId] = vpnRequest;
}
- _findAuthBinary(serviceType) {
- const plugin = NM.VpnPluginInfo.new_search_file(null, serviceType);
+ async _findAuthBinary(serviceType) {
+ let plugin;
- if (plugin === null)
+ try {
+ plugin = await this._native.search_vpn_plugin(serviceType);
+ } catch (e) {
+ logError(e);
return null;
+ }
const fileName = plugin.get_auth_dialog();
if (!GLib.file_test(fileName, GLib.FileTest.IS_EXECUTABLE)) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]