[gnome-shell] NetworkMenu: fix updating connection lists
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] NetworkMenu: fix updating connection lists
- Date: Thu, 31 May 2012 18:50:22 +0000 (UTC)
commit 35b142f23f2aec3218bf1d7a5bc19779fd4c7928
Author: Giovanni Campagna <gcampagna src gnome org>
Date: Thu May 31 19:13:16 2012 +0200
NetworkMenu: fix updating connection lists
Ensure that the UI is updated when a connection changes name or id,
even if it was already known by a device.
Also, use less private properties on NMConnection objects, as they
can become stale and cause problems.
https://bugzilla.gnome.org/show_bug.cgi?id=677097
js/ui/status/network.js | 80 +++++++++++++++++++++-------------------------
1 files changed, 37 insertions(+), 43 deletions(-)
---
diff --git a/js/ui/status/network.js b/js/ui/status/network.js
index 46e9da9..c386c76 100644
--- a/js/ui/status/network.js
+++ b/js/ui/status/network.js
@@ -304,9 +304,10 @@ const NMDevice = new Lang.Class({
// record the connection
let obj = {
connection: connections[i],
- name: connections[i]._name,
- uuid: connections[i]._uuid,
+ name: connections[i].get_id(),
+ uuid: connections[i].get_uuid(),
timestamp: connections[i]._timestamp,
+ item: null,
};
this._connections.push(obj);
}
@@ -401,48 +402,46 @@ const NMDevice = new Lang.Class({
},
checkConnection: function(connection) {
- let pos = this._findConnection(connection._uuid);
+ let pos = this._findConnection(connection.get_uuid());
let exists = pos != -1;
let valid = this.connectionValid(connection);
+ let similar = false;
+ if (exists) {
+ let existing = this._connections[pos];
- if (exists && !valid)
- this.removeConnection(connection);
- else if (!exists && valid)
- this.addConnection(connection);
- else if (exists && valid) {
- // propagate changes and update the UI
-
- if (this._connections[pos].timestamp != connection._timestamp) {
- this._connections[pos].timestamp = connection._timestamp;
- this._connections.sort(this._connectionSortFunction);
+ // Check if connection changed name or id
+ similar = existing.name == connection.get_id() &&
+ existing.timestamp == connection._timestamp;
+ }
- this._clearSection();
- this._queueCreateSection();
- }
+ if (exists && valid && similar) {
+ // Nothing to do
+ return;
}
+
+ if (exists)
+ this.removeConnection(connection);
+ if (valid)
+ this.addConnection(connection);
},
addConnection: function(connection) {
// record the connection
let obj = {
connection: connection,
- name: connection._name,
- uuid: connection._uuid,
+ name: connection.get_id(),
+ uuid: connection.get_uuid(),
timestamp: connection._timestamp,
+ item: null,
};
- this._connections.push(obj);
- this._connections.sort(this._connectionSortFunction);
+ Util.insertSorted(this._connections, obj, this._connectionSortFunction);
this._clearSection();
this._queueCreateSection();
},
removeConnection: function(connection) {
- if (!connection._uuid) {
- log('Cannot remove a connection without an UUID');
- return;
- }
- let pos = this._findConnection(connection._uuid);
+ let pos = this._findConnection(connection.get_uuid());
if (pos == -1) {
// this connection was never added, nothing to do here
return;
@@ -712,10 +711,10 @@ const NMDeviceWired = new Lang.Class({
_createAutomaticConnection: function() {
let connection = new NetworkManager.Connection();
- connection._uuid = NetworkManager.utils_uuid_generate();
+ let uuid = NetworkManager.utils_uuid_generate();
connection.add_setting(new NetworkManager.SettingWired());
connection.add_setting(new NetworkManager.SettingConnection({
- uuid: connection._uuid,
+ uuid: uuid,
id: this._autoConnectionName,
type: NetworkManager.SETTING_WIRED_SETTING_NAME,
autoconnect: true
@@ -859,10 +858,10 @@ const NMDeviceBluetooth = new Lang.Class({
_createAutomaticConnection: function() {
let connection = new NetworkManager.Connection;
- connection._uuid = NetworkManager.utils_uuid_generate();
+ let uuid = NetworkManager.utils_uuid_generate();
connection.add_setting(new NetworkManager.SettingBluetooth);
connection.add_setting(new NetworkManager.SettingConnection({
- uuid: connection._uuid,
+ uuid: uuid,
id: this._autoConnectionName,
type: NetworkManager.SETTING_BLUETOOTH_SETTING_NAME,
autoconnect: false
@@ -1323,9 +1322,7 @@ const NMDeviceWireless = new Lang.Class({
},
removeConnection: function(connection) {
- if (!connection._uuid)
- return;
- let pos = this._findConnection(connection._uuid);
+ let pos = this._findConnection(connection.get_uuid());
if (pos == -1) {
// removing connection that was never added
return;
@@ -1339,7 +1336,7 @@ const NMDeviceWireless = new Lang.Class({
let apObj = this._networks[i];
let connections = apObj.connections;
for (let k = 0; k < connections.length; k++) {
- if (connections[k]._uuid == connection._uuid) {
+ if (connections[k].get_uuid() == connection.get_uuid()) {
// remove the connection from the access point group
connections.splice(k);
forceupdate = forceupdate || connections.length == 0;
@@ -1355,7 +1352,7 @@ const NMDeviceWireless = new Lang.Class({
forceupdate = true;
} else {
for (let j = 0; j < items.length; j++) {
- if (items[j]._connection._uuid == connection._uuid) {
+ if (items[j]._connection.get_uuid() == connection.get_uuid()) {
items[j].destroy();
break;
}
@@ -1382,8 +1379,8 @@ const NMDeviceWireless = new Lang.Class({
// record the connection
let obj = {
connection: connection,
- name: connection._name,
- uuid: connection._uuid,
+ name: connection.get_id(),
+ uuid: connection.get_uuid(),
};
this._connections.push(obj);
@@ -1878,7 +1875,7 @@ const NMApplet = new Lang.Class({
let connections = this._settings.list_connections();
for (let i = 0; i < connections.length; i++) {
let connection = connections[i];
- if (connection._uuid) {
+ if (connection._updatedId) {
// connection was already seen (for example because NetworkManager was restarted)
continue;
}
@@ -1891,7 +1888,7 @@ const NMApplet = new Lang.Class({
},
_newConnection: function(settings, connection) {
- if (connection._uuid) {
+ if (connection._updatedId) {
// connection was already seen
return;
}
@@ -1922,23 +1919,20 @@ const NMApplet = new Lang.Class({
devices[i].removeConnection(connection);
}
- connection._uuid = null;
connection.disconnect(connection._removedId);
connection.disconnect(connection._updatedId);
+ connection._removedId = connection._updatedId = 0;
},
_updateConnection: function(connection) {
let connectionSettings = connection.get_setting_by_name(NetworkManager.SETTING_CONNECTION_SETTING_NAME);
connection._type = connectionSettings.type;
-
connection._section = this._ctypes[connection._type] || NMConnectionCategory.INVALID;
- connection._name = connectionSettings.id;
- connection._uuid = connectionSettings.uuid;
connection._timestamp = connectionSettings.timestamp;
let section = connection._section;
- if (connection._section == NMConnectionCategory.INVALID)
+ if (section == NMConnectionCategory.INVALID)
return;
if (section == NMConnectionCategory.VPN) {
this._devices.vpn.device.checkConnection(connection);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]