diff --git a/.config/ags/modules/sideright/centermodules/wifinetworks.js b/.config/ags/modules/sideright/centermodules/wifinetworks.js new file mode 100644 index 000000000..20acd18b6 --- /dev/null +++ b/.config/ags/modules/sideright/centermodules/wifinetworks.js @@ -0,0 +1,77 @@ +// This file is for the notification list on the sidebar +// For the popup notifications, see onscreendisplay.js +// The actual widget for each single notification is in ags/modules/.commonwidgets/notification.js +import Widget from 'resource:///com/github/Aylur/ags/widget.js'; +import Network from "resource:///com/github/Aylur/ags/service/network.js"; +import * as Utils from 'resource:///com/github/Aylur/ags/utils.js'; +const { Box, Button, Icon, Label, Revealer, Scrollable, Slider, Stack } = Widget; +const { execAsync, exec } = Utils; +import { MaterialIcon } from '../../.commonwidgets/materialicon.js'; +import { setupCursorHover } from '../../.widgetutils/cursorhover.js'; +import { ConfigToggle } from '../../.commonwidgets/configwidgets.js'; + +const MATERIAL_SYMBOL_SIGNAL_STRENGTH = { + 'network-wireless-signal-excellent-symbolic': "signal_wifi_4_bar", + 'network-wireless-signal-good-symbolic': "network_wifi_3_bar", + 'network-wireless-signal-ok-symbolic': "network_wifi_2_bar", + 'network-wireless-signal-weak-symbolic': "network_wifi_1_bar", + 'network-wireless-signal-none-symbolic': "signal_wifi_0_bar", +} + +const WifiNetwork = (accessPoint) => { + console.log(accessPoint) + const networkStrength = MaterialIcon(MATERIAL_SYMBOL_SIGNAL_STRENGTH[accessPoint.iconName], 'hugerass') + const connectedCheckmark = Revealer({ + transition: 'slide_left', + transitionDuration: userOptions.animations.durationSmall, + revealChild: accessPoint.active, + child: MaterialIcon('check', 'large'), + }) + return Button({ + onClicked: () => execAsync(`nmcli device wifi connect ${accessPoint.bssid}`).catch(e => { + Utils.notify({ + summary: "Network", + body: e, + actions: { + "Open network manager": () => execAsync("nm-connection-editor").catch(print) + } + }); + }).catch(e => console.error(e)), + child: Box({ + className: 'sidebar-wifinetworks-network spacing-h-10', + children: [ + networkStrength, + Label({ label: accessPoint.ssid }), + Box({ hexpand: true }), + connectedCheckmark, + ], + }), + setup: setupCursorHover, + }) +} + +export default (props) => { + const networkList = Scrollable({ + vexpand: true, + child: Box({ + attribute: { + 'updateNetworks': (self) => { + self.children = Network.wifi?.access_points?.map(n => WifiNetwork(n)); + }, + }, + vertical: true, + className: 'spacing-v-5', + setup: (self) => self.hook(Network, self.attribute.updateNetworks), + }) + }) + return Box({ + ...props, + className: 'spacing-v-5', + vertical: true, + children: [ + networkList, + // mainContent, + // status, + ] + }); +}