Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
94cf29d
Build(deps): Bump requests from 2.32.3 to 2.32.4 in /scripts (#105)
dependabot[bot] Nov 26, 2025
3e3583b
Hugoclsc/feature/GitHub actions (#107)
HugoCLSC Nov 28, 2025
420a3e1
Hugoclsc/feature/GitHub actions (#113)
HugoCLSC Dec 5, 2025
bc1156c
Hugoclsc/feature/GitHub actions (#114)
HugoCLSC Dec 5, 2025
ca9eb86
Hugoclsc/feature/GitHub actions (#115)
HugoCLSC Dec 5, 2025
69deb3b
Hugoclsc/feature/GitHub actions (#116)
HugoCLSC Dec 5, 2025
8229438
Refactor/tests compliance (#117)
HugoCLSC Dec 10, 2025
8e48a21
ADD: added overriedCursor to blank cursor (#118)
Robert0Mart Dec 11, 2025
e852346
ADD: color degrade when ON/OFF (#120)
Robert0Mart Dec 11, 2025
868d0fd
Bugfix label overlap (#121)
Robert0Mart Dec 11, 2025
eb18055
Bugfix: Delete file handling and QDialog class refactoring (#128)
HugoCLSC Dec 12, 2025
260b126
Work fan page (#119)
Robert0Mart Dec 12, 2025
70e2c43
Fix issues intruduced in Bugfix label overlap #121 (#129)
HugoCLSC Dec 12, 2025
f703fc6
Fix Merge problems introduced on the previous pull requests (#131)
HugoCLSC Dec 15, 2025
ca9b7f0
Added standard pull request template (#133)
HugoCLSC Dec 15, 2025
3b91e46
Bugfix: fixed white dot on list_model.py (#130)
Robert0Mart Dec 15, 2025
6f4c3e3
Bugfix thumbnail not working (#123)
Robert0Mart Dec 18, 2025
6fbc375
Bugfix uninitilized variable access introduced on #123 (#141)
HugoCLSC Jan 2, 2026
de9fe96
Refactor `SensorPanel`: replace `QListWidgetItem` with `EntryListMode…
gmmcosta15 Jan 2, 2026
4d973b6
Refactor `filesPage.py`: Changed Files List `QtWidgets.QListWidgetIte…
gmmcosta15 Jan 2, 2026
d013f12
Work group button refactor (#137)
Robert0Mart Jan 2, 2026
db29de9
Bugfix `tunePage`: Add clickability and distinct icons to controllabl…
gmmcosta15 Jan 2, 2026
c3bfa56
Work display info UI (#140)
Robert0Mart Jan 2, 2026
11c8572
Work input shapper rework (#134)
Robert0Mart Jan 5, 2026
5339d51
Work connnectivity update page (#139)
Robert0Mart Jan 12, 2026
0e7a3e7
Bugfix/tab unlocking (#147)
Robert0Mart Jan 12, 2026
4ece704
jobStatusPage: only load filedata when printer is printing (#150)
gmmcosta15 Jan 12, 2026
fa53e8c
Bugfix/inputshaper page (#148)
Robert0Mart Jan 14, 2026
1465ea1
work popup features (#144)
Robert0Mart Jan 14, 2026
dd13e39
Improvement/Apply Z‑offset changes immediately, with an option to sav…
gmmcosta15 Jan 14, 2026
95d956f
Work network priority (#122)
Robert0Mart Jan 14, 2026
102a746
Bugfix: fixed loadwidget default being placeholder (gif) (#145)
Robert0Mart Jan 14, 2026
a9a486b
Bugfix/after merge fix (#151)
Robert0Mart Jan 14, 2026
646d997
Merge branch 'main' into dev
HugoCLSC Jan 14, 2026
1a3f83e
Fans controlling UI wasnt working (#153)
gmmcosta15 Jan 14, 2026
92e7e54
Bugfix/update page & Popup logic (#154)
Robert0Mart Jan 14, 2026
ca26de5
bugfix: ipv4 ip command error fix (#155)
gmmcosta15 Jan 15, 2026
0dd5d86
bugfix: fans_widget on tunepage are stacked (#156)
gmmcosta15 Jan 16, 2026
25f2afe
Merge branch 'main' into dev
HugoCLSC Jan 16, 2026
c17c7ae
Merge remote-tracking branch 'origin/main' into dev
HugoCLSC Jan 16, 2026
a5f3600
bugfix ztilt loadscreen (#158)
Robert0Mart Jan 19, 2026
7b1fdb7
Merge remote-tracking branch 'origin/main' into dev
HugoCLSC Jan 19, 2026
a17c8eb
bugfix: inputshaper load not hiding (#161)
Robert0Mart Jan 19, 2026
14a6084
bugfix/popup show right arrow (#163)
gmmcosta15 Jan 20, 2026
d0144bf
swap lower and raise nozzle icons (#164)
gmmcosta15 Jan 20, 2026
d62879f
Refactor loadscreen on the project (#165)
Robert0Mart Jan 20, 2026
61ff8fd
Merge remote-tracking branch 'origin/main' into dev
HugoCLSC Jan 21, 2026
5a6732c
Deleted Unused `ztilt_state` variable from control tab (#166)
HugoCLSC Jan 21, 2026
3219f82
Merge remote-tracking branch 'origin/main' into dev
HugoCLSC Jan 21, 2026
8ba3d63
ADD: Additional load messages (#169)
Robert0Mart Jan 28, 2026
72fb8a0
Refactor `NetworkWindow` (#174)
gmmcosta15 Feb 4, 2026
3323adf
Fix incorrect file removal (#177)
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
1 change: 1 addition & 0 deletions BlocksScreen/lib/panels/controlTab.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ def __init__(
self.probe_helper_page.subscribe_config[list, "PyQt_PyObject"].connect(
self.printer.on_subscribe_config
)
self.printer.extruder_update.connect(self.probe_helper_page.on_extruder_update)
self.printer.gcode_move_update.connect(
self.probe_helper_page.on_gcode_move_update
)
Expand Down
Loading