From 983406784037fc8467fe0ff83605a533cad9b1a5 Mon Sep 17 00:00:00 2001 From: leminlimez <59540996+leminlimez@users.noreply.github.com> Date: Tue, 25 Mar 2025 12:24:06 -0400 Subject: [PATCH 1/4] reset mercury wallpapers --- gui/main_window.py | 4 ++-- tweaks/posterboard_tweak.py | 18 +++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/gui/main_window.py b/gui/main_window.py index 30d765f..0f793f9 100644 --- a/gui/main_window.py +++ b/gui/main_window.py @@ -18,8 +18,8 @@ from tweaks.tweaks import tweaks from tweaks.custom_gestalt_tweaks import CustomGestaltTweaks, ValueTypeStrings from tweaks.daemons_tweak import Daemon -App_Version = "5.0" -App_Build = 0 +App_Version = "5.0.1" +App_Build = 1 class Page(Enum): Home = 0 diff --git a/tweaks/posterboard_tweak.py b/tweaks/posterboard_tweak.py index c6f3e06..b8dd4e2 100644 --- a/tweaks/posterboard_tweak.py +++ b/tweaks/posterboard_tweak.py @@ -157,15 +157,19 @@ class PosterboardTweak(Tweak): return if self.resetting: # null out the folder - file_path = "" + file_paths = [] if self.resetType == 0: # resetting descriptors - file_path = "/61/Extensions/com.apple.WallpaperKit.CollectionsPoster/descriptors" - files_to_restore.append(FileToRestore( - contents=b"", - restore_path=f"/Library/Application Support/PRBPosterExtensionDataStore{file_path}", - domain=f"AppDomain-{self.bundle_id}" - )) + file_paths.append("/61/Extensions/com.apple.WallpaperKit.CollectionsPoster/descriptors") + file_paths.append("/61/Extensions/com.apple.MercuryPoster/descriptors") + else: + file_paths.append("") + for file_path in file_paths: + files_to_restore.append(FileToRestore( + contents=b"", + restore_path=f"/Library/Application Support/PRBPosterExtensionDataStore{file_path}", + domain=f"AppDomain-{self.bundle_id}" + )) return elif self.tendies == None or len(self.tendies) == 0: return From 2132980a60efd13d3ec31533ddbc69f513689a84 Mon Sep 17 00:00:00 2001 From: leminlimez <59540996+leminlimez@users.noreply.github.com> Date: Tue, 25 Mar 2025 13:10:02 -0400 Subject: [PATCH 2/4] ability to disable windows path fix --- devicemanagement/device_manager.py | 6 +- gui/main_window.py | 10 +++ qt/mainwindow.ui | 104 ++++++++++++++++------------- qt/mainwindow_ui.py | 7 ++ qt/ui_mainwindow.py | 7 ++ tweaks/posterboard_tweak.py | 4 +- 6 files changed, 88 insertions(+), 50 deletions(-) diff --git a/devicemanagement/device_manager.py b/devicemanagement/device_manager.py index 85d7f49..0aaeb4f 100644 --- a/devicemanagement/device_manager.py +++ b/devicemanagement/device_manager.py @@ -56,6 +56,7 @@ class DeviceManager: self.apply_over_wifi = False self.auto_reboot = True self.allow_risky_tweaks = False + self.windows_path_fix = True self.show_all_spoofable_models = False self.skip_setup = True self.supervised = False @@ -329,7 +330,10 @@ class DeviceManager: uses_domains = True elif isinstance(tweak, PosterboardTweak): tmp_pb_dir = TemporaryDirectory() - tweak.apply_tweak(files_to_restore=files_to_restore, output_dir=tmp_pb_dir.name) + tweak.apply_tweak( + files_to_restore=files_to_restore, output_dir=tmp_pb_dir.name, + windows_path_fix=self.windows_path_fix + ) else: if gestalt_plist != None: gestalt_plist = tweak.apply_tweak(gestalt_plist) diff --git a/gui/main_window.py b/gui/main_window.py index 0f793f9..30a8c06 100644 --- a/gui/main_window.py +++ b/gui/main_window.py @@ -1,5 +1,6 @@ from PySide6 import QtCore, QtWidgets, QtGui from enum import Enum +from os import name as os_name import webbrowser import plistlib @@ -183,6 +184,11 @@ class MainWindow(QtWidgets.QMainWindow): self.ui.allowWifiApplyingChk.toggled.connect(self.on_allowWifiApplyingChk_toggled) self.ui.autoRebootChk.toggled.connect(self.on_autoRebootChk_toggled) self.ui.showRiskyChk.toggled.connect(self.on_showRiskyChk_toggled) + # windows path fix toggle + if os_name == "nt": + self.ui.windowsPathFixChk.toggled.connect(self.on_windowsPathFixChk_toggled) + else: + self.ui.windowsPathFixChk.hide() self.ui.showAllSpoofableChk.toggled.connect(self.on_showAllSpoofableChk_toggled) self.ui.revertRdarChk.toggled.connect(self.on_revertRdarChk_toggled) @@ -1013,6 +1019,10 @@ class MainWindow(QtWidgets.QMainWindow): else: self.ui.advancedPageBtn.hide() self.ui.resetPRBExtBtn.hide() + def on_windowsPathFixChk_toggled(self, checked: bool): + self.device_manager.windows_path_fix = checked + # save the setting + self.settings.setValue("windows_path_fix", checked) def on_showAllSpoofableChk_toggled(self, checked: bool): self.device_manager.show_all_spoofable_models = checked # save the setting diff --git a/qt/mainwindow.ui b/qt/mainwindow.ui index 88927d9..68f4e45 100644 --- a/qt/mainwindow.ui +++ b/qt/mainwindow.ui @@ -243,7 +243,7 @@ QSlider::tick:horizontal { } - + :/icon/phone.svg:/icon/phone.svg @@ -308,7 +308,7 @@ QSlider::tick:horizontal { } - + :/icon/arrow-clockwise.svg:/icon/arrow-clockwise.svg @@ -415,7 +415,7 @@ QSlider::tick:horizontal { Home - + :/icon/house.svg:/icon/house.svg @@ -462,7 +462,7 @@ QSlider::tick:horizontal { Mobile Gestalt - + :/icon/iphone-island.svg:/icon/iphone-island.svg @@ -506,7 +506,7 @@ QSlider::tick:horizontal { Feature Flags - + :/icon/flag.svg:/icon/flag.svg @@ -535,7 +535,7 @@ QSlider::tick:horizontal { Eligibility - + :/icon/geo-alt.svg:/icon/geo-alt.svg @@ -564,7 +564,7 @@ QSlider::tick:horizontal { Springboard Options - + :/icon/app-indicator.svg:/icon/app-indicator.svg @@ -593,7 +593,7 @@ QSlider::tick:horizontal { Internal Options - + :/icon/hdd.svg:/icon/hdd.svg @@ -625,7 +625,7 @@ QSlider::tick:horizontal { Daemons - + :/icon/toggles.svg:/icon/toggles.svg @@ -657,7 +657,7 @@ QSlider::tick:horizontal { Posterboard - + :/icon/wallpaper.svg:/icon/wallpaper.svg @@ -686,7 +686,7 @@ QSlider::tick:horizontal { Risky Options - + :/icon/star.svg:/icon/star.svg @@ -730,7 +730,7 @@ QSlider::tick:horizontal { Apply - + :/icon/check-circle.svg:/icon/check-circle.svg @@ -759,7 +759,7 @@ QSlider::tick:horizontal { Settings - + :/icon/gear.svg:/icon/gear.svg @@ -873,7 +873,7 @@ QSlider::tick:horizontal { } - + :/icon/phone.svg:/icon/phone.svg @@ -1002,7 +1002,7 @@ QSlider::tick:horizontal { ... - + :/credits/big_nugget.png:/credits/big_nugget.png @@ -1089,7 +1089,7 @@ QSlider::tick:horizontal { Join the Discord - + :/icon/discord.svg:/icon/discord.svg @@ -1103,7 +1103,7 @@ QSlider::tick:horizontal { Star on Github - + :/icon/star.svg:/icon/star.svg @@ -1207,7 +1207,7 @@ QSlider::tick:horizontal { LeminLimez - + :/credits/LeminLimez.png:/credits/LeminLimez.png @@ -1234,7 +1234,7 @@ QToolButton:pressed { ... - + :/icon/twitter.svg:/icon/twitter.svg @@ -1258,7 +1258,7 @@ QToolButton:pressed { ... - + :/icon/github.svg:/icon/github.svg @@ -1283,7 +1283,7 @@ QToolButton:pressed { ... - + :/icon/currency-dollar.svg:/icon/currency-dollar.svg @@ -1683,7 +1683,7 @@ QToolButton:pressed { } - + :/icon/iphone-island.svg:/icon/iphone-island.svg @@ -2221,7 +2221,7 @@ Note: OTA updates will be broken until this is disabled. Add Key - + :/icon/plus.svg:/icon/plus.svg @@ -2338,7 +2338,7 @@ what you are doing. } - + :/icon/flag.svg:/icon/flag.svg @@ -2570,7 +2570,7 @@ Only works on iOS 18.0 beta 1-2. } - + :/icon/geo-alt.svg:/icon/geo-alt.svg @@ -3210,7 +3210,7 @@ QComboBox QAbstractItemView::item:hover { } - + :/icon/app-indicator.svg:/icon/app-indicator.svg @@ -3462,7 +3462,7 @@ QComboBox QAbstractItemView::item:hover { } - + :/icon/hdd.svg:/icon/hdd.svg @@ -3785,7 +3785,7 @@ QComboBox QAbstractItemView::item:hover { } - + :/icon/toggles.svg:/icon/toggles.svg @@ -4144,7 +4144,7 @@ To work properly, also disable the daemon using the toggle above. } - + :/icon/wallpaper.svg:/icon/wallpaper.svg @@ -4209,7 +4209,7 @@ To work properly, also disable the daemon using the toggle above. Find Wallpapers - + :/icon/globe.svg:/icon/globe.svg @@ -4235,7 +4235,7 @@ To work properly, also disable the daemon using the toggle above. ... - + :/icon/questionmark.circle.svg:/icon/questionmark.circle.svg @@ -4312,7 +4312,7 @@ To work properly, also disable the daemon using the toggle above. Import Files (.tendies) - + :/icon/import.svg:/icon/import.svg @@ -4393,7 +4393,7 @@ To work properly, also disable the daemon using the toggle above. Clear Collections Wallpapers - + :/icon/arrow.clockwise.svg:/icon/arrow.clockwise.svg @@ -4412,7 +4412,7 @@ Warning: This will remove all of your wallpapers and will restrict you from addi Remove All Wallpapers - + :/icon/arrow.clockwise.svg:/icon/arrow.clockwise.svg @@ -4487,7 +4487,7 @@ Warning: This will remove all of your wallpapers and will restrict you from addi } - + :/icon/star.svg:/icon/star.svg @@ -4870,7 +4870,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q } - + :/icon/check-circle.svg:/icon/check-circle.svg @@ -4994,7 +4994,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q Choose Gestalt File - + :/icon/folder.svg:/icon/folder.svg @@ -5025,7 +5025,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q Apply Changes - + :/icon/check-circle.svg:/icon/check-circle.svg @@ -5207,7 +5207,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q } - + :/icon/gear.svg:/icon/gear.svg @@ -5344,6 +5344,16 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q + + + + Use Windows Path Fix (for Posterboard) + + + true + + + @@ -5544,7 +5554,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q } - + :/icon/geo-alt.svg:/icon/geo-alt.svg @@ -5829,7 +5839,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q } - + :/icon/pencil.svg:/icon/pencil.svg @@ -5960,7 +5970,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q Import .cowperation - + :/icon/import.svg:/icon/import.svg @@ -5995,7 +6005,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q New Operation - + :/icon/plus.svg:/icon/plus.svg @@ -6076,7 +6086,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q } - + :/icon/compass.svg:/icon/compass.svg @@ -6212,7 +6222,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q } - + :/icon/iphone-island.svg:/icon/iphone-island.svg @@ -6306,7 +6316,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q ... - + :/icon/folder.svg:/icon/folder.svg @@ -6317,7 +6327,7 @@ Warning: Disabling will cause the battery to show "Unknown Part" or &q ... - + :/icon/file-earmark-zip.svg:/icon/file-earmark-zip.svg diff --git a/qt/mainwindow_ui.py b/qt/mainwindow_ui.py index 8d78de5..63b410d 100644 --- a/qt/mainwindow_ui.py +++ b/qt/mainwindow_ui.py @@ -2776,6 +2776,12 @@ class Ui_Nugget(object): self._21.addWidget(self.showRiskyChk) + self.windowsPathFixChk = QCheckBox(self.settingsPageContent) + self.windowsPathFixChk.setObjectName(u"windowsPathFixChk") + self.windowsPathFixChk.setChecked(True) + + self._21.addWidget(self.windowsPathFixChk) + self.showAllSpoofableChk = QCheckBox(self.settingsPageContent) self.showAllSpoofableChk.setObjectName(u"showAllSpoofableChk") @@ -3735,6 +3741,7 @@ class Ui_Nugget(object): self.allowWifiApplyingChk.setText(QCoreApplication.translate("Nugget", u"Allow Applying Over WiFi", None)) self.autoRebootChk.setText(QCoreApplication.translate("Nugget", u"Auto Reboot After Applying", None)) self.showRiskyChk.setText(QCoreApplication.translate("Nugget", u"Show Risky Tweak Options", None)) + self.windowsPathFixChk.setText(QCoreApplication.translate("Nugget", u"Use Windows Path Fix (for Posterboard)", None)) #if QT_CONFIG(tooltip) self.showAllSpoofableChk.setToolTip(QCoreApplication.translate("Nugget", u"Show models for other device types in the AI device spoofing tab.", None)) #endif // QT_CONFIG(tooltip) diff --git a/qt/ui_mainwindow.py b/qt/ui_mainwindow.py index b38b08e..9fd3e00 100644 --- a/qt/ui_mainwindow.py +++ b/qt/ui_mainwindow.py @@ -2776,6 +2776,12 @@ class Ui_Nugget(object): self._21.addWidget(self.showRiskyChk) + self.windowsPathFixChk = QCheckBox(self.settingsPageContent) + self.windowsPathFixChk.setObjectName(u"windowsPathFixChk") + self.windowsPathFixChk.setChecked(True) + + self._21.addWidget(self.windowsPathFixChk) + self.showAllSpoofableChk = QCheckBox(self.settingsPageContent) self.showAllSpoofableChk.setObjectName(u"showAllSpoofableChk") @@ -3735,6 +3741,7 @@ class Ui_Nugget(object): self.allowWifiApplyingChk.setText(QCoreApplication.translate("Nugget", u"Allow Applying Over WiFi", None)) self.autoRebootChk.setText(QCoreApplication.translate("Nugget", u"Auto Reboot After Applying", None)) self.showRiskyChk.setText(QCoreApplication.translate("Nugget", u"Show Risky Tweak Options", None)) + self.windowsPathFixChk.setText(QCoreApplication.translate("Nugget", u"Use Windows Path Fix (for Posterboard)", None)) #if QT_CONFIG(tooltip) self.showAllSpoofableChk.setToolTip(QCoreApplication.translate("Nugget", u"Show models for other device types in the AI device spoofing tab.", None)) #endif // QT_CONFIG(tooltip) diff --git a/tweaks/posterboard_tweak.py b/tweaks/posterboard_tweak.py index b8dd4e2..86aed2f 100644 --- a/tweaks/posterboard_tweak.py +++ b/tweaks/posterboard_tweak.py @@ -151,7 +151,7 @@ class PosterboardTweak(Tweak): else: self.recursive_add(files_to_restore, os.path.join(curr_path, folder), isAdding=False) - def apply_tweak(self, files_to_restore: list[FileToRestore], output_dir: str): + def apply_tweak(self, files_to_restore: list[FileToRestore], output_dir: str, windows_path_fix: bool): # unzip the file if not self.enabled: return @@ -173,7 +173,7 @@ class PosterboardTweak(Tweak): return elif self.tendies == None or len(self.tendies) == 0: return - if os.name == "nt": + if os.name == "nt" and windows_path_fix: # try to get past directory name limit on windows output_dir = "\\\\?\\" + output_dir for tendie in self.tendies: From 97fb04e6e29c90aaee7ebc278d7cb9d79960c2f2 Mon Sep 17 00:00:00 2001 From: leminlimez <59540996+leminlimez@users.noreply.github.com> Date: Tue, 25 Mar 2025 13:27:27 -0400 Subject: [PATCH 3/4] apply skip setup when modifying posterboard --- devicemanagement/device_manager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/devicemanagement/device_manager.py b/devicemanagement/device_manager.py index 0aaeb4f..1cb0d45 100644 --- a/devicemanagement/device_manager.py +++ b/devicemanagement/device_manager.py @@ -334,6 +334,8 @@ class DeviceManager: files_to_restore=files_to_restore, output_dir=tmp_pb_dir.name, windows_path_fix=self.windows_path_fix ) + if tweak.enabled: + uses_domains = True else: if gestalt_plist != None: gestalt_plist = tweak.apply_tweak(gestalt_plist) From 735556b123b8bb20d1623732a24c8f9778ac11c3 Mon Sep 17 00:00:00 2001 From: leminlimez <59540996+leminlimez@users.noreply.github.com> Date: Tue, 25 Mar 2025 17:36:35 -0400 Subject: [PATCH 4/4] update build number --- gui/main_window.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/main_window.py b/gui/main_window.py index 30a8c06..c63bfd8 100644 --- a/gui/main_window.py +++ b/gui/main_window.py @@ -20,7 +20,7 @@ from tweaks.custom_gestalt_tweaks import CustomGestaltTweaks, ValueTypeStrings from tweaks.daemons_tweak import Daemon App_Version = "5.0.1" -App_Build = 1 +App_Build = 0 class Page(Enum): Home = 0