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)