status/network: Merge NMConnectionSection and NMConnectionDevice
Now that the VPN section isn't using NMConnectionSection anymore, NMConnectionDevice is the only subclass. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2407>
This commit is contained in:
parent
0d259d62b2
commit
7357a80d2b
@ -302,14 +302,16 @@ const NMDeviceConnectionItem = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var NMConnectionSection = class NMConnectionSection extends Signals.EventEmitter {
|
var NMDeviceItem = class NMDeviceItem extends Signals.EventEmitter {
|
||||||
constructor(client) {
|
constructor(client, device) {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
if (this.constructor === NMConnectionSection)
|
if (this.constructor === NMDeviceItem)
|
||||||
throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`);
|
throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`);
|
||||||
|
|
||||||
this._client = client;
|
this._client = client;
|
||||||
|
this._device = device;
|
||||||
|
this._deviceName = '';
|
||||||
|
|
||||||
this._connectionItems = new Map();
|
this._connectionItems = new Map();
|
||||||
this._itemSorter = new ItemSorter();
|
this._itemSorter = new ItemSorter();
|
||||||
@ -319,15 +321,65 @@ var NMConnectionSection = class NMConnectionSection extends Signals.EventEmitter
|
|||||||
this.item = new PopupMenu.PopupSubMenuMenuItem('', true);
|
this.item = new PopupMenu.PopupSubMenuMenuItem('', true);
|
||||||
this.item.menu.addMenuItem(this._section);
|
this.item.menu.addMenuItem(this._section);
|
||||||
|
|
||||||
this._client.connectObject('notify::connectivity',
|
this._autoConnectItem = this.item.menu.addAction(_('Connect'), this._autoConnect.bind(this));
|
||||||
this._iconChanged.bind(this), this);
|
this._deactivateItem = this.item.menu.addAction(_('Turn Off'),
|
||||||
|
() => this.deactivateConnection());
|
||||||
|
|
||||||
|
this._client.connectObject(
|
||||||
|
'notify::connectivity', () => this._iconChanged(),
|
||||||
|
'notify::primary-connection', () => this._iconChanged(),
|
||||||
|
this);
|
||||||
|
|
||||||
|
this._device.connectObject(
|
||||||
|
'notify::active-connection', () => this._activeConnectionChanged(),
|
||||||
|
'state-changed', this._deviceStateChanged.bind(this),
|
||||||
|
this);
|
||||||
}
|
}
|
||||||
|
|
||||||
destroy() {
|
destroy() {
|
||||||
this._client.disconnectObject(this);
|
this._client.disconnectObject(this);
|
||||||
|
this._device.disconnectObject(this);
|
||||||
this.item.destroy();
|
this.item.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_canReachInternet() {
|
||||||
|
if (this._client.primary_connection !== this._device.active_connection)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return this._client.connectivity === NM.ConnectivityState.FULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
_autoConnect() {
|
||||||
|
let connection = new NM.SimpleConnection();
|
||||||
|
this._client.add_and_activate_connection_async(connection, this._device, null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
_activeConnectionChanged() {
|
||||||
|
if (this._activeConnection) {
|
||||||
|
let item = this._connectionItems.get(this._activeConnection.connection.get_uuid());
|
||||||
|
item.setActiveConnection(null);
|
||||||
|
this._activeConnection = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
this._sync();
|
||||||
|
}
|
||||||
|
|
||||||
|
_deviceStateChanged(device, newstate, oldstate, reason) {
|
||||||
|
if (newstate === oldstate) {
|
||||||
|
log('device emitted state-changed without actually changing state');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Emit a notification if activation fails, but don't do it
|
||||||
|
if the reason is no secrets, as that indicates the user
|
||||||
|
cancelled the agent dialog */
|
||||||
|
if (newstate === NM.DeviceState.FAILED &&
|
||||||
|
reason !== NM.DeviceStateReason.NO_SECRETS)
|
||||||
|
this.emit('activation-failed');
|
||||||
|
|
||||||
|
this._sync();
|
||||||
|
}
|
||||||
|
|
||||||
_iconChanged() {
|
_iconChanged() {
|
||||||
this._connectionItems.forEach(
|
this._connectionItems.forEach(
|
||||||
item => (item.icon_name = this.getIndicatorIcon()));
|
item => (item.icon_name = this.getIndicatorIcon()));
|
||||||
@ -335,26 +387,20 @@ var NMConnectionSection = class NMConnectionSection extends Signals.EventEmitter
|
|||||||
this.emit('icon-changed');
|
this.emit('icon-changed');
|
||||||
}
|
}
|
||||||
|
|
||||||
_sync() {
|
|
||||||
let nItems = this._connectionItems.size;
|
|
||||||
|
|
||||||
for (const item of this._connectionItems.values())
|
|
||||||
item.radio_mode = nItems > 1;
|
|
||||||
|
|
||||||
this.item.label.text = this._getStatus();
|
|
||||||
this.item.icon.icon_name = this._getMenuIcon();
|
|
||||||
}
|
|
||||||
|
|
||||||
_getMenuIcon() {
|
_getMenuIcon() {
|
||||||
return this.getIndicatorIcon();
|
return this.getIndicatorIcon();
|
||||||
}
|
}
|
||||||
|
|
||||||
_connectionValid(_connection) {
|
_connectionValid(connection) {
|
||||||
return true;
|
return this._device.connection_valid(connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
_makeConnectionItem(connection) {
|
activateConnection(connection) {
|
||||||
return new NMConnectionItem(this, connection);
|
this._client.activate_connection_async(connection, this._device, null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
deactivateConnection(_activeConnection) {
|
||||||
|
this._device.disconnect(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
checkConnection(connection) {
|
checkConnection(connection) {
|
||||||
@ -385,7 +431,7 @@ var NMConnectionSection = class NMConnectionSection extends Signals.EventEmitter
|
|||||||
}
|
}
|
||||||
|
|
||||||
_addConnection(connection) {
|
_addConnection(connection) {
|
||||||
let item = this._makeConnectionItem(connection);
|
const item = new NMDeviceConnectionItem(this, connection);
|
||||||
if (!item)
|
if (!item)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -410,91 +456,6 @@ var NMConnectionSection = class NMConnectionSection extends Signals.EventEmitter
|
|||||||
|
|
||||||
this._sync();
|
this._sync();
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
var NMDeviceItem = class NMDeviceItem extends NMConnectionSection {
|
|
||||||
constructor(client, device) {
|
|
||||||
super(client);
|
|
||||||
|
|
||||||
if (this.constructor === NMDeviceItem)
|
|
||||||
throw new TypeError(`Cannot instantiate abstract type ${this.constructor.name}`);
|
|
||||||
|
|
||||||
this._device = device;
|
|
||||||
this._deviceName = '';
|
|
||||||
|
|
||||||
this._autoConnectItem = this.item.menu.addAction(_("Connect"), this._autoConnect.bind(this));
|
|
||||||
this._deactivateItem = this.item.menu.addAction(_('Turn Off'),
|
|
||||||
() => this.deactivateConnection());
|
|
||||||
|
|
||||||
this._client.connectObject(
|
|
||||||
'notify::primary-connection', () => this._iconChanged(),
|
|
||||||
this);
|
|
||||||
|
|
||||||
this._device.connectObject(
|
|
||||||
'state-changed', this._deviceStateChanged.bind(this),
|
|
||||||
'notify::active-connection', this._activeConnectionChanged.bind(this),
|
|
||||||
this);
|
|
||||||
}
|
|
||||||
|
|
||||||
_canReachInternet() {
|
|
||||||
if (this._client.primary_connection != this._device.active_connection)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return this._client.connectivity == NM.ConnectivityState.FULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
_autoConnect() {
|
|
||||||
let connection = new NM.SimpleConnection();
|
|
||||||
this._client.add_and_activate_connection_async(connection, this._device, null, null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
destroy() {
|
|
||||||
this._device.disconnectObject(this);
|
|
||||||
|
|
||||||
super.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
_activeConnectionChanged() {
|
|
||||||
if (this._activeConnection) {
|
|
||||||
let item = this._connectionItems.get(this._activeConnection.connection.get_uuid());
|
|
||||||
item.setActiveConnection(null);
|
|
||||||
this._activeConnection = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
this._sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
_deviceStateChanged(device, newstate, oldstate, reason) {
|
|
||||||
if (newstate == oldstate) {
|
|
||||||
log('device emitted state-changed without actually changing state');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Emit a notification if activation fails, but don't do it
|
|
||||||
if the reason is no secrets, as that indicates the user
|
|
||||||
cancelled the agent dialog */
|
|
||||||
if (newstate == NM.DeviceState.FAILED &&
|
|
||||||
reason != NM.DeviceStateReason.NO_SECRETS)
|
|
||||||
this.emit('activation-failed');
|
|
||||||
|
|
||||||
this._sync();
|
|
||||||
}
|
|
||||||
|
|
||||||
_connectionValid(connection) {
|
|
||||||
return this._device.connection_valid(connection);
|
|
||||||
}
|
|
||||||
|
|
||||||
_makeConnectionItem(connection) {
|
|
||||||
return new NMDeviceConnectionItem(this, connection);
|
|
||||||
}
|
|
||||||
|
|
||||||
activateConnection(connection) {
|
|
||||||
this._client.activate_connection_async(connection, this._device, null, null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
deactivateConnection(_activeConnection) {
|
|
||||||
this._device.disconnect(null);
|
|
||||||
}
|
|
||||||
|
|
||||||
setDeviceName(name) {
|
setDeviceName(name) {
|
||||||
this._deviceName = name;
|
this._deviceName = name;
|
||||||
@ -507,6 +468,10 @@ var NMDeviceItem = class NMDeviceItem extends NMConnectionSection {
|
|||||||
return this._deviceName;
|
return this._deviceName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_getStatus() {
|
||||||
|
return this._getDescription();
|
||||||
|
}
|
||||||
|
|
||||||
_sync() {
|
_sync() {
|
||||||
let nItems = this._connectionItems.size;
|
let nItems = this._connectionItems.size;
|
||||||
this._autoConnectItem.visible = nItems === 0;
|
this._autoConnectItem.visible = nItems === 0;
|
||||||
@ -524,11 +489,11 @@ var NMDeviceItem = class NMDeviceItem extends NMConnectionSection {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
super._sync();
|
for (const item of this._connectionItems.values())
|
||||||
}
|
item.radio_mode = nItems > 1;
|
||||||
|
|
||||||
_getStatus() {
|
this.item.label.text = this._getStatus();
|
||||||
return this._getDescription();
|
this.item.icon.icon_name = this._getMenuIcon();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1972,7 +1937,7 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
if (!skipSyncDeviceNames)
|
if (!skipSyncDeviceNames)
|
||||||
this._syncDeviceNames();
|
this._syncDeviceNames();
|
||||||
|
|
||||||
if (wrapper instanceof NMConnectionSection) {
|
if (wrapper instanceof NMDeviceItem) {
|
||||||
this._connections.forEach(connection => {
|
this._connections.forEach(connection => {
|
||||||
wrapper.checkConnection(connection);
|
wrapper.checkConnection(connection);
|
||||||
});
|
});
|
||||||
@ -2107,7 +2072,7 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
} else {
|
} else {
|
||||||
const {devices} = this._deviceSections.get(section);
|
const {devices} = this._deviceSections.get(section);
|
||||||
for (let i = 0; i < devices.length; i++) {
|
for (let i = 0; i < devices.length; i++) {
|
||||||
if (devices[i] instanceof NMConnectionSection)
|
if (devices[i] instanceof NMDeviceItem)
|
||||||
devices[i].removeConnection(connection);
|
devices[i].removeConnection(connection);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2127,7 +2092,7 @@ class Indicator extends PanelMenu.SystemIndicator {
|
|||||||
|
|
||||||
const {devices} = this._deviceSections.get(section);
|
const {devices} = this._deviceSections.get(section);
|
||||||
devices.forEach(wrapper => {
|
devices.forEach(wrapper => {
|
||||||
if (wrapper instanceof NMConnectionSection)
|
if (wrapper instanceof NMDeviceItem)
|
||||||
wrapper.checkConnection(connection);
|
wrapper.checkConnection(connection);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user