diff --git a/iridium_installer/ui/pages/partitioning.py b/iridium_installer/ui/pages/partitioning.py index ef5d1e4..14d07fb 100644 --- a/iridium_installer/ui/pages/partitioning.py +++ b/iridium_installer/ui/pages/partitioning.py @@ -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()