fix(ui): handle NoneType fstype and remove duplicate code in partitioning page
This commit is contained in:
@@ -291,7 +291,7 @@ class PartitioningPage(Adw.Bin):
|
|||||||
p_size = int(p.get("size", 0))
|
p_size = int(p.get("size", 0))
|
||||||
covered_size += p_size
|
covered_size += p_size
|
||||||
|
|
||||||
fstype = p.get("fstype", "").lower()
|
fstype = (p.get("fstype") or "").lower()
|
||||||
style = "part-root"
|
style = "part-root"
|
||||||
if "fat" in fstype or "efi" in fstype:
|
if "fat" in fstype or "efi" in fstype:
|
||||||
style = "part-efi"
|
style = "part-efi"
|
||||||
@@ -302,7 +302,7 @@ class PartitioningPage(Adw.Bin):
|
|||||||
{
|
{
|
||||||
"type": "partition",
|
"type": "partition",
|
||||||
"name": p.get("name"),
|
"name": p.get("name"),
|
||||||
"filesystem": p.get("fstype", "Unknown"),
|
"filesystem": p.get("fstype") or "Unknown",
|
||||||
"label": p.get("name"),
|
"label": p.get("name"),
|
||||||
"mount_point": p.get("mountpoint", ""),
|
"mount_point": p.get("mountpoint", ""),
|
||||||
"size": self.format_size(p_size),
|
"size": self.format_size(p_size),
|
||||||
@@ -535,108 +535,3 @@ class PartitioningPage(Adw.Bin):
|
|||||||
|
|
||||||
def get_config(self):
|
def get_config(self):
|
||||||
return {"partitions": self.partitions}
|
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()
|
|
||||||
|
|||||||
Reference in New Issue
Block a user