Fix PartitioningPage being stuck on detecting due to duplicate function

This commit is contained in:
2026-02-03 17:23:19 +01:00
parent 22e1fa8f62
commit 2676da751b

View File

@@ -531,5 +531,110 @@ class PartitioningPage(Adw.Bin):
box.append(btn)
win.present()
def get_config(self):
return {"partitions": self.partitions}
def load_partitions(self, disk_device=None):
self.current_disk_path = disk_device
target_disk = None
try:
result = subprocess.run(
["lsblk", "-J", "-b", "-o", "NAME,SIZE,TYPE,FSTYPE,MOUNTPOINT,PKNAME"],
capture_output=True,
text=True,
)
if result.returncode == 0:
data = json.loads(result.stdout)
devices = data.get("blockdevices", [])
if disk_device:
dev_name = disk_device.replace("/dev/", "")
for dev in devices:
if dev.get("name") == dev_name:
target_disk = dev
break
if not target_disk and not disk_device:
for dev in devices:
if (
dev.get("type") == "disk"
and not dev.get("name").startswith("zram")
and not dev.get("name").startswith("loop")
):
target_disk = dev
break
except Exception as e:
print(f"Error loading disks: {e}")
if target_disk:
self.disk_row.set_title(target_disk.get("name", "Unknown Disk"))
self.disk_row.set_subtitle(
f"Size: {self.format_size(target_disk.get('size', 0))}"
)
raw_parts = target_disk.get("children", [])
self.partitions = []
total_disk_size = int(target_disk.get("size", 0))
covered_size = 0
if raw_parts:
for p in raw_parts:
p_size = int(p.get("size", 0))
covered_size += p_size
fstype = p.get("fstype", "").lower()
style = "part-root"
if "fat" in fstype or "efi" in fstype:
style = "part-efi"
elif "swap" in fstype:
style = "part-swap"
self.partitions.append(
{
"type": "partition",
"name": p.get("name"),
"filesystem": p.get("fstype", "Unknown"),
"label": p.get("name"),
"mount_point": p.get("mountpoint", ""),
"size": self.format_size(p_size),
"bytes": p_size,
"style_class": style,
"expand": False,
}
)
remaining = total_disk_size - covered_size
if remaining > 100 * 1024 * 1024:
self.partitions.append(
{
"type": "empty",
"name": "Unallocated",
"size": self.format_size(remaining),
"bytes": remaining,
"style_class": "part-empty",
"expand": False,
}
)
for p in self.partitions:
ratio = p["bytes"] / total_disk_size if total_disk_size > 0 else 0
width = int(ratio * 800)
if width < 50:
width = 50
p["width_request"] = width
else:
self.partitions = [
{
"type": "empty",
"name": "No Disk Selected",
"size": "-",
"style_class": "part-empty",
"width_request": 300,
}
]
self.refresh_bar()