Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
ffcdc7d
refactor: change network list to listview
gmmcosta15 Nov 19, 2025
afe33b2
Refactor: Refac to MVC view with Controller being runnables on a thre…
gmmcosta15 Nov 20, 2025
c1ee388
UPD: Regenerated icon_resources_rc
Robert0Mart Nov 26, 2025
635cfd3
networkWindow.py: refactor to include listview
Nov 28, 2025
7a023f2
networkWindow: rebase merge conflits fix and cleanup
Dec 11, 2025
4d2fc9b
Merge branch 'dev' into ref/network_window
gmmcosta15 Dec 12, 2025
01d42a4
networkWindow.py: added missing right icon
Dec 12, 2025
63df018
Merge branch 'dev' into ref/network_window
gmmcosta15 Dec 12, 2025
8b5962d
Merge remote-tracking branch 'origin/dev' into ref/network_window
HugoCLSC Dec 15, 2025
cc61cfd
Fix typo
HugoCLSC Dec 15, 2025
44e74d4
networkWindow.py: optimize and bugfix on self.paths
Dec 16, 2025
13f91d7
networkWindow.py: comments cleanup
Dec 16, 2025
a7d4981
networkWindow.py: fix missing formatting
Dec 17, 2025
d8edb00
Merge branch 'dev' into ref/network_window
HugoCLSC Jan 2, 2026
4bde21f
Merge remote-tracking branch 'origin' into ref/network_window
Jan 2, 2026
caa1859
Merge branch 'dev' into ref/network_window
Jan 2, 2026
3f51cfe
Revert accidental changes to requirements.txt
Jan 2, 2026
a66c95b
networkwindo.py: between 5 and 25 show only one bar icon
Jan 2, 2026
8294574
Merge branch 'dev' into ref/network_window
gmmcosta15 Jan 13, 2026
4b0678c
Merge branch 'dev' into ref/network_window
Jan 14, 2026
c1aa80f
bugfix: fixed wrong imports
Jan 14, 2026
393d384
bugfix: wrong button name
Jan 14, 2026
25701a8
Merge branch 'bugfix/after-merge-fix' into ref/network_window
Jan 14, 2026
4ac9142
Merge branch 'dev' into ref/network_window
Jan 14, 2026
d6d4665
Merge branch 'dev' into ref/network_window
Jan 14, 2026
52f64f7
resolve merge conflits
Jan 14, 2026
97a881e
add missing docstrings
Jan 14, 2026
5815295
add missing docstrings
Jan 14, 2026
082214b
Merge branch 'dev' into ref/network_window
Jan 15, 2026
21cae02
separation between saved and unsaved network and update code
Jan 16, 2026
a904b85
refactor network window file
Jan 21, 2026
0d52378
Add hidden network page, fix scrollbar behaviour at borders remove th…
Feb 3, 2026
b6e02a2
Merge branch 'dev' into ref/network_window
gmmcosta15 Feb 3, 2026
c63aa87
cleanup of unused code
gmmcosta15 Feb 3, 2026
88e63aa
fix code formatation
gmmcosta15 Feb 3, 2026
e08e9a2
changed QtWidgets.QApplication.processEvents for repaint
gmmcosta15 Feb 3, 2026
bd3189a
delete unused files
gmmcosta15 Feb 4, 2026
8de3ee9
fix formatting issues and logic to parse sensors
gmmcosta15 Feb 4, 2026
0016c81
fix code formatation
gmmcosta15 Feb 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 81 additions & 15 deletions BlocksScreen/lib/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -354,13 +354,15 @@ def get_wired_interfaces(self) -> typing.List[dbusNm.NetworkDeviceWired]:
filter(
lambda path: path,
filter(
lambda device: asyncio.run_coroutine_threadsafe(
dbusNm.NetworkDeviceGeneric(
bus=self.system_dbus, device_path=device
).device_type.get_async(),
self.loop,
).result(timeout=2)
== dbusNm.enums.DeviceType.ETHERNET,
lambda device: (
asyncio.run_coroutine_threadsafe(
dbusNm.NetworkDeviceGeneric(
bus=self.system_dbus, device_path=device
).device_type.get_async(),
self.loop,
).result(timeout=2)
== dbusNm.enums.DeviceType.ETHERNET
),
devices,
),
),
Expand All @@ -386,13 +388,15 @@ def get_wireless_interfaces(
filter(
lambda path: path,
filter(
lambda device: asyncio.run_coroutine_threadsafe(
dbusNm.NetworkDeviceGeneric(
bus=self.system_dbus, device_path=device
).device_type.get_async(),
self.loop,
).result(timeout=3)
== dbusNm.enums.DeviceType.WIFI,
lambda device: (
asyncio.run_coroutine_threadsafe(
dbusNm.NetworkDeviceGeneric(
bus=self.system_dbus, device_path=device
).device_type.get_async(),
self.loop,
).result(timeout=3)
== dbusNm.enums.DeviceType.WIFI
),
devices,
),
),
Expand Down Expand Up @@ -472,6 +476,68 @@ def get_current_ip_addr(self) -> str:
return [address_data["address"][1] for address_data in addr_data][0]
except IndexError as e:
logger.error("List out of index %s", e)
except Exception as e:
logger.error("Error getting current IP address: %s", e)
return ""

def get_device_ip_by_interface(self, interface_name: str = "wlan0") -> str:
"""Get IPv4 address for a specific interface via NetworkManager D-Bus.

This method retrieves the IP address directly from a specific network
interface, useful for getting hotspot IP when it's the active connection
on that interface.

Args:
interface_name: The network interface name (e.g., "wlan0", "eth0")

Returns:
str: The IPv4 address or empty string if not found
"""
if not self.nm:
return ""

try:
devices_future = asyncio.run_coroutine_threadsafe(
self.nm.get_devices(), self.loop
)
devices = devices_future.result(timeout=2)

for device_path in devices:
device = dbusNm.NetworkDeviceGeneric(
bus=self.system_dbus, device_path=device_path
)

# Check if this is the interface we want
iface_future = asyncio.run_coroutine_threadsafe(
device.interface.get_async(), self.loop
)
iface = iface_future.result(timeout=2)

if iface != interface_name:
continue

# Get IP4Config path
ip4_path_future = asyncio.run_coroutine_threadsafe(
device.ip4_config.get_async(), self.loop
)
ip4_path = ip4_path_future.result(timeout=2)

if not ip4_path or ip4_path == "/":
return ""

# Get address data
ip4_config = dbusNm.IPv4Config(bus=self.system_dbus, ip4_path=ip4_path)
addr_data_future = asyncio.run_coroutine_threadsafe(
ip4_config.address_data.get_async(), self.loop
)
addr_data = addr_data_future.result(timeout=2)

if addr_data and len(addr_data) > 0:
return addr_data[0]["address"][1]

except Exception as e:
logger.error("Failed to get IP for interface %s: %s", interface_name, e)

return ""

async def _gather_primary_interface(
Expand Down Expand Up @@ -821,7 +887,7 @@ def get_saved_ssid_names(self) -> typing.List[str]:
return []
return list(
map(
lambda saved_network: (saved_network.get("ssid", None)),
lambda saved_network: saved_network.get("ssid", None),
_saved_networks,
)
)
Expand Down
Loading
Loading