feat: add some info about connected wifi (#354)
* feat: add some info about connected wifi * feat: add some info about connected wifi * fix: convert default label to empty string * feat: add fallbacks * feat: add wifi disconnect * Update modules/menus/network/wifi/WirelessAPs.ts Co-authored-by: Jas Singh <jaskiratpal.singh@outlook.com> * Update modules/menus/network/wifi/WirelessAPs.ts Co-authored-by: Jas Singh <jaskiratpal.singh@outlook.com> * Update modules/bar/network/index.ts --------- Co-authored-by: Jas Singh <jaskiratpal.singh@outlook.com>
This commit is contained in:
@@ -6,6 +6,15 @@ import { BarBoxChild } from 'lib/types/bar.js';
|
|||||||
import Button from 'types/widgets/button.js';
|
import Button from 'types/widgets/button.js';
|
||||||
import { Attribute, Child } from 'lib/types/widget.js';
|
import { Attribute, Child } from 'lib/types/widget.js';
|
||||||
import { runAsyncCommand, throttledScrollHandler } from 'customModules/utils.js';
|
import { runAsyncCommand, throttledScrollHandler } from 'customModules/utils.js';
|
||||||
|
import { Wifi } from 'types/service/network.js';
|
||||||
|
|
||||||
|
const formatFrequency = (frequency: number): string => {
|
||||||
|
return `${(frequency / 1000).toFixed(2)}MHz`;
|
||||||
|
};
|
||||||
|
|
||||||
|
const formatWifiInfo = (wifi: Wifi): string => {
|
||||||
|
return `Network: ${wifi.ssid === '' ? 'None' : wifi.ssid} \nSignal Strength: ${wifi.strength >= 0 ? wifi.strength : '--'}% \nFrequency: ${wifi.frequency >= 0 ? formatFrequency(wifi.frequency) : '--'}`;
|
||||||
|
};
|
||||||
|
|
||||||
const {
|
const {
|
||||||
label: networkLabel,
|
label: networkLabel,
|
||||||
@@ -15,6 +24,7 @@ const {
|
|||||||
middleClick,
|
middleClick,
|
||||||
scrollDown,
|
scrollDown,
|
||||||
scrollUp,
|
scrollUp,
|
||||||
|
showWifiInfo,
|
||||||
} = options.bar.network;
|
} = options.bar.network;
|
||||||
|
|
||||||
const Network = (): BarBoxChild => {
|
const Network = (): BarBoxChild => {
|
||||||
@@ -55,8 +65,9 @@ const Network = (): BarBoxChild => {
|
|||||||
networkLabel.bind('value'),
|
networkLabel.bind('value'),
|
||||||
truncation.bind('value'),
|
truncation.bind('value'),
|
||||||
truncation_size.bind('value'),
|
truncation_size.bind('value'),
|
||||||
|
showWifiInfo.bind('value'),
|
||||||
],
|
],
|
||||||
(pmry, wfi, showLbl, trunc, tSize) => {
|
(pmry, wfi, showLbl, trunc, tSize, showWfiInfo) => {
|
||||||
if (!showLbl) {
|
if (!showLbl) {
|
||||||
return Widget.Box();
|
return Widget.Box();
|
||||||
}
|
}
|
||||||
@@ -69,6 +80,7 @@ const Network = (): BarBoxChild => {
|
|||||||
return Widget.Label({
|
return Widget.Label({
|
||||||
class_name: 'bar-button-label network-label',
|
class_name: 'bar-button-label network-label',
|
||||||
label: wfi.ssid ? `${trunc ? wfi.ssid.substring(0, tSize) : wfi.ssid}` : '--',
|
label: wfi.ssid ? `${trunc ? wfi.ssid.substring(0, tSize) : wfi.ssid}` : '--',
|
||||||
|
tooltipText: showWfiInfo ? formatWifiInfo(wfi) : '',
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -178,7 +178,43 @@ const renderWAPs = (
|
|||||||
Widget.Revealer({
|
Widget.Revealer({
|
||||||
vpack: 'start',
|
vpack: 'start',
|
||||||
reveal_child: ap.bssid !== connecting.value && ap.active,
|
reveal_child: ap.bssid !== connecting.value && ap.active,
|
||||||
child: Widget.Button({
|
child: Widget.Box({
|
||||||
|
children: [
|
||||||
|
Widget.Button({
|
||||||
|
class_name: 'menu-icon-button network disconnect',
|
||||||
|
child: Widget.Label({
|
||||||
|
tooltip_text: 'Disconnect',
|
||||||
|
class_name: 'menu-icon-button disconnect-network txt-icon',
|
||||||
|
label: '',
|
||||||
|
}),
|
||||||
|
on_primary_click: () => {
|
||||||
|
connecting.value = ap.bssid || '';
|
||||||
|
Utils.execAsync('nmcli connection show --active').then(() => {
|
||||||
|
Utils.execAsync('nmcli connection show --active').then((res) => {
|
||||||
|
const connectionId = getIdBySsid(ap.ssid || '', res);
|
||||||
|
|
||||||
|
if (connectionId === undefined) {
|
||||||
|
console.error(
|
||||||
|
`Error while disconnecting "${ap.ssid}": Connection ID not found`,
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Utils.execAsync(
|
||||||
|
`nmcli connection down ${connectionId} "${ap.ssid}"`,
|
||||||
|
)
|
||||||
|
.then(() => (connecting.value = ''))
|
||||||
|
.catch((err) => {
|
||||||
|
connecting.value = '';
|
||||||
|
console.error(
|
||||||
|
`Error while disconnecting "${ap.ssid}": ${err}`,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
Widget.Button({
|
||||||
tooltip_text: 'Delete/Forget Network',
|
tooltip_text: 'Delete/Forget Network',
|
||||||
class_name: 'menu-icon-button network disconnect',
|
class_name: 'menu-icon-button network disconnect',
|
||||||
on_primary_click: () => {
|
on_primary_click: () => {
|
||||||
@@ -194,11 +230,15 @@ const renderWAPs = (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Utils.execAsync(`nmcli connection delete ${connectionId} "${ap.ssid}"`)
|
Utils.execAsync(
|
||||||
|
`nmcli connection delete ${connectionId} "${ap.ssid}"`,
|
||||||
|
)
|
||||||
.then(() => (connecting.value = ''))
|
.then(() => (connecting.value = ''))
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
connecting.value = '';
|
connecting.value = '';
|
||||||
console.error(`Error while forgetting "${ap.ssid}": ${err}`);
|
console.error(
|
||||||
|
`Error while forgetting "${ap.ssid}": ${err}`,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -208,6 +248,8 @@ const renderWAPs = (
|
|||||||
label: '',
|
label: '',
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
|
],
|
||||||
|
}),
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -897,6 +897,7 @@ const options = mkOptions(OPTIONS, {
|
|||||||
},
|
},
|
||||||
network: {
|
network: {
|
||||||
truncation: opt(true),
|
truncation: opt(true),
|
||||||
|
showWifiInfo: opt(false),
|
||||||
truncation_size: opt(7),
|
truncation_size: opt(7),
|
||||||
label: opt(true),
|
label: opt(true),
|
||||||
rightClick: opt(''),
|
rightClick: opt(''),
|
||||||
|
|||||||
@@ -497,6 +497,11 @@ export const BarSettings = (): Scrollable<Gtk.Widget, Gtk.Widget> => {
|
|||||||
title: 'Show Network Name',
|
title: 'Show Network Name',
|
||||||
type: 'boolean',
|
type: 'boolean',
|
||||||
}),
|
}),
|
||||||
|
Option({
|
||||||
|
opt: options.bar.network.showWifiInfo,
|
||||||
|
title: 'Show Wifi Info On Hover',
|
||||||
|
type: 'boolean',
|
||||||
|
}),
|
||||||
Option({
|
Option({
|
||||||
opt: options.bar.network.truncation,
|
opt: options.bar.network.truncation,
|
||||||
title: 'Truncate Network Name',
|
title: 'Truncate Network Name',
|
||||||
|
|||||||
Reference in New Issue
Block a user