From 198c4d8f584d04ff723891662af316f987a208ec Mon Sep 17 00:00:00 2001 From: leminlimez <59540996+leminlimez@users.noreply.github.com> Date: Mon, 31 Mar 2025 09:32:28 -0400 Subject: [PATCH 1/4] ignore errors for cleaning up tmpdir --- devicemanagement/device_manager.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/devicemanagement/device_manager.py b/devicemanagement/device_manager.py index 50f0b79..4ead1b9 100644 --- a/devicemanagement/device_manager.py +++ b/devicemanagement/device_manager.py @@ -423,7 +423,11 @@ class DeviceManager: update_label("Restoring to device...") restore_files(files=files_to_restore, reboot=self.auto_reboot, lockdown_client=self.data_singleton.current_device.ld) if tmp_pb_dir != None: - tmp_pb_dir.cleanup() + try: + tmp_pb_dir.cleanup() + except Exception as e: + # ignore clean up errors + print(str(e)) msg = "Your device will now restart." if not self.auto_reboot: msg = "Please restart your device to see changes." @@ -431,7 +435,11 @@ class DeviceManager: update_label("Success!") except Exception as e: if tmp_pb_dir != None: - tmp_pb_dir.cleanup() + try: + tmp_pb_dir.cleanup() + except Exception as e: + # ignore clean up errors + print(str(e)) show_apply_error(e, update_label) ## RESETTING MOBILE GESTALT From 3766f655acae221a4a81dddffeec3da10471531d Mon Sep 17 00:00:00 2001 From: leminlimez <59540996+leminlimez@users.noreply.github.com> Date: Mon, 31 Mar 2025 10:05:50 -0400 Subject: [PATCH 2/4] use rarfile on windows instead of zipfile --- gui/main_window.py | 4 ++-- requirements.txt | 1 + tweaks/posterboard_tweak.py | 14 ++++++++++++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/gui/main_window.py b/gui/main_window.py index 7c90689..48ad413 100644 --- a/gui/main_window.py +++ b/gui/main_window.py @@ -19,8 +19,8 @@ from tweaks.tweaks import tweaks from tweaks.custom_gestalt_tweaks import CustomGestaltTweaks, ValueTypeStrings from tweaks.daemons_tweak import Daemon -App_Version = "5.0.2" -App_Build = 0 +App_Version = "5.0.3" +App_Build = 1 class Page(Enum): Home = 0 diff --git a/requirements.txt b/requirements.txt index d8a73dd..ea89fba 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ pymobiledevice3 PySide6-Essentials PyInstaller +rarfile \ No newline at end of file diff --git a/tweaks/posterboard_tweak.py b/tweaks/posterboard_tweak.py index 388e355..d33961b 100644 --- a/tweaks/posterboard_tweak.py +++ b/tweaks/posterboard_tweak.py @@ -1,5 +1,6 @@ import os import zipfile +import rarfile import uuid import re from random import randint @@ -182,7 +183,16 @@ class PosterboardTweak(Tweak): for tendie in self.tendies: zip_output = os.path.join(output_dir, str(uuid.uuid4())) os.makedirs(zip_output) - with zipfile.ZipFile(tendie.path, 'r') as zip_ref: - zip_ref.extractall(zip_output) + if os == 'nt': + rar_archive = rarfile.RarFile(tendie.path) + try: + # Extract the contents to the target directory + rar_archive.extractall(path=zip_output) + finally: + # Close the RAR file to release resources + rar_archive.close() + else: + with zipfile.ZipFile(tendie.path, 'r') as zip_ref: + zip_ref.extractall(zip_output) # add the files self.recursive_add(files_to_restore, curr_path=output_dir) From ad2685f3e00be6f20bce6d910479982374ebf12f Mon Sep 17 00:00:00 2001 From: leminlimez <59540996+leminlimez@users.noreply.github.com> Date: Mon, 31 Mar 2025 10:07:08 -0400 Subject: [PATCH 3/4] move posterboard tab to the top --- qt/mainwindow.ui | 64 ++++++++++++++++----------------- qt/mainwindow_ui.py | 86 ++++++++++++++++++++++----------------------- qt/ui_mainwindow.py | 86 ++++++++++++++++++++++----------------------- 3 files changed, 118 insertions(+), 118 deletions(-) diff --git a/qt/mainwindow.ui b/qt/mainwindow.ui index 68f4e45..ab69095 100644 --- a/qt/mainwindow.ui +++ b/qt/mainwindow.ui @@ -450,6 +450,38 @@ QSlider::tick:horizontal { + + + + true + + + + 0 + 0 + + + + Posterboard + + + + :/icon/wallpaper.svg:/icon/wallpaper.svg + + + true + + + true + + + Qt::ToolButtonTextBesideIcon + + + sidebarBtn + + + @@ -642,38 +674,6 @@ QSlider::tick:horizontal { - - - - true - - - - 0 - 0 - - - - Posterboard - - - - :/icon/wallpaper.svg:/icon/wallpaper.svg - - - true - - - true - - - Qt::ToolButtonTextBesideIcon - - - sidebarBtn - - - diff --git a/qt/mainwindow_ui.py b/qt/mainwindow_ui.py index 63b410d..40483c4 100644 --- a/qt/mainwindow_ui.py +++ b/qt/mainwindow_ui.py @@ -317,13 +317,27 @@ class Ui_Nugget(object): self.verticalLayout.addWidget(self.sidebarDiv1) + self.posterboardPageBtn = QToolButton(self.sidebar) + self.posterboardPageBtn.setObjectName(u"posterboardPageBtn") + self.posterboardPageBtn.setEnabled(True) + sizePolicy2.setHeightForWidth(self.posterboardPageBtn.sizePolicy().hasHeightForWidth()) + self.posterboardPageBtn.setSizePolicy(sizePolicy2) + icon3 = QIcon() + icon3.addFile(u":/icon/wallpaper.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.posterboardPageBtn.setIcon(icon3) + self.posterboardPageBtn.setCheckable(True) + self.posterboardPageBtn.setAutoExclusive(True) + self.posterboardPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) + + self.verticalLayout.addWidget(self.posterboardPageBtn) + self.gestaltPageBtn = QToolButton(self.sidebar) self.gestaltPageBtn.setObjectName(u"gestaltPageBtn") sizePolicy2.setHeightForWidth(self.gestaltPageBtn.sizePolicy().hasHeightForWidth()) self.gestaltPageBtn.setSizePolicy(sizePolicy2) - icon3 = QIcon() - icon3.addFile(u":/icon/iphone-island.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.gestaltPageBtn.setIcon(icon3) + icon4 = QIcon() + icon4.addFile(u":/icon/iphone-island.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.gestaltPageBtn.setIcon(icon4) self.gestaltPageBtn.setIconSize(QSize(24, 28)) self.gestaltPageBtn.setCheckable(True) self.gestaltPageBtn.setAutoExclusive(True) @@ -339,9 +353,9 @@ class Ui_Nugget(object): font = QFont() font.setFamilies([u".AppleSystemUIFont"]) self.featureFlagsPageBtn.setFont(font) - icon4 = QIcon() - icon4.addFile(u":/icon/flag.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.featureFlagsPageBtn.setIcon(icon4) + icon5 = QIcon() + icon5.addFile(u":/icon/flag.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.featureFlagsPageBtn.setIcon(icon5) self.featureFlagsPageBtn.setCheckable(True) self.featureFlagsPageBtn.setAutoExclusive(True) self.featureFlagsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) @@ -352,9 +366,9 @@ class Ui_Nugget(object): self.euEnablerPageBtn.setObjectName(u"euEnablerPageBtn") sizePolicy2.setHeightForWidth(self.euEnablerPageBtn.sizePolicy().hasHeightForWidth()) self.euEnablerPageBtn.setSizePolicy(sizePolicy2) - icon5 = QIcon() - icon5.addFile(u":/icon/geo-alt.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.euEnablerPageBtn.setIcon(icon5) + icon6 = QIcon() + icon6.addFile(u":/icon/geo-alt.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.euEnablerPageBtn.setIcon(icon6) self.euEnablerPageBtn.setCheckable(True) self.euEnablerPageBtn.setAutoExclusive(True) self.euEnablerPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) @@ -365,9 +379,9 @@ class Ui_Nugget(object): self.springboardOptionsPageBtn.setObjectName(u"springboardOptionsPageBtn") sizePolicy2.setHeightForWidth(self.springboardOptionsPageBtn.sizePolicy().hasHeightForWidth()) self.springboardOptionsPageBtn.setSizePolicy(sizePolicy2) - icon6 = QIcon() - icon6.addFile(u":/icon/app-indicator.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.springboardOptionsPageBtn.setIcon(icon6) + icon7 = QIcon() + icon7.addFile(u":/icon/app-indicator.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.springboardOptionsPageBtn.setIcon(icon7) self.springboardOptionsPageBtn.setCheckable(True) self.springboardOptionsPageBtn.setAutoExclusive(True) self.springboardOptionsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) @@ -378,9 +392,9 @@ class Ui_Nugget(object): self.internalOptionsPageBtn.setObjectName(u"internalOptionsPageBtn") sizePolicy2.setHeightForWidth(self.internalOptionsPageBtn.sizePolicy().hasHeightForWidth()) self.internalOptionsPageBtn.setSizePolicy(sizePolicy2) - icon7 = QIcon() - icon7.addFile(u":/icon/hdd.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.internalOptionsPageBtn.setIcon(icon7) + icon8 = QIcon() + icon8.addFile(u":/icon/hdd.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.internalOptionsPageBtn.setIcon(icon8) self.internalOptionsPageBtn.setCheckable(True) self.internalOptionsPageBtn.setAutoExclusive(True) self.internalOptionsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) @@ -392,29 +406,15 @@ class Ui_Nugget(object): self.daemonsPageBtn.setEnabled(True) sizePolicy2.setHeightForWidth(self.daemonsPageBtn.sizePolicy().hasHeightForWidth()) self.daemonsPageBtn.setSizePolicy(sizePolicy2) - icon8 = QIcon() - icon8.addFile(u":/icon/toggles.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.daemonsPageBtn.setIcon(icon8) + icon9 = QIcon() + icon9.addFile(u":/icon/toggles.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) + self.daemonsPageBtn.setIcon(icon9) self.daemonsPageBtn.setCheckable(True) self.daemonsPageBtn.setAutoExclusive(True) self.daemonsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) self.verticalLayout.addWidget(self.daemonsPageBtn) - self.posterboardPageBtn = QToolButton(self.sidebar) - self.posterboardPageBtn.setObjectName(u"posterboardPageBtn") - self.posterboardPageBtn.setEnabled(True) - sizePolicy2.setHeightForWidth(self.posterboardPageBtn.sizePolicy().hasHeightForWidth()) - self.posterboardPageBtn.setSizePolicy(sizePolicy2) - icon9 = QIcon() - icon9.addFile(u":/icon/wallpaper.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off) - self.posterboardPageBtn.setIcon(icon9) - self.posterboardPageBtn.setCheckable(True) - self.posterboardPageBtn.setAutoExclusive(True) - self.posterboardPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) - - self.verticalLayout.addWidget(self.posterboardPageBtn) - self.advancedPageBtn = QToolButton(self.sidebar) self.advancedPageBtn.setObjectName(u"advancedPageBtn") sizePolicy2.setHeightForWidth(self.advancedPageBtn.sizePolicy().hasHeightForWidth()) @@ -930,7 +930,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_8.setIcon(icon3) + self.toolButton_8.setIcon(icon4) self.toolButton_8.setIconSize(QSize(30, 30)) self.horizontalLayout_5.addWidget(self.toolButton_8) @@ -1273,7 +1273,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_10.setIcon(icon4) + self.toolButton_10.setIcon(icon5) self.horizontalLayout_20.addWidget(self.toolButton_10) @@ -1379,7 +1379,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_11.setIcon(icon5) + self.toolButton_11.setIcon(icon6) self.horizontalLayout_21.addWidget(self.toolButton_11) @@ -1684,7 +1684,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_7.setIcon(icon6) + self.toolButton_7.setIcon(icon7) self.horizontalLayout_13.addWidget(self.toolButton_7) @@ -1810,7 +1810,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_101.setIcon(icon7) + self.toolButton_101.setIcon(icon8) self.horizontalLayout_201.addWidget(self.toolButton_101) @@ -1991,7 +1991,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_102.setIcon(icon8) + self.toolButton_102.setIcon(icon9) self.horizontalLayout_202.addWidget(self.toolButton_102) @@ -2182,7 +2182,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_103.setIcon(icon9) + self.toolButton_103.setIcon(icon3) self.horizontalLayout_203.addWidget(self.toolButton_103) @@ -2889,7 +2889,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_13.setIcon(icon5) + self.toolButton_13.setIcon(icon6) self.horizontalLayout_28.addWidget(self.toolButton_13) @@ -3222,7 +3222,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.themesBtn.setIcon(icon3) + self.themesBtn.setIcon(icon4) self.themesBtn.setIconSize(QSize(30, 30)) self.horizontalLayout_23.addWidget(self.themesBtn) @@ -3388,6 +3388,8 @@ class Ui_Nugget(object): self.titleBar.setText(QCoreApplication.translate("Nugget", u"Nugget", None)) self.homePageBtn.setText(QCoreApplication.translate("Nugget", u" Home", None)) self.homePageBtn.setProperty(u"cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) + self.posterboardPageBtn.setText(QCoreApplication.translate("Nugget", u" Posterboard", None)) + self.posterboardPageBtn.setProperty(u"cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.gestaltPageBtn.setText(QCoreApplication.translate("Nugget", u" Mobile Gestalt", None)) self.gestaltPageBtn.setProperty(u"cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.featureFlagsPageBtn.setText(QCoreApplication.translate("Nugget", u" Feature Flags", None)) @@ -3400,8 +3402,6 @@ class Ui_Nugget(object): self.internalOptionsPageBtn.setProperty(u"cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.daemonsPageBtn.setText(QCoreApplication.translate("Nugget", u" Daemons", None)) self.daemonsPageBtn.setProperty(u"cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) - self.posterboardPageBtn.setText(QCoreApplication.translate("Nugget", u" Posterboard", None)) - self.posterboardPageBtn.setProperty(u"cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.advancedPageBtn.setText(QCoreApplication.translate("Nugget", u" Risky Options", None)) self.advancedPageBtn.setProperty(u"cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.applyPageBtn.setText(QCoreApplication.translate("Nugget", u" Apply", None)) diff --git a/qt/ui_mainwindow.py b/qt/ui_mainwindow.py index 9fd3e00..a2c7988 100644 --- a/qt/ui_mainwindow.py +++ b/qt/ui_mainwindow.py @@ -317,13 +317,27 @@ class Ui_Nugget(object): self.verticalLayout.addWidget(self.sidebarDiv1) + self.posterboardPageBtn = QToolButton(self.sidebar) + self.posterboardPageBtn.setObjectName(u"posterboardPageBtn") + self.posterboardPageBtn.setEnabled(True) + sizePolicy2.setHeightForWidth(self.posterboardPageBtn.sizePolicy().hasHeightForWidth()) + self.posterboardPageBtn.setSizePolicy(sizePolicy2) + icon3 = QIcon() + icon3.addFile(u":/icon/wallpaper.svg", QSize(), QIcon.Normal, QIcon.Off) + self.posterboardPageBtn.setIcon(icon3) + self.posterboardPageBtn.setCheckable(True) + self.posterboardPageBtn.setAutoExclusive(True) + self.posterboardPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) + + self.verticalLayout.addWidget(self.posterboardPageBtn) + self.gestaltPageBtn = QToolButton(self.sidebar) self.gestaltPageBtn.setObjectName(u"gestaltPageBtn") sizePolicy2.setHeightForWidth(self.gestaltPageBtn.sizePolicy().hasHeightForWidth()) self.gestaltPageBtn.setSizePolicy(sizePolicy2) - icon3 = QIcon() - icon3.addFile(u":/icon/iphone-island.svg", QSize(), QIcon.Normal, QIcon.Off) - self.gestaltPageBtn.setIcon(icon3) + icon4 = QIcon() + icon4.addFile(u":/icon/iphone-island.svg", QSize(), QIcon.Normal, QIcon.Off) + self.gestaltPageBtn.setIcon(icon4) self.gestaltPageBtn.setIconSize(QSize(24, 28)) self.gestaltPageBtn.setCheckable(True) self.gestaltPageBtn.setAutoExclusive(True) @@ -339,9 +353,9 @@ class Ui_Nugget(object): font = QFont() font.setFamilies([u".AppleSystemUIFont"]) self.featureFlagsPageBtn.setFont(font) - icon4 = QIcon() - icon4.addFile(u":/icon/flag.svg", QSize(), QIcon.Normal, QIcon.Off) - self.featureFlagsPageBtn.setIcon(icon4) + icon5 = QIcon() + icon5.addFile(u":/icon/flag.svg", QSize(), QIcon.Normal, QIcon.Off) + self.featureFlagsPageBtn.setIcon(icon5) self.featureFlagsPageBtn.setCheckable(True) self.featureFlagsPageBtn.setAutoExclusive(True) self.featureFlagsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) @@ -352,9 +366,9 @@ class Ui_Nugget(object): self.euEnablerPageBtn.setObjectName(u"euEnablerPageBtn") sizePolicy2.setHeightForWidth(self.euEnablerPageBtn.sizePolicy().hasHeightForWidth()) self.euEnablerPageBtn.setSizePolicy(sizePolicy2) - icon5 = QIcon() - icon5.addFile(u":/icon/geo-alt.svg", QSize(), QIcon.Normal, QIcon.Off) - self.euEnablerPageBtn.setIcon(icon5) + icon6 = QIcon() + icon6.addFile(u":/icon/geo-alt.svg", QSize(), QIcon.Normal, QIcon.Off) + self.euEnablerPageBtn.setIcon(icon6) self.euEnablerPageBtn.setCheckable(True) self.euEnablerPageBtn.setAutoExclusive(True) self.euEnablerPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) @@ -365,9 +379,9 @@ class Ui_Nugget(object): self.springboardOptionsPageBtn.setObjectName(u"springboardOptionsPageBtn") sizePolicy2.setHeightForWidth(self.springboardOptionsPageBtn.sizePolicy().hasHeightForWidth()) self.springboardOptionsPageBtn.setSizePolicy(sizePolicy2) - icon6 = QIcon() - icon6.addFile(u":/icon/app-indicator.svg", QSize(), QIcon.Normal, QIcon.Off) - self.springboardOptionsPageBtn.setIcon(icon6) + icon7 = QIcon() + icon7.addFile(u":/icon/app-indicator.svg", QSize(), QIcon.Normal, QIcon.Off) + self.springboardOptionsPageBtn.setIcon(icon7) self.springboardOptionsPageBtn.setCheckable(True) self.springboardOptionsPageBtn.setAutoExclusive(True) self.springboardOptionsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) @@ -378,9 +392,9 @@ class Ui_Nugget(object): self.internalOptionsPageBtn.setObjectName(u"internalOptionsPageBtn") sizePolicy2.setHeightForWidth(self.internalOptionsPageBtn.sizePolicy().hasHeightForWidth()) self.internalOptionsPageBtn.setSizePolicy(sizePolicy2) - icon7 = QIcon() - icon7.addFile(u":/icon/hdd.svg", QSize(), QIcon.Normal, QIcon.Off) - self.internalOptionsPageBtn.setIcon(icon7) + icon8 = QIcon() + icon8.addFile(u":/icon/hdd.svg", QSize(), QIcon.Normal, QIcon.Off) + self.internalOptionsPageBtn.setIcon(icon8) self.internalOptionsPageBtn.setCheckable(True) self.internalOptionsPageBtn.setAutoExclusive(True) self.internalOptionsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) @@ -392,29 +406,15 @@ class Ui_Nugget(object): self.daemonsPageBtn.setEnabled(True) sizePolicy2.setHeightForWidth(self.daemonsPageBtn.sizePolicy().hasHeightForWidth()) self.daemonsPageBtn.setSizePolicy(sizePolicy2) - icon8 = QIcon() - icon8.addFile(u":/icon/toggles.svg", QSize(), QIcon.Normal, QIcon.Off) - self.daemonsPageBtn.setIcon(icon8) + icon9 = QIcon() + icon9.addFile(u":/icon/toggles.svg", QSize(), QIcon.Normal, QIcon.Off) + self.daemonsPageBtn.setIcon(icon9) self.daemonsPageBtn.setCheckable(True) self.daemonsPageBtn.setAutoExclusive(True) self.daemonsPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) self.verticalLayout.addWidget(self.daemonsPageBtn) - self.posterboardPageBtn = QToolButton(self.sidebar) - self.posterboardPageBtn.setObjectName(u"posterboardPageBtn") - self.posterboardPageBtn.setEnabled(True) - sizePolicy2.setHeightForWidth(self.posterboardPageBtn.sizePolicy().hasHeightForWidth()) - self.posterboardPageBtn.setSizePolicy(sizePolicy2) - icon9 = QIcon() - icon9.addFile(u":/icon/wallpaper.svg", QSize(), QIcon.Normal, QIcon.Off) - self.posterboardPageBtn.setIcon(icon9) - self.posterboardPageBtn.setCheckable(True) - self.posterboardPageBtn.setAutoExclusive(True) - self.posterboardPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon) - - self.verticalLayout.addWidget(self.posterboardPageBtn) - self.advancedPageBtn = QToolButton(self.sidebar) self.advancedPageBtn.setObjectName(u"advancedPageBtn") sizePolicy2.setHeightForWidth(self.advancedPageBtn.sizePolicy().hasHeightForWidth()) @@ -930,7 +930,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_8.setIcon(icon3) + self.toolButton_8.setIcon(icon4) self.toolButton_8.setIconSize(QSize(30, 30)) self.horizontalLayout_5.addWidget(self.toolButton_8) @@ -1273,7 +1273,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_10.setIcon(icon4) + self.toolButton_10.setIcon(icon5) self.horizontalLayout_20.addWidget(self.toolButton_10) @@ -1379,7 +1379,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_11.setIcon(icon5) + self.toolButton_11.setIcon(icon6) self.horizontalLayout_21.addWidget(self.toolButton_11) @@ -1684,7 +1684,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_7.setIcon(icon6) + self.toolButton_7.setIcon(icon7) self.horizontalLayout_13.addWidget(self.toolButton_7) @@ -1810,7 +1810,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_101.setIcon(icon7) + self.toolButton_101.setIcon(icon8) self.horizontalLayout_201.addWidget(self.toolButton_101) @@ -1991,7 +1991,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_102.setIcon(icon8) + self.toolButton_102.setIcon(icon9) self.horizontalLayout_202.addWidget(self.toolButton_102) @@ -2182,7 +2182,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_103.setIcon(icon9) + self.toolButton_103.setIcon(icon3) self.horizontalLayout_203.addWidget(self.toolButton_103) @@ -2889,7 +2889,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.toolButton_13.setIcon(icon5) + self.toolButton_13.setIcon(icon6) self.horizontalLayout_28.addWidget(self.toolButton_13) @@ -3222,7 +3222,7 @@ class Ui_Nugget(object): " padding-right: 5px;\n" " border-radius: 0px;\n" "}") - self.themesBtn.setIcon(icon3) + self.themesBtn.setIcon(icon4) self.themesBtn.setIconSize(QSize(30, 30)) self.horizontalLayout_23.addWidget(self.themesBtn) @@ -3388,6 +3388,8 @@ class Ui_Nugget(object): self.titleBar.setText(QCoreApplication.translate("Nugget", u"Nugget", None)) self.homePageBtn.setText(QCoreApplication.translate("Nugget", u" Home", None)) self.homePageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) + self.posterboardPageBtn.setText(QCoreApplication.translate("Nugget", u" Posterboard", None)) + self.posterboardPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.gestaltPageBtn.setText(QCoreApplication.translate("Nugget", u" Mobile Gestalt", None)) self.gestaltPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.featureFlagsPageBtn.setText(QCoreApplication.translate("Nugget", u" Feature Flags", None)) @@ -3400,8 +3402,6 @@ class Ui_Nugget(object): self.internalOptionsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.daemonsPageBtn.setText(QCoreApplication.translate("Nugget", u" Daemons", None)) self.daemonsPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) - self.posterboardPageBtn.setText(QCoreApplication.translate("Nugget", u" Posterboard", None)) - self.posterboardPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.advancedPageBtn.setText(QCoreApplication.translate("Nugget", u" Risky Options", None)) self.advancedPageBtn.setProperty("cls", QCoreApplication.translate("Nugget", u"sidebarBtn", None)) self.applyPageBtn.setText(QCoreApplication.translate("Nugget", u" Apply", None)) From ee3d1396ec25670e9620d943ae499f245e78863a Mon Sep 17 00:00:00 2001 From: leminlimez <59540996+leminlimez@users.noreply.github.com> Date: Mon, 31 Mar 2025 12:31:22 -0400 Subject: [PATCH 4/4] fix windows FileNotFound error fr this time :trollface: --- controllers/path_handler.py | 12 ++++++++++++ devicemanagement/device_manager.py | 8 +++++--- gui/main_window.py | 2 +- requirements.txt | 3 +-- tweaks/posterboard_tweak.py | 15 +++------------ 5 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 controllers/path_handler.py diff --git a/controllers/path_handler.py b/controllers/path_handler.py new file mode 100644 index 0000000..4b50837 --- /dev/null +++ b/controllers/path_handler.py @@ -0,0 +1,12 @@ +import os + +def fix_windows_path(dos_path: str, encoding=None): + if os.name == 'nt': + if (not isinstance(dos_path, str) and encoding is not None): + dos_path = dos_path.decode(encoding) + path = os.path.abspath(dos_path) + if path.startswith(u"\\\\"): + return u"\\\\?\\UNC\\" + path[2:] + return u"\\\\?\\" + path + else: + return dos_path \ No newline at end of file diff --git a/devicemanagement/device_manager.py b/devicemanagement/device_manager.py index 4ead1b9..60bbae2 100644 --- a/devicemanagement/device_manager.py +++ b/devicemanagement/device_manager.py @@ -12,6 +12,8 @@ from pymobiledevice3.exceptions import MuxException, PasswordRequiredError from devicemanagement.constants import Device, Version from devicemanagement.data_singleton import DataSingleton +from controllers.path_handler import fix_windows_path + from tweaks.tweaks import tweaks, FeatureFlagTweak, EligibilityTweak, AITweak, BasicPlistTweak, AdvancedPlistTweak, RdarFixTweak, NullifyFileTweak from tweaks.custom_gestalt_tweaks import CustomGestaltTweaks from tweaks.posterboard_tweak import PosterboardTweak @@ -331,7 +333,7 @@ class DeviceManager: elif isinstance(tweak, PosterboardTweak): tmp_pb_dir = TemporaryDirectory() tweak.apply_tweak( - files_to_restore=files_to_restore, output_dir=tmp_pb_dir.name, + files_to_restore=files_to_restore, output_dir=fix_windows_path(tmp_pb_dir.name), version=self.get_current_device_version() ) if tweak.enabled: @@ -437,9 +439,9 @@ class DeviceManager: if tmp_pb_dir != None: try: tmp_pb_dir.cleanup() - except Exception as e: + except Exception as e2: # ignore clean up errors - print(str(e)) + print(str(e2)) show_apply_error(e, update_label) ## RESETTING MOBILE GESTALT diff --git a/gui/main_window.py b/gui/main_window.py index 48ad413..efa0eac 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.3" -App_Build = 1 +App_Build = 0 class Page(Enum): Home = 0 diff --git a/requirements.txt b/requirements.txt index ea89fba..8aef6d6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,3 @@ pymobiledevice3 PySide6-Essentials -PyInstaller -rarfile \ No newline at end of file +PyInstaller \ No newline at end of file diff --git a/tweaks/posterboard_tweak.py b/tweaks/posterboard_tweak.py index d33961b..928b0f5 100644 --- a/tweaks/posterboard_tweak.py +++ b/tweaks/posterboard_tweak.py @@ -1,6 +1,5 @@ import os import zipfile -import rarfile import uuid import re from random import randint @@ -9,6 +8,7 @@ from PySide6 import QtWidgets, QtCore, QtGui from .tweak_classes import Tweak from Sparserestore.restore import FileToRestore from controllers.plist_handler import set_plist_value +from controllers.path_handler import fix_windows_path from qt.ui_mainwindow import Ui_Nugget class TendieFile: @@ -183,16 +183,7 @@ class PosterboardTweak(Tweak): for tendie in self.tendies: zip_output = os.path.join(output_dir, str(uuid.uuid4())) os.makedirs(zip_output) - if os == 'nt': - rar_archive = rarfile.RarFile(tendie.path) - try: - # Extract the contents to the target directory - rar_archive.extractall(path=zip_output) - finally: - # Close the RAR file to release resources - rar_archive.close() - else: - with zipfile.ZipFile(tendie.path, 'r') as zip_ref: - zip_ref.extractall(zip_output) + with zipfile.ZipFile(tendie.path, 'r') as zip_ref: + zip_ref.extractall(zip_output) # add the files self.recursive_add(files_to_restore, curr_path=output_dir)