mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-04-13 20:28:21 +10:00
gui_main.py: Add disk highlighting during install
This commit is contained in:
@@ -42,6 +42,7 @@
|
||||
- Streamline GUI relaunch for Root Patch/Unpatch (remembering previous state during patching)
|
||||
- Grey out return buttons while performing sensitive tasks
|
||||
- Add `Currently Booted SIP` info to SIP Settings
|
||||
- Add Disk Highlighting during Build/Install for previously installed disks
|
||||
- Remove manual root unpatching
|
||||
- Removed due to reliablity issues
|
||||
- `bless` based reversion still supported in Big Sur+
|
||||
|
||||
@@ -16,6 +16,7 @@ Here are some common errors users may experience while using this patcher:
|
||||
* [No DisplayPort Output on Mac Pros with Nvidia Kepler](#no-displayport-output-on-mac-pros-with-nvidia-kepler)
|
||||
* [Volume Hash Mismatch Error in macOS Monterey](#volume-hash-mismatch-error-in-macos-monterey)
|
||||
* [Cannot Disable SIP in recoveryOS](#cannot-disable-sip-in-recoveryos)
|
||||
* [Stuck on "Less than a minute remaining..."](#stuck-on-less-than-a-minute-remaining)
|
||||
|
||||
|
||||
## Stuck on `This version of Mac OS X is not supported on this platform`
|
||||
@@ -135,3 +136,9 @@ For those experiencing issues with USB 1.1 devices (such as mice, keyboards and
|
||||
Because of this, we recommend placing a USB 2.0/3.0 hub between your devices and the port on the Mac Pro. UHCI and EHCI cannot both be used at once, so using a USB hub will always force the EHCI controller on.
|
||||
|
||||
* Alternatively, you can try cold starting the hardware and see if macOS recognizes the UHCI controller properly
|
||||
|
||||
## Stuck on "Less than a minute remaining..."
|
||||
|
||||
A common area for systems to get "stuck", namely for units that are missing the `AES` CPU instruction/older mobile hardware. During this stange a lot of heavy cryptography is performed, which can make systems appear to be stuck when in reality they are working quite hard to finish up the installation.
|
||||
|
||||
Be patient at this stage, do not manually reboot your machine. This will break the installation and require you to reinstall.
|
||||
|
||||
@@ -567,9 +567,26 @@ class wx_python_gui:
|
||||
)
|
||||
self.missing_disks.Centre(wx.HORIZONTAL)
|
||||
|
||||
self.color_note = wx.StaticText(self.frame, label="Note: Blue represent the disk OpenCore is currently booted from")
|
||||
self.color_note.SetFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL))
|
||||
self.color_note.SetPosition(
|
||||
wx.Point(
|
||||
self.missing_disks.GetPosition().x,
|
||||
self.missing_disks.GetPosition().y + self.missing_disks.GetSize().height + 5
|
||||
)
|
||||
)
|
||||
self.color_note.Centre(wx.HORIZONTAL)
|
||||
|
||||
# Request Disks Present
|
||||
list_disks = install.tui_disk_installation(self.constants).list_disks()
|
||||
if list_disks:
|
||||
if self.constants.booted_oc_disk is not None:
|
||||
# disk6s1 -> disk6
|
||||
disk_root = self.constants.booted_oc_disk.strip("disk")
|
||||
disk_root = "disk" + disk_root.split("s")[0]
|
||||
else:
|
||||
disk_root = None
|
||||
|
||||
for disk in list_disks:
|
||||
# Create a button for each disk
|
||||
print(f"{list_disks[disk]['disk']} - {list_disks[disk]['name']} - {list_disks[disk]['size']}")
|
||||
@@ -577,21 +594,25 @@ class wx_python_gui:
|
||||
self.install_button.SetLabel(f"{list_disks[disk]['disk']} - {list_disks[disk]['name']} - {list_disks[disk]['size']}")
|
||||
self.install_button.SetPosition(
|
||||
wx.Point(
|
||||
self.missing_disks.GetPosition().x,
|
||||
self.missing_disks.GetPosition().y + self.missing_disks.GetSize().height + 3 + i
|
||||
self.color_note.GetPosition().x,
|
||||
self.color_note.GetPosition().y + self.color_note.GetSize().height + 3 + i
|
||||
)
|
||||
)
|
||||
self.install_button.Bind(wx.EVT_BUTTON, lambda event, temp=disk: self.install_oc_disk_select(temp, list_disks))
|
||||
self.install_button.Centre(wx.HORIZONTAL)
|
||||
i += self.install_button.GetSize().height + 3
|
||||
if disk_root == list_disks[disk]['disk']:
|
||||
# Set label colour to red
|
||||
self.install_button.SetForegroundColour((25, 179, 231))
|
||||
|
||||
else:
|
||||
# Label: No disks found
|
||||
self.install_button = wx.StaticText(self.frame, label="Failed to find any applicable disks")
|
||||
self.install_button.SetFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD))
|
||||
self.install_button.SetPosition(
|
||||
wx.Point(
|
||||
self.missing_disks.GetPosition().x,
|
||||
self.missing_disks.GetPosition().y + self.missing_disks.GetSize().height + 3
|
||||
self.color_note.GetPosition().x,
|
||||
self.color_note.GetPosition().y + self.color_note.GetSize().height + 3
|
||||
)
|
||||
)
|
||||
self.install_button.Centre(wx.HORIZONTAL)
|
||||
@@ -644,6 +665,9 @@ class wx_python_gui:
|
||||
self.install_button.Bind(wx.EVT_BUTTON, lambda event, temp=partition: self.install_oc_process(temp))
|
||||
self.install_button.Centre(wx.HORIZONTAL)
|
||||
i += self.install_button.GetSize().height + 3
|
||||
if self.constants.booted_oc_disk == list_partitions[partition]['partition']:
|
||||
# Set label colour to red
|
||||
self.install_button.SetForegroundColour((25, 179, 231))
|
||||
|
||||
self.return_to_main_menu = wx.Button(self.frame, label="Return to Main Menu")
|
||||
self.return_to_main_menu.SetPosition(
|
||||
|
||||
@@ -192,6 +192,7 @@ class Constants:
|
||||
self.allow_nvme_fixing = True # Allow NVMe Kernel Space Patches
|
||||
self.disable_xcpm = False # Disable XCPM (X86PlatformPlugin.kext)
|
||||
self.root_patcher_succeded = False # Determine if root patcher succeeded
|
||||
self.booted_oc_disk = None # Determine current disk OCLP booted from
|
||||
|
||||
self.legacy_accel_support = [
|
||||
os_data.os_data.mojave,
|
||||
|
||||
@@ -475,6 +475,7 @@ class Computer:
|
||||
cpu: Optional[CPU] = None
|
||||
oclp_version: Optional[str] = None
|
||||
opencore_version: Optional[str] = None
|
||||
opencore_path: Optional[str] = None
|
||||
bluetooth_chipset: Optional[str] = None
|
||||
ambient_light_sensor: Optional[bool] = False
|
||||
third_party_sata_ssd: Optional[bool] = False
|
||||
@@ -696,6 +697,7 @@ class Computer:
|
||||
# OCLP version
|
||||
self.oclp_version = utilities.get_nvram("OCLP-Version", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True)
|
||||
self.opencore_version = utilities.get_nvram("opencore-version", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True)
|
||||
self.opencore_path = utilities.get_nvram("boot-path", "4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102", decode=True)
|
||||
|
||||
def cpu_probe(self):
|
||||
self.cpu = CPU(
|
||||
|
||||
@@ -30,6 +30,7 @@ class OpenCoreLegacyPatcher:
|
||||
self.constants.computer = device_probe.Computer.probe()
|
||||
self.constants.recovery_status = utilities.check_recovery()
|
||||
self.computer = self.constants.computer
|
||||
self.constants.booted_oc_disk = utilities.find_disk_off_uuid(utilities.clean_device_path(self.computer.opencore_path))
|
||||
launcher_script = None
|
||||
launcher_binary = sys.executable
|
||||
if "python" in launcher_binary:
|
||||
|
||||
@@ -403,6 +403,44 @@ def download_file(link, location, is_gui=None, verify_checksum=False):
|
||||
print(link)
|
||||
return None
|
||||
|
||||
def dump_constants(constants):
|
||||
with open(os.path.join(os.path.expanduser('~'), 'Desktop', 'internal_data.txt'), 'w') as f:
|
||||
f.write(str(vars(constants)))
|
||||
|
||||
|
||||
def clean_device_path(device_path: str):
|
||||
# ex:
|
||||
# 'PciRoot(0x0)/Pci(0xA,0x0)/Sata(0x0,0x0,0x0)/HD(1,GPT,C0778F23-3765-4C8E-9BFA-D60C839E7D2D,0x28,0x64000)/EFI\OC\OpenCore.efi'
|
||||
# 'PciRoot(0x0)/Pci(0x1A,0x7)/USB(0x0,0x0)/USB(0x2,0x0)/HD(2,GPT,4E929909-2074-43BA-9773-61EBC110A670,0x64800,0x38E3000)/EFI\OC\OpenCore.efi'
|
||||
# return:
|
||||
# 'C0778F23-3765-4C8E-9BFA-D60C839E7D2D'
|
||||
# '4E929909-2074-43BA-9773-61EBC110A670'
|
||||
|
||||
if device_path:
|
||||
device_path_array = device_path.split("/")
|
||||
# we can always assume [-1] is 'EFI\OC\OpenCore.efi'
|
||||
if len(device_path_array) >= 2:
|
||||
device_path_stripped = device_path_array[-2]
|
||||
device_path_root_array = device_path_stripped.split(",")
|
||||
return device_path_root_array[2]
|
||||
return None
|
||||
|
||||
|
||||
def find_disk_off_uuid(uuid):
|
||||
# Find disk by UUID
|
||||
disk_list = None
|
||||
try:
|
||||
disk_list = plistlib.loads(subprocess.run(["diskutil", "info", "-plist", uuid], stdout=subprocess.PIPE).stdout)
|
||||
except TypeError:
|
||||
pass
|
||||
if disk_list:
|
||||
try:
|
||||
return disk_list["DeviceIdentifier"]
|
||||
except KeyError:
|
||||
pass
|
||||
return None
|
||||
|
||||
|
||||
def grab_mount_point_from_disk(disk):
|
||||
data = plistlib.loads(subprocess.run(f"diskutil info -plist {disk}".split(), stdout=subprocess.PIPE).stdout.decode().strip().encode())
|
||||
return data["MountPoint"]
|
||||
|
||||
Reference in New Issue
Block a user