Merge pull request #445 from leminlimez/pb-video

Pb video
This commit is contained in:
leminlimez
2025-04-03 12:11:44 -04:00
committed by GitHub
35 changed files with 1939 additions and 499 deletions

View File

@@ -1,7 +1,9 @@
![Artboard](https://github.com/leminlimez/Nugget/blob/d383d2af50ed12382b2e19d0d95dd815f1b15d4f/credits/big_nugget.png)
# Nugget
Unlock your device's full potential!
Sparserestore works on all versions iOS 17.0-18.2 developer beta 2. There is partial support for iOS 18.2 developer beta 3 and newer.
Sparserestore works on all versions iOS 17.0-18.1.1. There is partial support for iOS 18.2 developer beta 3 and newer not using any exploits.
**Mobilegestalt and AI Enabler tweaks are not supported on iOS 18.2+.** It will never be supported, do not make issues asking for when it is supported.
@@ -9,25 +11,12 @@ Make sure you have installed the [requirements](#requirements) if you are on Win
This uses the sparserestore exploit to write to files outside of the intended restore location, like mobilegestalt. Read the [Getting the File](#getting-the-file) section to learn how to get your mobilegestalt file.
Note: I am not responsible if your device bootloops. Please back up your data before using!
**Note:** I am not responsible if your device bootloops. Please back up your data before using!
## Features
### iOS 17.0+
- Enable Dynamic Island on any device
- Enable iPhone X gestures on iPhone SEs
- Change Device Model Name (ie what shows in the Settings app)
- Enable Boot Chime
- Enable Charge Limit
- Enable Tap to Wake on unsupported devices (ie iPhone SEs)
- Enable Collision SOS
- Enable Stage Manager
- Disable the Wallpaper Parallax
- Disable Region Restrictions (ie. Shutter Sound)
- Note: This does not include enabling EU sideloading outside the EU. That will come later.
- Show the Apple Pencil options in Settings app
- Show the Action Button options in Settings app
- Show Internal Storage info (Might cause problems on some devices, use at your own risk)
- EU Enabler (iOS 17.6-)
<details>
<summary>iOS 17.0+</summary>
- Springboard Options (from [Cowabunga Lite](https://github.com/leminlimez/CowabungaLite))
- Set Lock Screen Footnote
- Disable Lock After Respring
@@ -67,14 +56,44 @@ Note: I am not responsible if your device bootloops. Please back up your data be
- Disable thermalmonitord
- OTA Killer
- Custom Resolution
### iOS 18.0+
- Enable iPhone 16 camera button page in the Settings app
- Enable AOD & AOD Vibrancy on any device
</details>
<details>
<summary>iOS 17.0 - 18.1.1</summary>
- Enable Dynamic Island on any device
- Enable iPhone X gestures on iPhone SEs
- Change Device Model Name (ie what shows in the Settings app)
- Enable Boot Chime
- Enable Charge Limit
- Enable Tap to Wake on unsupported devices (ie iPhone SEs)
- Enable Collision SOS
- Enable Stage Manager
- Disable the Wallpaper Parallax
- Disable Region Restrictions (ie. Shutter Sound)
- Note: This does not include enabling EU sideloading outside the EU. That will come later.
- Show the Apple Pencil options in Settings app
- Show the Action Button options in Settings app
- Show Internal Storage info (Might cause problems on some devices, use at your own risk)
- EU Enabler (iOS 17.6-)
</details>
<details>
<summary>iOS 18.0 - iOS 18.0.1</summary>
- Feature Flags (iOS 18.1b4-):
- Enabling lock screen clock animation, lock screen page duplication button, and more!
- Disabling the new iOS 18 Photos UI (iOS 18.0 betas only, unknown which patched it)
### iOS 18.1+
- AI Enabler + Device Spoofing (fixed in iOS 18.2db3)
</details>
<details>
<summary>iOS 18.0 - iOS 18.1.1</summary>
- Enable iPhone 16 camera button page in the Settings app
- Enable AOD & AOD Vibrancy on any device
</details>
<details>
<summary>iOS 18.1 - 18.1.1</summary>
- AI Enabler + Device Spoofing
</details>
## Requirements:
- **Windows:**
@@ -101,7 +120,7 @@ Note: It may be either `python`/`pip` or `python3`/`pip3` depending on your path
The CLI version can be ran with `python3 cli_app.py`.
## Getting the File
You need to get the mobilegestalt file that is specific to your device. To do that, follow these steps:
On iOS 18.1.1 and below, you may need to get the mobilegestalt file that is specific to your device. To do that, follow these steps:
1. Install the `Shortcuts` app from the iOS app store.
2. Download this shortcut: https://www.icloud.com/shortcuts/d6f0a136ddda4714a80750512911c53b
3. Save the file and share it to your computer.
@@ -118,11 +137,13 @@ The application itself can be compiled by running `compile.py`.
## Read More
If you would like to read more about the inner workings of the exploit and iOS restore system, I made a write up which you can read [here](https://gist.github.com/leminlimez/c602c067349140fe979410ef69d39c28).
For clarity, up to iOS 18.2 developer beta 2 (public beta 1) is fully supported by Nugget. I said iOS 18.1.1 because mentioning the betas confused people.
## Credits
- [JJTech](https://github.com/JJTech0130) for Sparserestore/[TrollRestore](https://github.com/JJTech0130/TrollRestore)
- [PosterRestore](https://discord.gg/gWtzTVhMvh) for their help with PosterBoard
- Special thanks to dootskyre, [Middo](https://twitter.com/MWRevamped), [dulark](https://github.com/dularkian), forcequitOS, and pingubow for their work on this. It would not have been possible without them!
- Also thanks to [Snoolie for aar handling](https://github.com/0xilis/python-aar-stuff)
- [disfordottie](https://x.com/disfordottie) for some global flag features
- [Mikasa-san](https://github.com/Mikasa-san) for [Quiet Daemon](https://github.com/Mikasa-san/QuietDaemon)
- [sneakyf1shy](https://github.com/f1shy-dev) for [AI Eligibility](https://gist.github.com/f1shy-dev/23b4a78dc283edd30ae2b2e6429129b5) (iOS 18.1 beta 4 and below)

0
controllers/__init__.py Normal file
View File

21
controllers/aar/LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2025 0xilis
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

62
controllers/aar/aar.py Normal file
View File

@@ -0,0 +1,62 @@
'''
Created by Snoolie K (0xilis) on 2025 March 18.
Licensed under MIT. Please credit if using.
'''
import struct
# make a .aar of one contexts.plist file
def wrap_in_aar(input_file, input_mov, output_file):
# Since I only need to care about a contents.plist (and in the future the mov file), I am hardcoding the header...
header = bytearray.fromhex("4141303125005459503146504154500E00636F6E74656E74732E706C697374444154418E13")
with open(input_file, 'rb') as f:
file_data = f.read()
file_size = len(file_data)
if file_size <= 0xFFFF:
# Our size can fit in a 2 byte AA_FIELD_TYPE_BLOB, yay
header[-2:] = struct.pack('<H', file_size)
else:
'''
Our contents.plist is over 64KB. This means it won't fit in a uint16_t.
Instead, we update the A subtype for our DAT (2 byte AA_FIELD_TYPE_BLOB)
To be a B subtype (4 byte AA_FIELD_TYPE_BLOB). This also means we will
need to change the header size to 0x27 since we are adding 2 bytes by doing this.
'''
header[-3] = 0x42
header[-2:] = struct.pack('<I', file_size)
header[4] = 0x27
# Hardcoded settlingEffect.mov header
header2 = bytearray.fromhex("4141303129005459503146504154501200736574746C696E674566666563742E6D6F7644415441F4B8")
if isinstance(input_mov, bytes):
file_data2 = input_mov
else:
with open(input_mov, 'rb') as f:
file_data2 = f.read()
file_size2 = len(file_data2)
if file_size2 <= 0xFFFF:
# Our size can fit in a 2 byte AA_FIELD_TYPE_BLOB, yay
header2[-2:] = struct.pack('<H', file_size2)
else:
'''
Our settlingEffect.mov is over 64KB. This means it won't fit in a uint16_t.
Instead, we update the A subtype for our DAT (2 byte AA_FIELD_TYPE_BLOB)
To be a B subtype (4 byte AA_FIELD_TYPE_BLOB). This also means we will
need to change the header size to 0x27 since we are adding 2 bytes by doing this.
'''
header2[-3] = 0x42
header2[-2:] = struct.pack('<I', file_size2)
header2[4] = 0x2B
# Write the header and file data to the output file
with open(output_file, 'wb') as f:
f.write(header)
f.write(file_data)
f.write(header2)
f.write(file_data2)

View File

@@ -0,0 +1,8 @@
import sys
from os import path, getcwd
def get_bundle_files(name: str):
try:
return path.join(sys._MEIPASS, name)
except:
return path.join(getcwd(), name)

View File

@@ -0,0 +1,208 @@
import cv2
import os
import ffmpeg
from tempfile import mkdtemp, NamedTemporaryFile
from shutil import rmtree
def convert_to_mov(input_file: str, output_file: str = None):
# if there is no output file specified, create a temp file then return contents
if output_file == None:
tmpdir = mkdtemp()
tmp = os.path.join(tmpdir, "vid.mov")
convert_to_mov(input_file, tmp)
with open(tmp, "rb") as tmpfile:
contents = tmpfile.read()
rmtree(tmpdir)
return contents
inp = ffmpeg.input(input_file)
out = ffmpeg.output(inp, output_file, f='mov', vcodec='copy', acodec='copy')
ffmpeg.run(out)
def get_thumbnail_from_mov(input_file: str, output_file: str = None):
# if there is no output file specified, create a temp file and then return contents
if output_file == None:
tmpdir = mkdtemp()
tmp = os.path.join(tmpdir, "thumb.png")
get_thumbnail_from_mov(input_file, tmp)
with open(tmp, "rb") as tmpfile:
contents = tmpfile.read()
rmtree(tmpdir)
return contents
inp = ffmpeg.input(input_file, ss=0)
out = ffmpeg.output(inp, output_file, vframes=1)
ffmpeg.run(out)
def get_thumbnail_from_contents(contents: bytes, output_file: str = None):
with NamedTemporaryFile("rb+", suffix=".mov") as inp_file:
inp_file.write(contents)
contents = get_thumbnail_from_mov(inp_file.name, output_file)
return contents
def create_caml(video_path: str, output_file: str, auto_reverses: bool, update_label=lambda x: None):
cam = cv2.VideoCapture(video_path)
assets_path = os.path.join(output_file, "assets")
frame_count = int(cam.get(cv2.CAP_PROP_FRAME_COUNT))
FRAME_LIMIT = 300
reverse = 0
if auto_reverses:
reverse = 1
if frame_count > FRAME_LIMIT:
raise Exception(f"Videos must be under {FRAME_LIMIT} fps to loop. Either reduce the frame rate or make it shorter.")
try:
# creating a folder named data
if not os.path.exists(assets_path):
os.makedirs(assets_path, exist_ok=True)
# if not created then raise error
except OSError:
print ('Error: Creating directory of data')
# frame
currentframe = 0
width = int(cam.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cam.get(cv2.CAP_PROP_FRAME_HEIGHT))
with open(os.path.join(output_file, "main.caml"), "w") as caml:
# write caml header
fps = cam.get(cv2.CAP_PROP_FPS)
duration = frame_count / fps
caml.write(f"""<?xml version="1.0" encoding="UTF-8"?>
<caml xmlns="http://www.apple.com/CoreAnimation/1.0">
<CALayer allowsEdgeAntialiasing="1" allowsGroupOpacity="1" bounds="0 0 {width} {height}" contentsFormat="RGBA8" cornerCurve="circular" hidden="0" name="_FLOATING" position="{int(width/2)} {int(height/2)}">
<sublayers>
<CATransformLayer allowsEdgeAntialiasing="1" allowsGroupOpacity="1" allowsHitTesting="1" bounds="0 0 {width} {height}" contentsFormat="RGBA8" cornerCurve="circular" name="Chip" position="{int(width/2)} {int(height/2)}">
<sublayers>
<CALayer allowsEdgeAntialiasing="1" allowsGroupOpacity="1" bounds="0 0 {width} {height}" contentsFormat="RGBA8" cornerCurve="circular" name="CALayer1" position="{int(width/2)} {int(height/2)}">
<contents type="CGImage" src="assets/0.jpg"/>
<animations>
<animation type="CAKeyframeAnimation" calculationMode="linear" keyPath="contents" beginTime="1e-100" duration="{duration}" removedOnCompletion="0" repeatCount="inf" repeatDuration="0" speed="1" timeOffset="0" autoreverses="{reverse}">
<values>\n""")
while(True):
# reading from frame
ret,frame = cam.read()
if ret:
# if video is still left continue creating images
name = 'assets/' + str(currentframe) + '.jpg'
if update_label:
update_label('Creating...' + name)
else:
print ('Creating...' + name)
# writing the extracted images
cv2.imwrite(os.path.join(output_file, name), frame)
caml.write(f"\t\t\t<CGImage src=\"{name}\"/>\n")
# increasing counter so that it will
# show how many frames are created
currentframe += 1
else:
break
caml.write(""" </values>
</animation>
</animations>
</CALayer>
</sublayers>
</CATransformLayer>
</sublayers>
<states>
<LKState name="Locked">
<elements/>
</LKState>
<LKState name="Unlock">
<elements/>
</LKState>
<LKState name="Sleep">
<elements/>
</LKState>
</states>
<stateTransitions>
<LKStateTransition fromState="*" toState="Unlock">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Unlock" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Locked">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Locked" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Sleep" toState="*">
<elements/>
</LKStateTransition>
</stateTransitions>
</CALayer>
</caml>
""")
# Release all space and windows once done
cam.release()
cv2.destroyAllWindows()
# Write the other caml
with open(os.path.join(output_file, "index.xml"), "w") as index:
index.write(f"""<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>assetManifest</key>
<string>assetManifest.caml</string>
<key>documentHeight</key>
<real>{height}</real>
<key>documentResizesToView</key>
<true/>
<key>documentWidth</key>
<real>{width}</real>
<key>dynamicGuidesEnabled</key>
<true/>
<key>geometryFlipped</key>
<false/>
<key>guidesEnabled</key>
<true/>
<key>interactiveMouseEventsEnabled</key>
<true/>
<key>interactiveShowsCursor</key>
<true/>
<key>interactiveTouchEventsEnabled</key>
<false/>
<key>loopEnd</key>
<real>0.0</real>
<key>loopStart</key>
<real>0.0</real>
<key>loopingEnabled</key>
<false/>
<key>multitouchDisablesMouse</key>
<false/>
<key>multitouchEnabled</key>
<false/>
<key>presentationMouseEventsEnabled</key>
<true/>
<key>presentationShowsCursor</key>
<true/>
<key>presentationTouchEventsEnabled</key>
<false/>
<key>rootDocument</key>
<string>main.caml</string>
<key>savesWindowFrame</key>
<false/>
<key>scalesToFitInPlayer</key>
<true/>
<key>showsTouches</key>
<true/>
<key>snappingEnabled</key>
<true/>
<key>timelineMarkers</key>
<string>[(null)]</string>
<key>touchesColor</key>
<string>1 1 0 0.8</string>
<key>unitsInPixelsInPlayer</key>
<true/>
</dict>
</plist>
""")

View File

@@ -3,7 +3,7 @@ import plistlib
from tempfile import TemporaryDirectory
from PySide6.QtWidgets import QMessageBox
from PySide6.QtCore import QSettings
from PySide6.QtCore import QSettings, QThread
from pymobiledevice3 import usbmux
from pymobiledevice3.lockdown import create_using_usbmux
@@ -12,6 +12,7 @@ from pymobiledevice3.exceptions import MuxException, PasswordRequiredError
from devicemanagement.constants import Device, Version
from devicemanagement.data_singleton import DataSingleton
from gui.apply_worker import ApplyAlertMessage
from controllers.path_handler import fix_windows_path
from tweaks.tweaks import tweaks, FeatureFlagTweak, EligibilityTweak, AITweak, BasicPlistTweak, AdvancedPlistTweak, RdarFixTweak, NullifyFileTweak
@@ -20,31 +21,31 @@ from tweaks.posterboard_tweak import PosterboardTweak
from tweaks.basic_plist_locations import FileLocationsList, RiskyFileLocationsList
from Sparserestore.restore import restore_files, FileToRestore
def show_error_msg(txt: str, detailed_txt: str = None):
def show_error_msg(txt: str, title: str = "Error!", icon = QMessageBox.Critical, detailed_txt: str = None):
detailsBox = QMessageBox()
detailsBox.setIcon(QMessageBox.Critical)
detailsBox.setWindowTitle("Error!")
detailsBox.setIcon(icon)
detailsBox.setWindowTitle(title)
detailsBox.setText(txt)
if detailed_txt != None:
detailsBox.setDetailedText(detailed_txt)
detailsBox.exec()
def show_apply_error(e: Exception, update_label=lambda x: None):
if "Find My" in str(e):
show_error_msg("Find My must be disabled in order to use this tool.",
detailed_txt="Disable Find My from Settings (Settings -> [Your Name] -> Find My) and then try again.")
elif "Encrypted Backup MDM" in str(e):
show_error_msg("Nugget cannot be used on this device. Click Show Details for more info.",
detailed_txt="Your device is managed and MDM backup encryption is on. This must be turned off in order for Nugget to work. Please do not use Nugget on your school/work device!")
elif "SessionInactive" in str(e):
show_error_msg("The session was terminated. Refresh the device list and try again.")
elif "PasswordRequiredError" in str(e):
show_error_msg("Device is password protected! You must trust the computer on your device.",
detailed_txt="Unlock your device. On the popup, click \"Trust\", enter your password, then try again.")
else:
show_error_msg(type(e).__name__ + ": " + repr(e), detailed_txt=str(traceback.format_exc()))
print(traceback.format_exc())
update_label("Failed to restore")
if "Find My" in str(e):
return ApplyAlertMessage("Find My must be disabled in order to use this tool.",
detailed_txt="Disable Find My from Settings (Settings -> [Your Name] -> Find My) and then try again.")
elif "Encrypted Backup MDM" in str(e):
return ApplyAlertMessage("Nugget cannot be used on this device. Click Show Details for more info.",
detailed_txt="Your device is managed and MDM backup encryption is on. This must be turned off in order for Nugget to work. Please do not use Nugget on your school/work device!")
elif "SessionInactive" in str(e):
return ApplyAlertMessage("The session was terminated. Refresh the device list and try again.")
elif "PasswordRequiredError" in str(e):
return ApplyAlertMessage("Device is password protected! You must trust the computer on your device.",
detailed_txt="Unlock your device. On the popup, click \"Trust\", enter your password, then try again.")
else:
return ApplyAlertMessage(type(e).__name__ + ": " + repr(e), detailed_txt=str(traceback.format_exc()))
class DeviceManager:
## Class Functions
@@ -58,7 +59,6 @@ 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
@@ -244,9 +244,9 @@ class DeviceManager:
domain="ManagedPreferencesDomain"
))
def get_domain_for_path(self, path: str, owner: int = 501) -> str:
def get_domain_for_path(self, path: str, owner: int = 501, uses_domains: bool = False) -> str:
# returns Domain: str?, Path: str
if self.get_current_device_supported() and not path.startswith("/var/mobile/") and not owner == 0:
if self.get_current_device_supported() and not path.startswith("/var/mobile/") and not owner == 0 and not uses_domains:
# don't do anything on sparserestore versions
return path, ""
fully_patched = self.get_current_device_patched()
@@ -278,9 +278,9 @@ class DeviceManager:
return new_path, new_domain
return path, ""
def concat_file(self, contents: str, path: str, files_to_restore: list[FileToRestore], owner: int = 501, group: int = 501):
def concat_file(self, contents: str, path: str, files_to_restore: list[FileToRestore], owner: int = 501, group: int = 501, uses_domains: bool = False):
# TODO: try using inodes here instead
file_path, domain = self.get_domain_for_path(path, owner=owner)
file_path, domain = self.get_domain_for_path(path, owner=owner, uses_domains=uses_domains)
files_to_restore.append(FileToRestore(
contents=contents,
restore_path=file_path,
@@ -289,7 +289,7 @@ class DeviceManager:
))
## APPLYING OR REMOVING TWEAKS AND RESTORING
def apply_changes(self, resetting: bool = False, update_label=lambda x: None):
def apply_changes(self, resetting: bool = False, update_label=lambda x: None, show_alert=lambda x: None):
try:
# set the tweaks and apply
# first open the file in read mode
@@ -333,8 +333,8 @@ class DeviceManager:
elif isinstance(tweak, PosterboardTweak):
tmp_pb_dir = TemporaryDirectory()
tweak.apply_tweak(
files_to_restore=files_to_restore, output_dir=fix_windows_path(tmp_pb_dir.name),
version=self.get_current_device_version()
files_to_restore=files_to_restore, output_dir=tmp_pb_dir.name,
version=self.get_current_device_version(), update_label=update_label
)
if tweak.enabled:
uses_domains = True
@@ -343,7 +343,7 @@ class DeviceManager:
gestalt_plist = tweak.apply_tweak(gestalt_plist)
elif tweak.enabled:
# no mobilegestalt file provided but applying mga tweaks, give warning
show_error_msg("No mobilegestalt file provided! Please select your file to apply mobilegestalt tweaks.")
show_alert(show_error_msg("No mobilegestalt file provided! Please select your file to apply mobilegestalt tweaks.", exec=False))
update_label("Failed.")
return
# set the custom gestalt keys
@@ -368,7 +368,7 @@ class DeviceManager:
self.concat_file(
contents=gestalt_data,
path="/var/containers/Shared/SystemGroup/systemgroup.com.apple.mobilegestaltcache/Library/Caches/com.apple.MobileGestalt.plist",
files_to_restore=files_to_restore
files_to_restore=files_to_restore, uses_domains=uses_domains
)
if eligibility_files:
new_eligibility_files: dict[FileToRestore] = []
@@ -422,7 +422,7 @@ class DeviceManager:
)
# restore to the device
update_label("Restoring to device...")
update_label("Restoring to device...\nDo NOT Unplug")
restore_files(files=files_to_restore, reboot=self.auto_reboot, lockdown_client=self.data_singleton.current_device.ld)
if tmp_pb_dir != None:
try:
@@ -430,10 +430,10 @@ class DeviceManager:
except Exception as e:
# ignore clean up errors
print(str(e))
msg = "Your device will now restart."
msg = "Your device will now restart.\n\nRemember to turn Find My back on!"
if not self.auto_reboot:
msg = "Please restart your device to see changes."
QMessageBox.information(None, "Success!", "All done! " + msg)
show_alert(ApplyAlertMessage(txt="All done! " + msg, title="Success!", icon=QMessageBox.Information))
update_label("Success!")
except Exception as e:
if tmp_pb_dir != None:
@@ -442,7 +442,7 @@ class DeviceManager:
except Exception as e2:
# ignore clean up errors
print(str(e2))
show_apply_error(e, update_label)
show_alert(show_apply_error(e, update_label))
## RESETTING MOBILE GESTALT
def reset_mobilegestalt(self, settings: QSettings, update_label=lambda x: None):
@@ -467,4 +467,4 @@ class DeviceManager:
QMessageBox.information(None, "Success!", "All done! " + msg)
update_label("Success!")
except Exception as e:
show_apply_error(e)
show_error_msg(str(e))

View File

@@ -0,0 +1 @@
88D1F444-E2B3-43C4-BB15-790C67EDEA56

View File

@@ -0,0 +1,68 @@
{
"version" : 10,
"layers" : [
{
"frame" : {
"Width" : 1042.4546142208774,
"Height" : 2868.5230711043873,
"Y" : -0.52307110438732707,
"X" : 174.92435703479578
},
"filename" : "portrait-layer_background.HEIC",
"zPosition" : 5,
"identifier" : "background"
},
{
"frame" : {
"Width" : 1182.5,
"Height" : 2569.25,
"Y" : 149.37503513892489,
"X" : 68.749995738267913
},
"filename" : "portrait-layer_settling-video.MOV",
"zPosition" : 5,
"identifier" : "settling-video"
}
],
"properties" : {
"portraitLayout" : {
"clockIntersection" : 2,
"deviceResolution" : {
"Width" : 750,
"Height" : 1334
},
"visibleFrame" : {
"Width" : 886.43178410794587,
"Height" : 2569.25,
"Y" : 149.37496486107506,
"X" : 252.31008241168968
},
"timeFrame" : {
"Width" : 763.51324337831068,
"Height" : 227.26499250374812,
"Y" : 2135.0546874997553,
"X" : 313.76935277650728
},
"clockLayerOrder" : "ClockAboveForeground",
"hasTopEdgeContact" : false,
"inactiveFrame" : {
"Width" : 913.02473763118462,
"Height" : 2646.3274999999999,
"Y" : 149.39630414678933,
"X" : 239.01360565007042
},
"imageSize" : {
"Width" : 1320,
"Height" : 2868
},
"parallaxPadding" : {
"Width" : 61.45927036481757,
"Height" : 151.28435782108946
}
},
"settlingEffectEnabled" : true,
"depthEnabled" : false,
"clockAreaLuminance" : 0.64877637987012982,
"parallaxDisabled" : false
}
}

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>colorSuggestions</key>
<array/>
<key>kind</key>
<string>Original</string>
<key>parameters</key>
<dict>
<key>clockColor</key>
<array>
<real>1</real>
<real>1</real>
<real>1</real>
</array>
<key>clockVibrancy</key>
<real>0.0</real>
<key>headroomLook</key>
<integer>2</integer>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1 @@
PRPosterRoleLockScreen

Binary file not shown.

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>assetManifest</key>
<string>assetManifest.caml</string>
<key>documentHeight</key>
<real>3176</real>
<key>documentResizesToView</key>
<false/>
<key>documentWidth</key>
<real>3176</real>
<key>dynamicGuidesEnabled</key>
<true/>
<key>geometryFlipped</key>
<false/>
<key>guidesEnabled</key>
<true/>
<key>interactiveMouseEventsEnabled</key>
<true/>
<key>interactiveShowsCursor</key>
<true/>
<key>interactiveTouchEventsEnabled</key>
<false/>
<key>loopEnd</key>
<real>0.0</real>
<key>loopStart</key>
<real>0.0</real>
<key>loopingEnabled</key>
<false/>
<key>multitouchDisablesMouse</key>
<false/>
<key>multitouchEnabled</key>
<false/>
<key>presentationMouseEventsEnabled</key>
<true/>
<key>presentationShowsCursor</key>
<true/>
<key>presentationTouchEventsEnabled</key>
<false/>
<key>rootDocument</key>
<string>main.caml</string>
<key>savesWindowFrame</key>
<false/>
<key>scalesToFitInPlayer</key>
<false/>
<key>showsTouches</key>
<true/>
<key>snappingEnabled</key>
<true/>
<key>timelineMarkers</key>
<string>[(null)]</string>
<key>touchesColor</key>
<string>1 1 0 0.8</string>
<key>unitsInPixelsInPlayer</key>
<true/>
</dict>
</plist>

View File

@@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<caml xmlns="http://www.apple.com/CoreAnimation/1.0">
<CALayer allowsEdgeAntialiasing="1" allowsGroupOpacity="1" bounds="0 0 3176 3176" contentsFormat="RGBA8" cornerCurve="circular" hidden="0" name="_BACKGROUND" position="1588 1588">
<sublayers>
<CALayer allowsEdgeAntialiasing="1" allowsGroupOpacity="1" anchorPoint="0 0" bounds="0 0 0 0" contentsFormat="RGBA8" cornerCurve="circular" name="_CENTER_BACKGROUND" position="1588 1588"/>
</sublayers>
<states>
<LKState name="Locked">
<elements/>
</LKState>
<LKState name="Unlock">
<elements/>
</LKState>
<LKState name="Sleep">
<elements/>
</LKState>
</states>
<stateTransitions>
<LKStateTransition fromState="*" toState="Unlock">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Unlock" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Locked">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Locked" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Sleep" toState="*">
<elements/>
</LKStateTransition>
</stateTransitions>
</CALayer>
</caml>

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>appearanceAware</key>
<true/>
<key>assets</key>
<dict>
<key>lockAndHome</key>
<dict>
<key>default</key>
<dict>
<key>backgroundAnimationFileName</key>
<string>9183.Custom_Background-810w-1080h@2x~ipad.ca</string>
<key>floatingAnimationFileNameKey</key>
<string>9183.Custom_Floating-810w-1080h@2x~ipad.ca</string>
<key>identifier</key>
<integer>9183</integer>
<key>name</key>
<string>Chip</string>
<key>type</key>
<string>LayeredAnimation</string>
</dict>
</dict>
</dict>
<key>contentVersion</key>
<real>2.01</real>
<key>family</key>
<string>Chip</string>
<key>identifier</key>
<integer>9183</integer>
<key>logicalScreenClass</key>
<string>810w-1080h@2x~ipad</string>
<key>name</key>
<string>Chip</string>
<key>preferredProminentColor</key>
<dict>
<key>dark</key>
<string>#00000</string>
<key>default</key>
<string>#FFFFFF</string>
</dict>
<key>version</key>
<integer>1</integer>
</dict>
</plist>

View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>posterEnvironmentOverrides</key>
<data>
e30=
</data>
<key>wallpaperRepresentingFileName</key>
<string>9183.Custom-810w-1080h@2x~ipad.wallpaper</string>
<key>wallpaperRepresentingIdentifier</key>
<string>9999</string>
</dict>
</plist>

Binary file not shown.

29
gui/apply_worker.py Normal file
View File

@@ -0,0 +1,29 @@
from PySide6.QtCore import Signal, QThread
from PySide6.QtWidgets import QMessageBox
class ApplyAlertMessage:
def __init__(self, txt: str, title: str = "Error!", icon = QMessageBox.Critical, detailed_txt: str = None):
self.txt = txt
self.title = title
self.icon = icon
self.detailed_txt = detailed_txt
class ApplyThread(QThread):
progress = Signal(str)
alert = Signal(ApplyAlertMessage)
def update_label(self, txt: str):
self.progress.emit(txt)
def alert_window(self, msg: ApplyAlertMessage):
self.alert.emit(msg)
def __init__(self, manager, resetting: bool = False):
super().__init__()
self.manager = manager
self.resetting = resetting
def do_work(self):
self.manager.apply_changes(self.resetting, self.update_label, self.alert_window)
def run(self):
self.do_work()

View File

@@ -14,12 +14,13 @@ from devicemanagement.constants import Version
from devicemanagement.device_manager import DeviceManager
from gui.dialogs import GestaltDialog, UpdateAppDialog, PBHelpDialog
from gui.apply_worker import ApplyThread, ApplyAlertMessage
from tweaks.tweaks import tweaks
from tweaks.custom_gestalt_tweaks import CustomGestaltTweaks, ValueTypeStrings
from tweaks.daemons_tweak import Daemon
App_Version = "5.0.3"
App_Version = "5.1"
App_Build = 0
class Page(Enum):
@@ -43,6 +44,8 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.setupUi(self)
self.show_uuid = False
self.pb_mainLayout = None
self.applying_in_progress = False
self.threadpool = QtCore.QThreadPool()
self.loadSettings()
# Check for an update
@@ -83,6 +86,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.leminKoFiBtn.clicked.connect(self.on_leminKoFiBtn_clicked)
self.ui.posterRestoreBtn.clicked.connect(self.on_posterRestoreBtn_clicked)
self.ui.snoolieBtn.clicked.connect(self.on_snoolieBtn_clicked)
self.ui.disfordottieBtn.clicked.connect(self.on_disfordottieBtn_clicked)
self.ui.mikasaBtn.clicked.connect(self.on_mikasaBtn_clicked)
@@ -162,9 +166,21 @@ class MainWindow(QtWidgets.QMainWindow):
## POSTERBOARD PAGE ACTIONS
self.ui.modifyPosterboardsChk.toggled.connect(self.on_modifyPosterboardsChk_clicked)
self.ui.tendiesPageBtn.clicked.connect(self.on_tendiesPageBtn_clicked)
self.ui.videoPageBtn.clicked.connect(self.on_videoPageBtn_clicked)
self.ui.importTendiesBtn.clicked.connect(self.on_importTendiesBtn_clicked)
self.ui.resetPRBExtBtn.clicked.connect(self.on_resetPRBExtBtn_clicked)
self.ui.deleteAllDescriptorsBtn.clicked.connect(self.on_deleteAllDescriptorsBtn_clicked)
self.ui.chooseVideoBtn.clicked.connect(self.on_chooseVideoBtn_clicked)
self.ui.reverseLoopChk.toggled.connect(self.on_reverseLoopChk_toggled)
self.ui.useForegroundChk.toggled.connect(self.on_useForegroundChk_toggled)
self.ui.caVideoChk.hide()
self.ui.clearSuggestedBtn.hide()
self.ui.chooseThumbBtn.hide()
self.ui.pbVideoThumbLbl.hide()
self.ui.findPBBtn.clicked.connect(self.on_findPBBtn_clicked)
self.ui.pbHelpBtn.clicked.connect(self.on_pbHelpBtn_clicked)
@@ -184,9 +200,6 @@ 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 (depreciated)
# TODO: Remove this from the UI and everything
self.ui.windowsPathFixChk.hide()
self.ui.showAllSpoofableChk.toggled.connect(self.on_showAllSpoofableChk_toggled)
self.ui.revertRdarChk.toggled.connect(self.on_revertRdarChk_toggled)
@@ -545,6 +558,8 @@ class MainWindow(QtWidgets.QMainWindow):
def on_posterRestoreBtn_clicked(self):
webbrowser.open_new_tab("https://discord.gg/gWtzTVhMvh")
def on_snoolieBtn_clicked(self):
webbrowser.open_new_tab("https://github.com/0xilis/python-aar-stuff")
def on_disfordottieBtn_clicked(self):
webbrowser.open_new_tab("https://twitter.com/disfordottie")
def on_mikasaBtn_clicked(self):
@@ -909,7 +924,7 @@ class MainWindow(QtWidgets.QMainWindow):
spacer = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
# main layout
layout = QtWidgets.QHBoxLayout(widget)
layout.setContentsMargins(0, 0, 0, 9)
layout.setContentsMargins(0, 0, 0, 3)
layout.addWidget(titleBtn)
layout.addItem(spacer)
layout.addWidget(delBtn)
@@ -920,7 +935,19 @@ class MainWindow(QtWidgets.QMainWindow):
def on_modifyPosterboardsChk_clicked(self, checked: bool):
tweaks["PosterBoard"].set_enabled(checked)
self.ui.posterboardPageContent.setDisabled(not checked)
self.ui.pbPages.setDisabled(not checked)
# PB Pages Selectors
def on_tendiesPageBtn_clicked(self):
self.ui.tendiesPageBtn.setChecked(True)
self.ui.videoPageBtn.setChecked(False)
self.ui.pbPages.setCurrentIndex(0)
def on_videoPageBtn_clicked(self):
self.ui.tendiesPageBtn.setChecked(False)
self.ui.videoPageBtn.setChecked(True)
self.ui.pbPages.setCurrentIndex(1)
# Tendies Page
def on_importTendiesBtn_clicked(self):
selected_files, _ = QtWidgets.QFileDialog.getOpenFileNames(self, "Select PosterBoard Files", "", "Zip Files (*.tendies)", options=QtWidgets.QFileDialog.ReadOnly)
tweaks["PosterBoard"].resetting = False
@@ -935,8 +962,8 @@ class MainWindow(QtWidgets.QMainWindow):
detailsBox.setWindowTitle("Error!")
detailsBox.setText("You selected too many descriptors! The limit is 10.")
detailsBox.exec()
break
self.load_posterboard()
def on_deleteAllDescriptorsBtn_clicked(self):
if tweaks["PosterBoard"].resetting and tweaks["PosterBoard"].resetType == 0:
tweaks["PosterBoard"].resetting = False
@@ -944,7 +971,7 @@ class MainWindow(QtWidgets.QMainWindow):
else:
tweaks["PosterBoard"].resetting = True
tweaks["PosterBoard"].resetType = 0
self.ui.pbActionLbl.setText("! Clearing Collections Wallpapers")
self.ui.pbActionLbl.setText("! Set to Clear Collections Wallpapers")
self.ui.pbActionLbl.show()
def on_resetPRBExtBtn_clicked(self):
if tweaks["PosterBoard"].resetting and tweaks["PosterBoard"].resetType == 1:
@@ -953,8 +980,56 @@ class MainWindow(QtWidgets.QMainWindow):
else:
tweaks["PosterBoard"].resetting = True
tweaks["PosterBoard"].resetType = 1
self.ui.pbActionLbl.setText("! Resetting PRB Extension")
self.ui.pbActionLbl.setText("! Set to Reset PRB Extension")
self.ui.pbActionLbl.show()
# Video Page
def on_chooseThumbBtn_clicked(self):
selected_file, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Select Image File", "", "Image Files (*.heic)", options=QtWidgets.QFileDialog.ReadOnly)
tweaks["PosterBoard"].resetting = False
if selected_file != None and selected_file != "":
tweaks["PosterBoard"].videoThumbnail = selected_file
self.ui.pbVideoThumbLbl.setText(f"Current Thumbnail: {selected_file}")
else:
tweaks["PosterBoard"].videoThumbnail = None
self.ui.pbVideoThumbLbl.setText("Current Thumbnail: None")
def on_chooseVideoBtn_clicked(self):
selected_file, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Select Video File", "", "Video Files (*.mov *.mp4)", options=QtWidgets.QFileDialog.ReadOnly)
tweaks["PosterBoard"].resetting = False
if selected_file != None and selected_file != "":
tweaks["PosterBoard"].videoFile = selected_file
self.ui.pbVideoLbl.setText(f"Current Video: {selected_file}")
else:
tweaks["PosterBoard"].videoFile = None
self.ui.pbVideoLbl.setText("Current Video: None")
def on_clearSuggestedBtn_clicked(self):
if tweaks["PosterBoard"].resetting and tweaks["PosterBoard"].resetType == 2:
tweaks["PosterBoard"].resetting = False
self.ui.pbActionLbl.hide()
else:
tweaks["PosterBoard"].resetting = True
tweaks["PosterBoard"].resetType = 2
self.ui.pbActionLbl.setText("! Set to Clear Suggested Photos")
self.ui.pbActionLbl.show()
def on_caVideoChk_toggled(self, checked: bool):
tweaks["PosterBoard"].loop_video = checked
# hide thumbnail button and label
if checked:
self.ui.chooseThumbBtn.hide()
self.ui.pbVideoThumbLbl.hide()
self.ui.clearSuggestedBtn.hide()
self.ui.reverseLoopChk.show()
self.ui.useForegroundChk.show()
else:
self.ui.chooseThumbBtn.show()
self.ui.pbVideoThumbLbl.show()
self.ui.clearSuggestedBtn.show()
self.ui.reverseLoopChk.hide()
self.ui.useForegroundChk.hide()
def on_reverseLoopChk_toggled(self, checked: bool):
tweaks["PosterBoard"].reverse_video = checked
def on_useForegroundChk_toggled(self, checked: bool):
tweaks["PosterBoard"].use_foreground = checked
def on_findPBBtn_clicked(self):
webbrowser.open_new_tab("https://cowabun.ga/wallpapers")
@@ -1017,10 +1092,6 @@ 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
@@ -1101,12 +1172,31 @@ class MainWindow(QtWidgets.QMainWindow):
def update_bar(self, percent):
self.ui.restoreProgressBar.setValue(int(percent))
def on_removeTweaksBtn_clicked(self):
# TODO: Add threading here
self.device_manager.apply_changes(resetting=True, update_label=self.update_label)
self.apply_changes(resetting=True)
def on_resetGestaltBtn_clicked(self):
self.device_manager.reset_mobilegestalt(self.settings, update_label=self.update_label)
@QtCore.Slot()
def on_applyTweaksBtn_clicked(self):
# TODO: Add threading here
self.device_manager.apply_changes(update_label=self.update_label)
self.apply_changes()
def apply_changes(self, resetting: bool = False):
if not self.applying_in_progress:
self.applying_in_progress = True
self.worker_thread = ApplyThread(manager=self.device_manager, resetting=resetting)
self.worker_thread.progress.connect(self.ui.statusLbl.setText)
self.worker_thread.alert.connect(self.alert_message)
self.worker_thread.finished.connect(self.finish_apply_thread)
self.worker_thread.finished.connect(self.worker_thread.deleteLater)
self.worker_thread.start()
def alert_message(self, alert: ApplyAlertMessage):
print(alert.txt)
detailsBox = QtWidgets.QMessageBox()
detailsBox.setIcon(alert.icon)
detailsBox.setWindowTitle(alert.title)
detailsBox.setText(alert.txt)
if alert.detailed_txt != None:
detailsBox.setDetailedText(alert.detailed_txt)
detailsBox.exec()
def finish_apply_thread(self):
self.applying_in_progress = False

View File

@@ -2243,12 +2243,63 @@ class Ui_Nugget(object):
self.verticalLayout_143.addWidget(self.line_123)
self.posterboardPageContent = QWidget(self.posterboardPage)
self.posterboardPageContent.setObjectName(u"posterboardPageContent")
self.posterboardPageContent.setEnabled(False)
self.verticalLayout_133 = QVBoxLayout(self.posterboardPageContent)
self.verticalLayout_133.setObjectName(u"verticalLayout_133")
self.verticalLayout_133.setContentsMargins(0, 0, 0, 0)
self.pbPagePicker = QWidget(self.posterboardPage)
self.pbPagePicker.setObjectName(u"pbPagePicker")
sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
sizePolicy5.setHorizontalStretch(0)
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.pbPagePicker.sizePolicy().hasHeightForWidth())
self.pbPagePicker.setSizePolicy(sizePolicy5)
self.pbPagePicker.setMinimumSize(QSize(0, 30))
self.horizontalLayout_14 = QHBoxLayout(self.pbPagePicker)
self.horizontalLayout_14.setObjectName(u"horizontalLayout_14")
self.horizontalLayout_14.setContentsMargins(-1, 0, -1, 0)
self.horizontalSpacer_20 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_20)
self.tendiesPageBtn = QToolButton(self.pbPagePicker)
self.tendiesPageBtn.setObjectName(u"tendiesPageBtn")
sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Expanding)
sizePolicy6.setHorizontalStretch(0)
sizePolicy6.setVerticalStretch(0)
sizePolicy6.setHeightForWidth(self.tendiesPageBtn.sizePolicy().hasHeightForWidth())
self.tendiesPageBtn.setSizePolicy(sizePolicy6)
self.tendiesPageBtn.setMinimumSize(QSize(0, 35))
icon22 = QIcon()
icon22.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.tendiesPageBtn.setIcon(icon22)
self.tendiesPageBtn.setCheckable(True)
self.tendiesPageBtn.setChecked(True)
self.tendiesPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.tendiesPageBtn)
self.videoPageBtn = QToolButton(self.pbPagePicker)
self.videoPageBtn.setObjectName(u"videoPageBtn")
icon23 = QIcon()
icon23.addFile(u":/icon/photo.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.videoPageBtn.setIcon(icon23)
self.videoPageBtn.setCheckable(True)
self.videoPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.videoPageBtn)
self.horizontalSpacer_21 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_21)
self.verticalLayout_143.addWidget(self.pbPagePicker)
self.pbPages = QStackedWidget(self.posterboardPage)
self.pbPages.setObjectName(u"pbPages")
self.pbPages.setEnabled(False)
self.pbTendiesPage = QWidget()
self.pbTendiesPage.setObjectName(u"pbTendiesPage")
self.verticalLayout_38 = QVBoxLayout(self.pbTendiesPage)
self.verticalLayout_38.setObjectName(u"verticalLayout_38")
self.verticalLayout_38.setContentsMargins(-1, 0, -1, 0)
self.horizontalLayout_12 = QHBoxLayout()
self.horizontalLayout_12.setObjectName(u"horizontalLayout_12")
self.horizontalLayout_12.setContentsMargins(-1, -1, -1, 0)
@@ -2256,26 +2307,26 @@ class Ui_Nugget(object):
self.horizontalLayout_12.addItem(self.horizontalSpacer_18)
self.importTendiesBtn = QToolButton(self.posterboardPageContent)
self.importTendiesBtn = QToolButton(self.pbTendiesPage)
self.importTendiesBtn.setObjectName(u"importTendiesBtn")
self.importTendiesBtn.setLayoutDirection(Qt.RightToLeft)
icon22 = QIcon()
icon22.addFile(u":/icon/import.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.importTendiesBtn.setIcon(icon22)
icon24 = QIcon()
icon24.addFile(u":/icon/import.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.importTendiesBtn.setIcon(icon24)
self.importTendiesBtn.setIconSize(QSize(20, 20))
self.importTendiesBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_12.addWidget(self.importTendiesBtn)
self.verticalLayout_133.addLayout(self.horizontalLayout_12)
self.verticalLayout_38.addLayout(self.horizontalLayout_12)
self.pbActionLbl = QLabel(self.posterboardPageContent)
self.pbActionLbl = QLabel(self.pbTendiesPage)
self.pbActionLbl.setObjectName(u"pbActionLbl")
self.verticalLayout_133.addWidget(self.pbActionLbl)
self.verticalLayout_38.addWidget(self.pbActionLbl)
self.line_27 = QFrame(self.posterboardPageContent)
self.line_27 = QFrame(self.pbTendiesPage)
self.line_27.setObjectName(u"line_27")
self.line_27.setStyleSheet(u"QFrame {\n"
" color: #414141;\n"
@@ -2283,51 +2334,97 @@ class Ui_Nugget(object):
self.line_27.setFrameShadow(QFrame.Plain)
self.line_27.setFrameShape(QFrame.Shape.HLine)
self.verticalLayout_133.addWidget(self.line_27)
self.verticalLayout_38.addWidget(self.line_27)
self.pbFilesList = QWidget(self.posterboardPageContent)
self.pbFilesList = QWidget(self.pbTendiesPage)
self.pbFilesList.setObjectName(u"pbFilesList")
sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
sizePolicy5.setHorizontalStretch(0)
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.pbFilesList.sizePolicy().hasHeightForWidth())
self.pbFilesList.setSizePolicy(sizePolicy5)
sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
sizePolicy7.setHorizontalStretch(0)
sizePolicy7.setVerticalStretch(0)
sizePolicy7.setHeightForWidth(self.pbFilesList.sizePolicy().hasHeightForWidth())
self.pbFilesList.setSizePolicy(sizePolicy7)
self.pbFilesList.setMinimumSize(QSize(200, 35))
self.verticalLayout_133.addWidget(self.pbFilesList)
self.verticalLayout_38.addWidget(self.pbFilesList)
self.horizontalLayout_14 = QHBoxLayout()
self.horizontalLayout_14.setObjectName(u"horizontalLayout_14")
self.horizontalLayout_14.setContentsMargins(-1, -1, -1, 0)
self.horizontalSpacer_19 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_32 = QHBoxLayout()
self.horizontalLayout_32.setObjectName(u"horizontalLayout_32")
self.horizontalLayout_32.setContentsMargins(-1, -1, -1, 10)
self.horizontalSpacer_22 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_19)
self.horizontalLayout_32.addItem(self.horizontalSpacer_22)
self.deleteAllDescriptorsBtn = QToolButton(self.posterboardPageContent)
self.deleteAllDescriptorsBtn = QToolButton(self.pbTendiesPage)
self.deleteAllDescriptorsBtn.setObjectName(u"deleteAllDescriptorsBtn")
icon23 = QIcon()
icon23.addFile(u":/icon/arrow.clockwise.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.deleteAllDescriptorsBtn.setIcon(icon23)
icon25 = QIcon()
icon25.addFile(u":/icon/arrow.clockwise.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.deleteAllDescriptorsBtn.setIcon(icon25)
self.deleteAllDescriptorsBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.deleteAllDescriptorsBtn)
self.horizontalLayout_32.addWidget(self.deleteAllDescriptorsBtn)
self.resetPRBExtBtn = QToolButton(self.posterboardPageContent)
self.resetPRBExtBtn = QToolButton(self.pbTendiesPage)
self.resetPRBExtBtn.setObjectName(u"resetPRBExtBtn")
self.resetPRBExtBtn.setIcon(icon23)
self.resetPRBExtBtn.setIcon(icon25)
self.resetPRBExtBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.resetPRBExtBtn)
self.horizontalLayout_32.addWidget(self.resetPRBExtBtn)
self.horizontalSpacer_20 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalSpacer_23 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_20)
self.horizontalLayout_32.addItem(self.horizontalSpacer_23)
self.verticalLayout_133.addLayout(self.horizontalLayout_14)
self.verticalLayout_38.addLayout(self.horizontalLayout_32)
self.pbPages.addWidget(self.pbTendiesPage)
self.pbVideoPage = QWidget()
self.pbVideoPage.setObjectName(u"pbVideoPage")
self.verticalLayout_39 = QVBoxLayout(self.pbVideoPage)
self.verticalLayout_39.setObjectName(u"verticalLayout_39")
self.pbVideoThumbLbl = QLabel(self.pbVideoPage)
self.pbVideoThumbLbl.setObjectName(u"pbVideoThumbLbl")
self.verticalLayout_39.addWidget(self.pbVideoThumbLbl)
self.pbVideoLbl = QLabel(self.pbVideoPage)
self.pbVideoLbl.setObjectName(u"pbVideoLbl")
self.verticalLayout_39.addWidget(self.pbVideoLbl)
self.horizontalLayout_30 = QHBoxLayout()
self.horizontalLayout_30.setObjectName(u"horizontalLayout_30")
self.chooseThumbBtn = QToolButton(self.pbVideoPage)
self.chooseThumbBtn.setObjectName(u"chooseThumbBtn")
self.horizontalLayout_30.addWidget(self.chooseThumbBtn)
self.chooseVideoBtn = QToolButton(self.pbVideoPage)
self.chooseVideoBtn.setObjectName(u"chooseVideoBtn")
self.horizontalLayout_30.addWidget(self.chooseVideoBtn)
self.clearSuggestedBtn = QToolButton(self.pbVideoPage)
self.clearSuggestedBtn.setObjectName(u"clearSuggestedBtn")
self.clearSuggestedBtn.setIcon(icon25)
self.clearSuggestedBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_30.addWidget(self.clearSuggestedBtn)
self.horizontalSpacer_19 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_30.addItem(self.horizontalSpacer_19)
self.verticalLayout_143.addWidget(self.posterboardPageContent)
self.verticalLayout_39.addLayout(self.horizontalLayout_30)
self.verticalSpacer_22 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_39.addItem(self.verticalSpacer_22)
self.pbPages.addWidget(self.pbVideoPage)
self.verticalLayout_143.addWidget(self.pbPages)
self.pages.addWidget(self.posterboardPage)
self.advancedOptionsPage = QWidget()
@@ -2394,13 +2491,13 @@ class Ui_Nugget(object):
self.advancedOptionsPageContent = QWidget(self.advancedOptionsPage)
self.advancedOptionsPageContent.setObjectName(u"advancedOptionsPageContent")
self.advancedOptionsPageContent.setEnabled(True)
self.verticalLayout_134 = QVBoxLayout(self.advancedOptionsPageContent)
self.verticalLayout_134.setObjectName(u"verticalLayout_134")
self.verticalLayout_134.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_133 = QVBoxLayout(self.advancedOptionsPageContent)
self.verticalLayout_133.setObjectName(u"verticalLayout_133")
self.verticalLayout_133.setContentsMargins(0, 0, 0, 0)
self.label_17 = QLabel(self.advancedOptionsPageContent)
self.label_17.setObjectName(u"label_17")
self.verticalLayout_134.addWidget(self.label_17)
self.verticalLayout_133.addWidget(self.label_17)
self.line_191 = QFrame(self.advancedOptionsPageContent)
self.line_191.setObjectName(u"line_191")
@@ -2410,17 +2507,17 @@ class Ui_Nugget(object):
self.line_191.setFrameShadow(QFrame.Plain)
self.line_191.setFrameShape(QFrame.Shape.HLine)
self.verticalLayout_134.addWidget(self.line_191)
self.verticalLayout_133.addWidget(self.line_191)
self.disableOTAChk = QCheckBox(self.advancedOptionsPageContent)
self.disableOTAChk.setObjectName(u"disableOTAChk")
self.verticalLayout_134.addWidget(self.disableOTAChk)
self.verticalLayout_133.addWidget(self.disableOTAChk)
self.thermalmonitordChk = QCheckBox(self.advancedOptionsPageContent)
self.thermalmonitordChk.setObjectName(u"thermalmonitordChk")
self.verticalLayout_134.addWidget(self.thermalmonitordChk)
self.verticalLayout_133.addWidget(self.thermalmonitordChk)
self.line_181 = QFrame(self.advancedOptionsPageContent)
self.line_181.setObjectName(u"line_181")
@@ -2430,12 +2527,12 @@ class Ui_Nugget(object):
self.line_181.setFrameShadow(QFrame.Plain)
self.line_181.setFrameShape(QFrame.Shape.HLine)
self.verticalLayout_134.addWidget(self.line_181)
self.verticalLayout_133.addWidget(self.line_181)
self.enableResolutionChk = QCheckBox(self.advancedOptionsPageContent)
self.enableResolutionChk.setObjectName(u"enableResolutionChk")
self.verticalLayout_134.addWidget(self.enableResolutionChk)
self.verticalLayout_133.addWidget(self.enableResolutionChk)
self.resChangerContent = QWidget(self.advancedOptionsPageContent)
self.resChangerContent.setObjectName(u"resChangerContent")
@@ -2511,11 +2608,11 @@ class Ui_Nugget(object):
self.verticalLayout_35.addLayout(self.resolutionContent)
self.verticalLayout_134.addWidget(self.resChangerContent)
self.verticalLayout_133.addWidget(self.resChangerContent)
self.verticalSpacer_63 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_134.addItem(self.verticalSpacer_63)
self.verticalLayout_133.addItem(self.verticalSpacer_63)
self.verticalLayout_144.addWidget(self.advancedOptionsPageContent)
@@ -2609,9 +2706,9 @@ class Ui_Nugget(object):
self.horizontalLayout_7.setContentsMargins(-1, 10, -1, 0)
self.chooseGestaltBtn = QToolButton(self.verticalWidget2)
self.chooseGestaltBtn.setObjectName(u"chooseGestaltBtn")
icon24 = QIcon()
icon24.addFile(u":/icon/folder.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.chooseGestaltBtn.setIcon(icon24)
icon26 = QIcon()
icon26.addFile(u":/icon/folder.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.chooseGestaltBtn.setIcon(icon26)
self.chooseGestaltBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_7.addWidget(self.chooseGestaltBtn)
@@ -3025,9 +3122,9 @@ class Ui_Nugget(object):
" padding-right: 5px;\n"
" border-radius: 0px;\n"
"}")
icon25 = QIcon()
icon25.addFile(u":/icon/pencil.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.toolButton_12.setIcon(icon25)
icon27 = QIcon()
icon27.addFile(u":/icon/pencil.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.toolButton_12.setIcon(icon27)
self.toolButton_12.setIconSize(QSize(25, 25))
self.horizontalLayout_22.addWidget(self.toolButton_12)
@@ -3088,7 +3185,7 @@ class Ui_Nugget(object):
self.importOperationBtn = QToolButton(self.customOperationsPageContent)
self.importOperationBtn.setObjectName(u"importOperationBtn")
self.importOperationBtn.setEnabled(True)
self.importOperationBtn.setIcon(icon22)
self.importOperationBtn.setIcon(icon24)
self.importOperationBtn.setIconSize(QSize(20, 20))
self.importOperationBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
@@ -3114,8 +3211,8 @@ class Ui_Nugget(object):
self.operationsCnt = QWidget(self.customOperationsPageContent)
self.operationsCnt.setObjectName(u"operationsCnt")
self.operationsCnt.setEnabled(True)
sizePolicy5.setHeightForWidth(self.operationsCnt.sizePolicy().hasHeightForWidth())
self.operationsCnt.setSizePolicy(sizePolicy5)
sizePolicy7.setHeightForWidth(self.operationsCnt.sizePolicy().hasHeightForWidth())
self.operationsCnt.setSizePolicy(sizePolicy7)
self.verticalLayout_19.addWidget(self.operationsCnt)
@@ -3144,9 +3241,9 @@ class Ui_Nugget(object):
" padding-right: 5px;\n"
" border-radius: 0px;\n"
"}")
icon26 = QIcon()
icon26.addFile(u":/icon/compass.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.toolButton_16.setIcon(icon26)
icon28 = QIcon()
icon28.addFile(u":/icon/compass.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.toolButton_16.setIcon(icon28)
self.horizontalLayout_31.addWidget(self.toolButton_16)
@@ -3189,8 +3286,8 @@ class Ui_Nugget(object):
self.exploreThemesCnt = QWidget(self.explorePage)
self.exploreThemesCnt.setObjectName(u"exploreThemesCnt")
sizePolicy5.setHeightForWidth(self.exploreThemesCnt.sizePolicy().hasHeightForWidth())
self.exploreThemesCnt.setSizePolicy(sizePolicy5)
sizePolicy7.setHeightForWidth(self.exploreThemesCnt.sizePolicy().hasHeightForWidth())
self.exploreThemesCnt.setSizePolicy(sizePolicy7)
self.verticalLayout_31.addWidget(self.exploreThemesCnt)
@@ -3256,15 +3353,13 @@ class Ui_Nugget(object):
self.importThemeFolderBtn = QToolButton(self.horizontalWidget7)
self.importThemeFolderBtn.setObjectName(u"importThemeFolderBtn")
self.importThemeFolderBtn.setIcon(icon24)
self.importThemeFolderBtn.setIcon(icon26)
self.horizontalLayout_26.addWidget(self.importThemeFolderBtn)
self.importThemeZipBtn = QToolButton(self.horizontalWidget7)
self.importThemeZipBtn.setObjectName(u"importThemeZipBtn")
icon27 = QIcon()
icon27.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.importThemeZipBtn.setIcon(icon27)
self.importThemeZipBtn.setIcon(icon22)
self.horizontalLayout_26.addWidget(self.importThemeZipBtn)
@@ -3679,6 +3774,8 @@ class Ui_Nugget(object):
self.modifyPosterboardsChk.setText(QCoreApplication.translate("Nugget", u"Modify", None))
self.findPBBtn.setText(QCoreApplication.translate("Nugget", u" Find Wallpapers", None))
self.pbHelpBtn.setText(QCoreApplication.translate("Nugget", u"...", None))
self.tendiesPageBtn.setText(QCoreApplication.translate("Nugget", u" Tendies", None))
self.videoPageBtn.setText(QCoreApplication.translate("Nugget", u" Live", None))
#if QT_CONFIG(tooltip)
self.importTendiesBtn.setToolTip(QCoreApplication.translate("Nugget", u"Select a wallpaper file with the .tendies extension.", None))
#endif // QT_CONFIG(tooltip)
@@ -3694,6 +3791,11 @@ class Ui_Nugget(object):
"Warning: This will remove all of your wallpapers and will restrict you from adding new ones until you restore again.", None))
#endif // QT_CONFIG(tooltip)
self.resetPRBExtBtn.setText(QCoreApplication.translate("Nugget", u" Remove All Wallpapers", None))
self.pbVideoThumbLbl.setText(QCoreApplication.translate("Nugget", u"Current Thumbnail: None", None))
self.pbVideoLbl.setText(QCoreApplication.translate("Nugget", u"Current Video: None", None))
self.chooseThumbBtn.setText(QCoreApplication.translate("Nugget", u"Choose Thumbnail (.HEIC)", None))
self.chooseVideoBtn.setText(QCoreApplication.translate("Nugget", u"Choose Video (.MOV)", None))
self.clearSuggestedBtn.setText(QCoreApplication.translate("Nugget", u" Clear Suggested Photos", None))
self.advancedOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Risky Options", None))
self.label_17.setText(QCoreApplication.translate("Nugget", u"Disclaimer:\n"
"\n"

View File

@@ -1385,7 +1385,7 @@ QToolButton:pressed {
</property>
<property name="minimumSize">
<size>
<width>150</width>
<width>145</width>
<height>35</height>
</size>
</property>
@@ -1435,6 +1435,27 @@ Posterboard</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="snoolieBtn">
<property name="styleSheet">
<string notr="true">QToolButton {
border-radius: 0px;
background: none;
border: 1px solid #3b3b3b;
border-left: none;
}
QToolButton:pressed {
background-color: #535353;
color: #FFFFFF;
}</string>
</property>
<property name="text">
<string>Snoolie
.aar Handling</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="disfordottieBtn">
<property name="sizePolicy">
@@ -1464,7 +1485,7 @@ QToolButton:pressed {
</property>
<property name="text">
<string>disfordottie
Clock Anim, Photos UI</string>
Feature Flags</string>
</property>
</widget>
</item>
@@ -1530,7 +1551,7 @@ Quiet Daemon</string>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<width>145</width>
<height>35</height>
</size>
</property>
@@ -4127,7 +4148,7 @@ To work properly, also disable the daemon using the toggle above.</string>
<number>0</number>
</property>
<property name="bottomMargin">
<number>9</number>
<number>0</number>
</property>
<item>
<widget class="QToolButton" name="toolButton_10">
@@ -4249,6 +4270,123 @@ To work properly, also disable the daemon using the toggle above.</string>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="pbPagePicker" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>20</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">QToolButton {
min-height: 25px;
border-radius: 5px;
}</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_14">
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer_20">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="tendiesPageBtn">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string> Tendies</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/icon/file-earmark-zip.svg</normaloff>:/icon/file-earmark-zip.svg</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="videoPageBtn">
<property name="minimumSize">
<size>
<width>0</width>
<height>25</height>
</size>
</property>
<property name="text">
<string> Live</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/icon/photo.svg</normaloff>:/icon/photo.svg</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_21">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="Line" name="line_12">
<property name="styleSheet">
@@ -4265,177 +4403,300 @@ To work properly, also disable the daemon using the toggle above.</string>
</widget>
</item>
<item>
<widget class="QWidget" name="posterboardPageContent" native="true">
<widget class="QLabel" name="pbActionLbl">
<property name="text">
<string>None</string>
</property>
</widget>
</item>
<item>
<widget class="QStackedWidget" name="pbPages">
<property name="enabled">
<bool>false</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout_13">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer_18">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="importTendiesBtn">
<property name="toolTip">
<string>Select a wallpaper file with the .tendies extension.</string>
</property>
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
</property>
<property name="text">
<string> Import Files (.tendies)</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/icon/import.svg</normaloff>:/icon/import.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="pbActionLbl">
<property name="text">
<string>None</string>
</property>
</widget>
</item>
<item>
<widget class="Line" name="line_27">
<property name="styleSheet">
<string notr="true">QFrame {
<widget class="QWidget" name="pbTendiesPage">
<layout class="QVBoxLayout" name="verticalLayout_38">
<property name="topMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer_18">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="importTendiesBtn">
<property name="toolTip">
<string>Select a wallpaper file with the .tendies extension.</string>
</property>
<property name="layoutDirection">
<enum>Qt::RightToLeft</enum>
</property>
<property name="text">
<string> Import Files (.tendies)</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/icon/import.svg</normaloff>:/icon/import.svg</iconset>
</property>
<property name="iconSize">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="Line" name="line_27">
<property name="styleSheet">
<string notr="true">QFrame {
color: #414141;
}</string>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="pbFilesList" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>35</height>
</size>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_14">
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer_19">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="deleteAllDescriptorsBtn">
<property name="toolTip">
<string>Clears all the wallpapers in the Collections section so that you can import more.</string>
</property>
<property name="text">
<string> Clear Collections Wallpapers</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/icon/arrow.clockwise.svg</normaloff>:/icon/arrow.clockwise.svg</iconset>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="resetPRBExtBtn">
<property name="toolTip">
<string>Wipes the PRB Extension folder.
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="pbFilesList" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>200</width>
<height>35</height>
</size>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_32">
<property name="bottomMargin">
<number>10</number>
</property>
<item>
<spacer name="horizontalSpacer_22">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QToolButton" name="deleteAllDescriptorsBtn">
<property name="toolTip">
<string>Clears all the wallpapers in the Collections section so that you can import more.</string>
</property>
<property name="text">
<string> Clear Collections Wallpapers</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/icon/arrow.clockwise.svg</normaloff>:/icon/arrow.clockwise.svg</iconset>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="resetPRBExtBtn">
<property name="toolTip">
<string>Wipes the PRB Extension folder.
Warning: This will remove all of your wallpapers and will restrict you from adding new ones until you restore again.</string>
</property>
<property name="text">
<string> Remove All Wallpapers</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/icon/arrow.clockwise.svg</normaloff>:/icon/arrow.clockwise.svg</iconset>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_20">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</property>
<property name="text">
<string> Remove All Wallpapers</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/icon/arrow.clockwise.svg</normaloff>:/icon/arrow.clockwise.svg</iconset>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_23">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="pbVideoPage">
<layout class="QVBoxLayout" name="verticalLayout_39">
<item>
<widget class="QCheckBox" name="caVideoChk">
<property name="toolTip">
<string>Uses the CoreAnimation file to play the video (300 fps limit)
Will show up in Collections</string>
</property>
<property name="text">
<string>Loop (use CoreAnimation method)</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="reverseLoopChk">
<property name="text">
<string>Reverse on Loop</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="useForegroundChk">
<property name="text">
<string>Make Foreground (hides clock)</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_30">
<item>
<widget class="QToolButton" name="chooseThumbBtn">
<property name="toolTip">
<string>Choose a photo for the wallpaper to freeze on when finished (.heic files only)</string>
</property>
<property name="text">
<string>Choose Freeze Frame (.HEIC)</string>
</property>
</widget>
</item>
<item>
<widget class="QToolButton" name="chooseVideoBtn">
<property name="toolTip">
<string>Choose a video file for the wallpaper (.mov or .mp4)</string>
</property>
<property name="text">
<string>Choose Video</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_19">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="pbVideoThumbLbl">
<property name="text">
<string>Current Thumbnail: None</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="pbVideoLbl">
<property name="text">
<string>Current Video: None</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_22">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_34">
<property name="topMargin">
<number>0</number>
</property>
<item>
<widget class="QToolButton" name="clearSuggestedBtn">
<property name="text">
<string> Clear Suggested Photos</string>
</property>
<property name="icon">
<iconset>
<normaloff>:/icon/arrow.clockwise.svg</normaloff>:/icon/arrow.clockwise.svg</iconset>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_24">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
@@ -5344,16 +5605,6 @@ Warning: Disabling will cause the battery to show &quot;Unknown Part&quot; or &q
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="windowsPathFixChk">
<property name="text">
<string>Use Windows Path Fix (for Posterboard)</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="showAllSpoofableChk">
<property name="toolTip">

View File

@@ -756,7 +756,7 @@ class Ui_Nugget(object):
self.helpFromBtn = QToolButton(self.horizontalWidget_21)
self.helpFromBtn.setObjectName(u"helpFromBtn")
self.helpFromBtn.setEnabled(True)
self.helpFromBtn.setMinimumSize(QSize(150, 35))
self.helpFromBtn.setMinimumSize(QSize(145, 35))
self.helpFromBtn.setStyleSheet(u"QToolButton {\n"
" background: none;\n"
"}")
@@ -783,6 +783,22 @@ class Ui_Nugget(object):
self.horizontalLayout_2.addWidget(self.posterRestoreBtn)
self.snoolieBtn = QToolButton(self.horizontalWidget_21)
self.snoolieBtn.setObjectName(u"snoolieBtn")
self.snoolieBtn.setStyleSheet(u"QToolButton {\n"
" border-radius: 0px;\n"
" background: none;\n"
" border: 1px solid #3b3b3b;\n"
" border-left: none;\n"
"}\n"
"\n"
"QToolButton:pressed {\n"
" background-color: #535353;\n"
" color: #FFFFFF;\n"
"}")
self.horizontalLayout_2.addWidget(self.snoolieBtn)
self.disfordottieBtn = QToolButton(self.horizontalWidget_21)
self.disfordottieBtn.setObjectName(u"disfordottieBtn")
sizePolicy2.setHeightForWidth(self.disfordottieBtn.sizePolicy().hasHeightForWidth())
@@ -834,7 +850,7 @@ class Ui_Nugget(object):
self.toolButton_15 = QToolButton(self.horizontalWidget3)
self.toolButton_15.setObjectName(u"toolButton_15")
self.toolButton_15.setEnabled(False)
self.toolButton_15.setMinimumSize(QSize(150, 35))
self.toolButton_15.setMinimumSize(QSize(145, 35))
self.toolButton_15.setStyleSheet(u"QToolButton {\n"
" background: none;\n"
"}")
@@ -2171,7 +2187,7 @@ class Ui_Nugget(object):
self.horizontalLayout_203 = QHBoxLayout(self.horizontalWidget_53)
self.horizontalLayout_203.setSpacing(10)
self.horizontalLayout_203.setObjectName(u"horizontalLayout_203")
self.horizontalLayout_203.setContentsMargins(0, 9, 0, 9)
self.horizontalLayout_203.setContentsMargins(0, 9, 0, 0)
self.toolButton_103 = QToolButton(self.horizontalWidget_53)
self.toolButton_103.setObjectName(u"toolButton_103")
self.toolButton_103.setEnabled(True)
@@ -2233,6 +2249,61 @@ class Ui_Nugget(object):
self.verticalLayout_143.addWidget(self.horizontalWidget_53)
self.pbPagePicker = QWidget(self.posterboardPage)
self.pbPagePicker.setObjectName(u"pbPagePicker")
sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
sizePolicy5.setHorizontalStretch(0)
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.pbPagePicker.sizePolicy().hasHeightForWidth())
self.pbPagePicker.setSizePolicy(sizePolicy5)
self.pbPagePicker.setMinimumSize(QSize(0, 20))
self.pbPagePicker.setMaximumSize(QSize(16777215, 25))
self.pbPagePicker.setStyleSheet(u"QToolButton {\n"
" min-height: 25px;\n"
" border-radius: 5px;\n"
"}")
self.horizontalLayout_14 = QHBoxLayout(self.pbPagePicker)
self.horizontalLayout_14.setObjectName(u"horizontalLayout_14")
self.horizontalLayout_14.setContentsMargins(-1, 0, -1, 0)
self.horizontalSpacer_20 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_20)
self.tendiesPageBtn = QToolButton(self.pbPagePicker)
self.tendiesPageBtn.setObjectName(u"tendiesPageBtn")
sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Expanding)
sizePolicy6.setHorizontalStretch(0)
sizePolicy6.setVerticalStretch(0)
sizePolicy6.setHeightForWidth(self.tendiesPageBtn.sizePolicy().hasHeightForWidth())
self.tendiesPageBtn.setSizePolicy(sizePolicy6)
self.tendiesPageBtn.setMinimumSize(QSize(0, 25))
icon22 = QIcon()
icon22.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.tendiesPageBtn.setIcon(icon22)
self.tendiesPageBtn.setCheckable(True)
self.tendiesPageBtn.setChecked(True)
self.tendiesPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.tendiesPageBtn)
self.videoPageBtn = QToolButton(self.pbPagePicker)
self.videoPageBtn.setObjectName(u"videoPageBtn")
self.videoPageBtn.setMinimumSize(QSize(0, 25))
icon23 = QIcon()
icon23.addFile(u":/icon/photo.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.videoPageBtn.setIcon(icon23)
self.videoPageBtn.setCheckable(True)
self.videoPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.videoPageBtn)
self.horizontalSpacer_21 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_21)
self.verticalLayout_143.addWidget(self.pbPagePicker)
self.line_123 = QFrame(self.posterboardPage)
self.line_123.setObjectName(u"line_123")
self.line_123.setStyleSheet(u"QFrame {\n"
@@ -2243,12 +2314,19 @@ class Ui_Nugget(object):
self.verticalLayout_143.addWidget(self.line_123)
self.posterboardPageContent = QWidget(self.posterboardPage)
self.posterboardPageContent.setObjectName(u"posterboardPageContent")
self.posterboardPageContent.setEnabled(False)
self.verticalLayout_133 = QVBoxLayout(self.posterboardPageContent)
self.verticalLayout_133.setObjectName(u"verticalLayout_133")
self.verticalLayout_133.setContentsMargins(0, 0, 0, 0)
self.pbActionLbl = QLabel(self.posterboardPage)
self.pbActionLbl.setObjectName(u"pbActionLbl")
self.verticalLayout_143.addWidget(self.pbActionLbl)
self.pbPages = QStackedWidget(self.posterboardPage)
self.pbPages.setObjectName(u"pbPages")
self.pbPages.setEnabled(False)
self.pbTendiesPage = QWidget()
self.pbTendiesPage.setObjectName(u"pbTendiesPage")
self.verticalLayout_38 = QVBoxLayout(self.pbTendiesPage)
self.verticalLayout_38.setObjectName(u"verticalLayout_38")
self.verticalLayout_38.setContentsMargins(-1, 0, -1, 0)
self.horizontalLayout_12 = QHBoxLayout()
self.horizontalLayout_12.setObjectName(u"horizontalLayout_12")
self.horizontalLayout_12.setContentsMargins(-1, -1, -1, 0)
@@ -2256,26 +2334,21 @@ class Ui_Nugget(object):
self.horizontalLayout_12.addItem(self.horizontalSpacer_18)
self.importTendiesBtn = QToolButton(self.posterboardPageContent)
self.importTendiesBtn = QToolButton(self.pbTendiesPage)
self.importTendiesBtn.setObjectName(u"importTendiesBtn")
self.importTendiesBtn.setLayoutDirection(Qt.RightToLeft)
icon22 = QIcon()
icon22.addFile(u":/icon/import.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.importTendiesBtn.setIcon(icon22)
icon24 = QIcon()
icon24.addFile(u":/icon/import.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.importTendiesBtn.setIcon(icon24)
self.importTendiesBtn.setIconSize(QSize(20, 20))
self.importTendiesBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_12.addWidget(self.importTendiesBtn)
self.verticalLayout_133.addLayout(self.horizontalLayout_12)
self.verticalLayout_38.addLayout(self.horizontalLayout_12)
self.pbActionLbl = QLabel(self.posterboardPageContent)
self.pbActionLbl.setObjectName(u"pbActionLbl")
self.verticalLayout_133.addWidget(self.pbActionLbl)
self.line_27 = QFrame(self.posterboardPageContent)
self.line_27 = QFrame(self.pbTendiesPage)
self.line_27.setObjectName(u"line_27")
self.line_27.setStyleSheet(u"QFrame {\n"
" color: #414141;\n"
@@ -2283,51 +2356,122 @@ class Ui_Nugget(object):
self.line_27.setFrameShadow(QFrame.Plain)
self.line_27.setFrameShape(QFrame.Shape.HLine)
self.verticalLayout_133.addWidget(self.line_27)
self.verticalLayout_38.addWidget(self.line_27)
self.pbFilesList = QWidget(self.posterboardPageContent)
self.pbFilesList = QWidget(self.pbTendiesPage)
self.pbFilesList.setObjectName(u"pbFilesList")
sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
sizePolicy5.setHorizontalStretch(0)
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.pbFilesList.sizePolicy().hasHeightForWidth())
self.pbFilesList.setSizePolicy(sizePolicy5)
sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
sizePolicy7.setHorizontalStretch(0)
sizePolicy7.setVerticalStretch(0)
sizePolicy7.setHeightForWidth(self.pbFilesList.sizePolicy().hasHeightForWidth())
self.pbFilesList.setSizePolicy(sizePolicy7)
self.pbFilesList.setMinimumSize(QSize(200, 35))
self.verticalLayout_133.addWidget(self.pbFilesList)
self.verticalLayout_38.addWidget(self.pbFilesList)
self.horizontalLayout_14 = QHBoxLayout()
self.horizontalLayout_14.setObjectName(u"horizontalLayout_14")
self.horizontalLayout_14.setContentsMargins(-1, -1, -1, 0)
self.horizontalSpacer_19 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_32 = QHBoxLayout()
self.horizontalLayout_32.setObjectName(u"horizontalLayout_32")
self.horizontalLayout_32.setContentsMargins(-1, -1, -1, 10)
self.horizontalSpacer_22 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_19)
self.horizontalLayout_32.addItem(self.horizontalSpacer_22)
self.deleteAllDescriptorsBtn = QToolButton(self.posterboardPageContent)
self.deleteAllDescriptorsBtn = QToolButton(self.pbTendiesPage)
self.deleteAllDescriptorsBtn.setObjectName(u"deleteAllDescriptorsBtn")
icon23 = QIcon()
icon23.addFile(u":/icon/arrow.clockwise.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.deleteAllDescriptorsBtn.setIcon(icon23)
icon25 = QIcon()
icon25.addFile(u":/icon/arrow.clockwise.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.deleteAllDescriptorsBtn.setIcon(icon25)
self.deleteAllDescriptorsBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.deleteAllDescriptorsBtn)
self.horizontalLayout_32.addWidget(self.deleteAllDescriptorsBtn)
self.resetPRBExtBtn = QToolButton(self.posterboardPageContent)
self.resetPRBExtBtn = QToolButton(self.pbTendiesPage)
self.resetPRBExtBtn.setObjectName(u"resetPRBExtBtn")
self.resetPRBExtBtn.setIcon(icon23)
self.resetPRBExtBtn.setIcon(icon25)
self.resetPRBExtBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.resetPRBExtBtn)
self.horizontalLayout_32.addWidget(self.resetPRBExtBtn)
self.horizontalSpacer_20 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalSpacer_23 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_20)
self.horizontalLayout_32.addItem(self.horizontalSpacer_23)
self.verticalLayout_133.addLayout(self.horizontalLayout_14)
self.verticalLayout_38.addLayout(self.horizontalLayout_32)
self.pbPages.addWidget(self.pbTendiesPage)
self.pbVideoPage = QWidget()
self.pbVideoPage.setObjectName(u"pbVideoPage")
self.verticalLayout_39 = QVBoxLayout(self.pbVideoPage)
self.verticalLayout_39.setObjectName(u"verticalLayout_39")
self.caVideoChk = QCheckBox(self.pbVideoPage)
self.caVideoChk.setObjectName(u"caVideoChk")
self.verticalLayout_39.addWidget(self.caVideoChk)
self.reverseLoopChk = QCheckBox(self.pbVideoPage)
self.reverseLoopChk.setObjectName(u"reverseLoopChk")
self.verticalLayout_39.addWidget(self.reverseLoopChk)
self.useForegroundChk = QCheckBox(self.pbVideoPage)
self.useForegroundChk.setObjectName(u"useForegroundChk")
self.verticalLayout_39.addWidget(self.useForegroundChk)
self.horizontalLayout_30 = QHBoxLayout()
self.horizontalLayout_30.setObjectName(u"horizontalLayout_30")
self.chooseThumbBtn = QToolButton(self.pbVideoPage)
self.chooseThumbBtn.setObjectName(u"chooseThumbBtn")
self.horizontalLayout_30.addWidget(self.chooseThumbBtn)
self.chooseVideoBtn = QToolButton(self.pbVideoPage)
self.chooseVideoBtn.setObjectName(u"chooseVideoBtn")
self.horizontalLayout_30.addWidget(self.chooseVideoBtn)
self.horizontalSpacer_19 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_30.addItem(self.horizontalSpacer_19)
self.verticalLayout_143.addWidget(self.posterboardPageContent)
self.verticalLayout_39.addLayout(self.horizontalLayout_30)
self.pbVideoThumbLbl = QLabel(self.pbVideoPage)
self.pbVideoThumbLbl.setObjectName(u"pbVideoThumbLbl")
self.verticalLayout_39.addWidget(self.pbVideoThumbLbl)
self.pbVideoLbl = QLabel(self.pbVideoPage)
self.pbVideoLbl.setObjectName(u"pbVideoLbl")
self.verticalLayout_39.addWidget(self.pbVideoLbl)
self.verticalSpacer_22 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_39.addItem(self.verticalSpacer_22)
self.horizontalLayout_34 = QHBoxLayout()
self.horizontalLayout_34.setObjectName(u"horizontalLayout_34")
self.horizontalLayout_34.setContentsMargins(-1, 0, -1, -1)
self.clearSuggestedBtn = QToolButton(self.pbVideoPage)
self.clearSuggestedBtn.setObjectName(u"clearSuggestedBtn")
self.clearSuggestedBtn.setIcon(icon25)
self.clearSuggestedBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_34.addWidget(self.clearSuggestedBtn)
self.horizontalSpacer_24 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_34.addItem(self.horizontalSpacer_24)
self.verticalLayout_39.addLayout(self.horizontalLayout_34)
self.pbPages.addWidget(self.pbVideoPage)
self.verticalLayout_143.addWidget(self.pbPages)
self.pages.addWidget(self.posterboardPage)
self.advancedOptionsPage = QWidget()
@@ -2394,13 +2538,13 @@ class Ui_Nugget(object):
self.advancedOptionsPageContent = QWidget(self.advancedOptionsPage)
self.advancedOptionsPageContent.setObjectName(u"advancedOptionsPageContent")
self.advancedOptionsPageContent.setEnabled(True)
self.verticalLayout_134 = QVBoxLayout(self.advancedOptionsPageContent)
self.verticalLayout_134.setObjectName(u"verticalLayout_134")
self.verticalLayout_134.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_133 = QVBoxLayout(self.advancedOptionsPageContent)
self.verticalLayout_133.setObjectName(u"verticalLayout_133")
self.verticalLayout_133.setContentsMargins(0, 0, 0, 0)
self.label_17 = QLabel(self.advancedOptionsPageContent)
self.label_17.setObjectName(u"label_17")
self.verticalLayout_134.addWidget(self.label_17)
self.verticalLayout_133.addWidget(self.label_17)
self.line_191 = QFrame(self.advancedOptionsPageContent)
self.line_191.setObjectName(u"line_191")
@@ -2410,17 +2554,17 @@ class Ui_Nugget(object):
self.line_191.setFrameShadow(QFrame.Plain)
self.line_191.setFrameShape(QFrame.Shape.HLine)
self.verticalLayout_134.addWidget(self.line_191)
self.verticalLayout_133.addWidget(self.line_191)
self.disableOTAChk = QCheckBox(self.advancedOptionsPageContent)
self.disableOTAChk.setObjectName(u"disableOTAChk")
self.verticalLayout_134.addWidget(self.disableOTAChk)
self.verticalLayout_133.addWidget(self.disableOTAChk)
self.thermalmonitordChk = QCheckBox(self.advancedOptionsPageContent)
self.thermalmonitordChk.setObjectName(u"thermalmonitordChk")
self.verticalLayout_134.addWidget(self.thermalmonitordChk)
self.verticalLayout_133.addWidget(self.thermalmonitordChk)
self.line_181 = QFrame(self.advancedOptionsPageContent)
self.line_181.setObjectName(u"line_181")
@@ -2430,12 +2574,12 @@ class Ui_Nugget(object):
self.line_181.setFrameShadow(QFrame.Plain)
self.line_181.setFrameShape(QFrame.Shape.HLine)
self.verticalLayout_134.addWidget(self.line_181)
self.verticalLayout_133.addWidget(self.line_181)
self.enableResolutionChk = QCheckBox(self.advancedOptionsPageContent)
self.enableResolutionChk.setObjectName(u"enableResolutionChk")
self.verticalLayout_134.addWidget(self.enableResolutionChk)
self.verticalLayout_133.addWidget(self.enableResolutionChk)
self.resChangerContent = QWidget(self.advancedOptionsPageContent)
self.resChangerContent.setObjectName(u"resChangerContent")
@@ -2511,11 +2655,11 @@ class Ui_Nugget(object):
self.verticalLayout_35.addLayout(self.resolutionContent)
self.verticalLayout_134.addWidget(self.resChangerContent)
self.verticalLayout_133.addWidget(self.resChangerContent)
self.verticalSpacer_63 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_134.addItem(self.verticalSpacer_63)
self.verticalLayout_133.addItem(self.verticalSpacer_63)
self.verticalLayout_144.addWidget(self.advancedOptionsPageContent)
@@ -2609,9 +2753,9 @@ class Ui_Nugget(object):
self.horizontalLayout_7.setContentsMargins(-1, 10, -1, 0)
self.chooseGestaltBtn = QToolButton(self.verticalWidget2)
self.chooseGestaltBtn.setObjectName(u"chooseGestaltBtn")
icon24 = QIcon()
icon24.addFile(u":/icon/folder.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.chooseGestaltBtn.setIcon(icon24)
icon26 = QIcon()
icon26.addFile(u":/icon/folder.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.chooseGestaltBtn.setIcon(icon26)
self.chooseGestaltBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_7.addWidget(self.chooseGestaltBtn)
@@ -2776,12 +2920,6 @@ 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")
@@ -3031,9 +3169,9 @@ class Ui_Nugget(object):
" padding-right: 5px;\n"
" border-radius: 0px;\n"
"}")
icon25 = QIcon()
icon25.addFile(u":/icon/pencil.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.toolButton_12.setIcon(icon25)
icon27 = QIcon()
icon27.addFile(u":/icon/pencil.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.toolButton_12.setIcon(icon27)
self.toolButton_12.setIconSize(QSize(25, 25))
self.horizontalLayout_22.addWidget(self.toolButton_12)
@@ -3094,7 +3232,7 @@ class Ui_Nugget(object):
self.importOperationBtn = QToolButton(self.customOperationsPageContent)
self.importOperationBtn.setObjectName(u"importOperationBtn")
self.importOperationBtn.setEnabled(True)
self.importOperationBtn.setIcon(icon22)
self.importOperationBtn.setIcon(icon24)
self.importOperationBtn.setIconSize(QSize(20, 20))
self.importOperationBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
@@ -3120,8 +3258,8 @@ class Ui_Nugget(object):
self.operationsCnt = QWidget(self.customOperationsPageContent)
self.operationsCnt.setObjectName(u"operationsCnt")
self.operationsCnt.setEnabled(True)
sizePolicy5.setHeightForWidth(self.operationsCnt.sizePolicy().hasHeightForWidth())
self.operationsCnt.setSizePolicy(sizePolicy5)
sizePolicy7.setHeightForWidth(self.operationsCnt.sizePolicy().hasHeightForWidth())
self.operationsCnt.setSizePolicy(sizePolicy7)
self.verticalLayout_19.addWidget(self.operationsCnt)
@@ -3150,9 +3288,9 @@ class Ui_Nugget(object):
" padding-right: 5px;\n"
" border-radius: 0px;\n"
"}")
icon26 = QIcon()
icon26.addFile(u":/icon/compass.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.toolButton_16.setIcon(icon26)
icon28 = QIcon()
icon28.addFile(u":/icon/compass.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.toolButton_16.setIcon(icon28)
self.horizontalLayout_31.addWidget(self.toolButton_16)
@@ -3195,8 +3333,8 @@ class Ui_Nugget(object):
self.exploreThemesCnt = QWidget(self.explorePage)
self.exploreThemesCnt.setObjectName(u"exploreThemesCnt")
sizePolicy5.setHeightForWidth(self.exploreThemesCnt.sizePolicy().hasHeightForWidth())
self.exploreThemesCnt.setSizePolicy(sizePolicy5)
sizePolicy7.setHeightForWidth(self.exploreThemesCnt.sizePolicy().hasHeightForWidth())
self.exploreThemesCnt.setSizePolicy(sizePolicy7)
self.verticalLayout_31.addWidget(self.exploreThemesCnt)
@@ -3262,15 +3400,13 @@ class Ui_Nugget(object):
self.importThemeFolderBtn = QToolButton(self.horizontalWidget7)
self.importThemeFolderBtn.setObjectName(u"importThemeFolderBtn")
self.importThemeFolderBtn.setIcon(icon24)
self.importThemeFolderBtn.setIcon(icon26)
self.horizontalLayout_26.addWidget(self.importThemeFolderBtn)
self.importThemeZipBtn = QToolButton(self.horizontalWidget7)
self.importThemeZipBtn.setObjectName(u"importThemeZipBtn")
icon27 = QIcon()
icon27.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
self.importThemeZipBtn.setIcon(icon27)
self.importThemeZipBtn.setIcon(icon22)
self.horizontalLayout_26.addWidget(self.importThemeZipBtn)
@@ -3425,8 +3561,10 @@ class Ui_Nugget(object):
self.helpFromBtn.setText(QCoreApplication.translate("Nugget", u"With Help From", None))
self.posterRestoreBtn.setText(QCoreApplication.translate("Nugget", u"PosterRestore Team\n"
"Posterboard", None))
self.snoolieBtn.setText(QCoreApplication.translate("Nugget", u"Snoolie\n"
".aar Handling", None))
self.disfordottieBtn.setText(QCoreApplication.translate("Nugget", u"disfordottie\n"
"Clock Anim, Photos UI", None))
"Feature Flags", None))
self.mikasaBtn.setText(QCoreApplication.translate("Nugget", u"Mikasa\n"
"Quiet Daemon", None))
self.toolButton_15.setText(QCoreApplication.translate("Nugget", u"Additional Thanks", None))
@@ -3685,11 +3823,13 @@ class Ui_Nugget(object):
self.modifyPosterboardsChk.setText(QCoreApplication.translate("Nugget", u"Modify", None))
self.findPBBtn.setText(QCoreApplication.translate("Nugget", u" Find Wallpapers", None))
self.pbHelpBtn.setText(QCoreApplication.translate("Nugget", u"...", None))
self.tendiesPageBtn.setText(QCoreApplication.translate("Nugget", u" Tendies", None))
self.videoPageBtn.setText(QCoreApplication.translate("Nugget", u" Live", None))
self.pbActionLbl.setText(QCoreApplication.translate("Nugget", u"None", None))
#if QT_CONFIG(tooltip)
self.importTendiesBtn.setToolTip(QCoreApplication.translate("Nugget", u"Select a wallpaper file with the .tendies extension.", None))
#endif // QT_CONFIG(tooltip)
self.importTendiesBtn.setText(QCoreApplication.translate("Nugget", u" Import Files (.tendies)", None))
self.pbActionLbl.setText(QCoreApplication.translate("Nugget", u"None", None))
#if QT_CONFIG(tooltip)
self.deleteAllDescriptorsBtn.setToolTip(QCoreApplication.translate("Nugget", u"Clears all the wallpapers in the Collections section so that you can import more.", None))
#endif // QT_CONFIG(tooltip)
@@ -3700,6 +3840,24 @@ class Ui_Nugget(object):
"Warning: This will remove all of your wallpapers and will restrict you from adding new ones until you restore again.", None))
#endif // QT_CONFIG(tooltip)
self.resetPRBExtBtn.setText(QCoreApplication.translate("Nugget", u" Remove All Wallpapers", None))
#if QT_CONFIG(tooltip)
self.caVideoChk.setToolTip(QCoreApplication.translate("Nugget", u"Uses the CoreAnimation file to play the video (300 fps limit)\n"
"Will show up in Collections", None))
#endif // QT_CONFIG(tooltip)
self.caVideoChk.setText(QCoreApplication.translate("Nugget", u"Loop (use CoreAnimation method)", None))
self.reverseLoopChk.setText(QCoreApplication.translate("Nugget", u"Reverse on Loop", None))
self.useForegroundChk.setText(QCoreApplication.translate("Nugget", u"Make Foreground (hides clock)", None))
#if QT_CONFIG(tooltip)
self.chooseThumbBtn.setToolTip(QCoreApplication.translate("Nugget", u"Choose a photo for the wallpaper to freeze on when finished (.heic files only)", None))
#endif // QT_CONFIG(tooltip)
self.chooseThumbBtn.setText(QCoreApplication.translate("Nugget", u"Choose Freeze Frame (.HEIC)", None))
#if QT_CONFIG(tooltip)
self.chooseVideoBtn.setToolTip(QCoreApplication.translate("Nugget", u"Choose a video file for the wallpaper (.mov or .mp4)", None))
#endif // QT_CONFIG(tooltip)
self.chooseVideoBtn.setText(QCoreApplication.translate("Nugget", u"Choose Video", None))
self.pbVideoThumbLbl.setText(QCoreApplication.translate("Nugget", u"Current Thumbnail: None", None))
self.pbVideoLbl.setText(QCoreApplication.translate("Nugget", u"Current Video: None", None))
self.clearSuggestedBtn.setText(QCoreApplication.translate("Nugget", u" Clear Suggested Photos", None))
self.advancedOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Risky Options", None))
self.label_17.setText(QCoreApplication.translate("Nugget", u"Disclaimer:\n"
"\n"
@@ -3741,7 +3899,6 @@ 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)

View File

@@ -756,7 +756,7 @@ class Ui_Nugget(object):
self.helpFromBtn = QToolButton(self.horizontalWidget_21)
self.helpFromBtn.setObjectName(u"helpFromBtn")
self.helpFromBtn.setEnabled(True)
self.helpFromBtn.setMinimumSize(QSize(150, 35))
self.helpFromBtn.setMinimumSize(QSize(145, 35))
self.helpFromBtn.setStyleSheet(u"QToolButton {\n"
" background: none;\n"
"}")
@@ -783,6 +783,22 @@ class Ui_Nugget(object):
self.horizontalLayout_2.addWidget(self.posterRestoreBtn)
self.snoolieBtn = QToolButton(self.horizontalWidget_21)
self.snoolieBtn.setObjectName(u"snoolieBtn")
self.snoolieBtn.setStyleSheet(u"QToolButton {\n"
" border-radius: 0px;\n"
" background: none;\n"
" border: 1px solid #3b3b3b;\n"
" border-left: none;\n"
"}\n"
"\n"
"QToolButton:pressed {\n"
" background-color: #535353;\n"
" color: #FFFFFF;\n"
"}")
self.horizontalLayout_2.addWidget(self.snoolieBtn)
self.disfordottieBtn = QToolButton(self.horizontalWidget_21)
self.disfordottieBtn.setObjectName(u"disfordottieBtn")
sizePolicy2.setHeightForWidth(self.disfordottieBtn.sizePolicy().hasHeightForWidth())
@@ -834,7 +850,7 @@ class Ui_Nugget(object):
self.toolButton_15 = QToolButton(self.horizontalWidget3)
self.toolButton_15.setObjectName(u"toolButton_15")
self.toolButton_15.setEnabled(False)
self.toolButton_15.setMinimumSize(QSize(150, 35))
self.toolButton_15.setMinimumSize(QSize(145, 35))
self.toolButton_15.setStyleSheet(u"QToolButton {\n"
" background: none;\n"
"}")
@@ -2171,7 +2187,7 @@ class Ui_Nugget(object):
self.horizontalLayout_203 = QHBoxLayout(self.horizontalWidget_53)
self.horizontalLayout_203.setSpacing(10)
self.horizontalLayout_203.setObjectName(u"horizontalLayout_203")
self.horizontalLayout_203.setContentsMargins(0, 9, 0, 9)
self.horizontalLayout_203.setContentsMargins(0, 9, 0, 0)
self.toolButton_103 = QToolButton(self.horizontalWidget_53)
self.toolButton_103.setObjectName(u"toolButton_103")
self.toolButton_103.setEnabled(True)
@@ -2233,6 +2249,61 @@ class Ui_Nugget(object):
self.verticalLayout_143.addWidget(self.horizontalWidget_53)
self.pbPagePicker = QWidget(self.posterboardPage)
self.pbPagePicker.setObjectName(u"pbPagePicker")
sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Fixed)
sizePolicy5.setHorizontalStretch(0)
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.pbPagePicker.sizePolicy().hasHeightForWidth())
self.pbPagePicker.setSizePolicy(sizePolicy5)
self.pbPagePicker.setMinimumSize(QSize(0, 20))
self.pbPagePicker.setMaximumSize(QSize(16777215, 25))
self.pbPagePicker.setStyleSheet(u"QToolButton {\n"
" min-height: 25px;\n"
" border-radius: 5px;\n"
"}")
self.horizontalLayout_14 = QHBoxLayout(self.pbPagePicker)
self.horizontalLayout_14.setObjectName(u"horizontalLayout_14")
self.horizontalLayout_14.setContentsMargins(-1, 0, -1, 0)
self.horizontalSpacer_20 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_20)
self.tendiesPageBtn = QToolButton(self.pbPagePicker)
self.tendiesPageBtn.setObjectName(u"tendiesPageBtn")
sizePolicy6 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Expanding)
sizePolicy6.setHorizontalStretch(0)
sizePolicy6.setVerticalStretch(0)
sizePolicy6.setHeightForWidth(self.tendiesPageBtn.sizePolicy().hasHeightForWidth())
self.tendiesPageBtn.setSizePolicy(sizePolicy6)
self.tendiesPageBtn.setMinimumSize(QSize(0, 25))
icon22 = QIcon()
icon22.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Normal, QIcon.Off)
self.tendiesPageBtn.setIcon(icon22)
self.tendiesPageBtn.setCheckable(True)
self.tendiesPageBtn.setChecked(True)
self.tendiesPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.tendiesPageBtn)
self.videoPageBtn = QToolButton(self.pbPagePicker)
self.videoPageBtn.setObjectName(u"videoPageBtn")
self.videoPageBtn.setMinimumSize(QSize(0, 25))
icon23 = QIcon()
icon23.addFile(u":/icon/photo.svg", QSize(), QIcon.Normal, QIcon.Off)
self.videoPageBtn.setIcon(icon23)
self.videoPageBtn.setCheckable(True)
self.videoPageBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.videoPageBtn)
self.horizontalSpacer_21 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_21)
self.verticalLayout_143.addWidget(self.pbPagePicker)
self.line_123 = QFrame(self.posterboardPage)
self.line_123.setObjectName(u"line_123")
self.line_123.setStyleSheet(u"QFrame {\n"
@@ -2243,12 +2314,19 @@ class Ui_Nugget(object):
self.verticalLayout_143.addWidget(self.line_123)
self.posterboardPageContent = QWidget(self.posterboardPage)
self.posterboardPageContent.setObjectName(u"posterboardPageContent")
self.posterboardPageContent.setEnabled(False)
self.verticalLayout_133 = QVBoxLayout(self.posterboardPageContent)
self.verticalLayout_133.setObjectName(u"verticalLayout_133")
self.verticalLayout_133.setContentsMargins(0, 0, 0, 0)
self.pbActionLbl = QLabel(self.posterboardPage)
self.pbActionLbl.setObjectName(u"pbActionLbl")
self.verticalLayout_143.addWidget(self.pbActionLbl)
self.pbPages = QStackedWidget(self.posterboardPage)
self.pbPages.setObjectName(u"pbPages")
self.pbPages.setEnabled(False)
self.pbTendiesPage = QWidget()
self.pbTendiesPage.setObjectName(u"pbTendiesPage")
self.verticalLayout_38 = QVBoxLayout(self.pbTendiesPage)
self.verticalLayout_38.setObjectName(u"verticalLayout_38")
self.verticalLayout_38.setContentsMargins(-1, 0, -1, 0)
self.horizontalLayout_12 = QHBoxLayout()
self.horizontalLayout_12.setObjectName(u"horizontalLayout_12")
self.horizontalLayout_12.setContentsMargins(-1, -1, -1, 0)
@@ -2256,26 +2334,21 @@ class Ui_Nugget(object):
self.horizontalLayout_12.addItem(self.horizontalSpacer_18)
self.importTendiesBtn = QToolButton(self.posterboardPageContent)
self.importTendiesBtn = QToolButton(self.pbTendiesPage)
self.importTendiesBtn.setObjectName(u"importTendiesBtn")
self.importTendiesBtn.setLayoutDirection(Qt.RightToLeft)
icon22 = QIcon()
icon22.addFile(u":/icon/import.svg", QSize(), QIcon.Normal, QIcon.Off)
self.importTendiesBtn.setIcon(icon22)
icon24 = QIcon()
icon24.addFile(u":/icon/import.svg", QSize(), QIcon.Normal, QIcon.Off)
self.importTendiesBtn.setIcon(icon24)
self.importTendiesBtn.setIconSize(QSize(20, 20))
self.importTendiesBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_12.addWidget(self.importTendiesBtn)
self.verticalLayout_133.addLayout(self.horizontalLayout_12)
self.verticalLayout_38.addLayout(self.horizontalLayout_12)
self.pbActionLbl = QLabel(self.posterboardPageContent)
self.pbActionLbl.setObjectName(u"pbActionLbl")
self.verticalLayout_133.addWidget(self.pbActionLbl)
self.line_27 = QFrame(self.posterboardPageContent)
self.line_27 = QFrame(self.pbTendiesPage)
self.line_27.setObjectName(u"line_27")
self.line_27.setStyleSheet(u"QFrame {\n"
" color: #414141;\n"
@@ -2283,51 +2356,122 @@ class Ui_Nugget(object):
self.line_27.setFrameShadow(QFrame.Plain)
self.line_27.setFrameShape(QFrame.HLine)
self.verticalLayout_133.addWidget(self.line_27)
self.verticalLayout_38.addWidget(self.line_27)
self.pbFilesList = QWidget(self.posterboardPageContent)
self.pbFilesList = QWidget(self.pbTendiesPage)
self.pbFilesList.setObjectName(u"pbFilesList")
sizePolicy5 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
sizePolicy5.setHorizontalStretch(0)
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.pbFilesList.sizePolicy().hasHeightForWidth())
self.pbFilesList.setSizePolicy(sizePolicy5)
sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)
sizePolicy7.setHorizontalStretch(0)
sizePolicy7.setVerticalStretch(0)
sizePolicy7.setHeightForWidth(self.pbFilesList.sizePolicy().hasHeightForWidth())
self.pbFilesList.setSizePolicy(sizePolicy7)
self.pbFilesList.setMinimumSize(QSize(200, 35))
self.verticalLayout_133.addWidget(self.pbFilesList)
self.verticalLayout_38.addWidget(self.pbFilesList)
self.horizontalLayout_14 = QHBoxLayout()
self.horizontalLayout_14.setObjectName(u"horizontalLayout_14")
self.horizontalLayout_14.setContentsMargins(-1, -1, -1, 0)
self.horizontalSpacer_19 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_32 = QHBoxLayout()
self.horizontalLayout_32.setObjectName(u"horizontalLayout_32")
self.horizontalLayout_32.setContentsMargins(-1, -1, -1, 10)
self.horizontalSpacer_22 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_19)
self.horizontalLayout_32.addItem(self.horizontalSpacer_22)
self.deleteAllDescriptorsBtn = QToolButton(self.posterboardPageContent)
self.deleteAllDescriptorsBtn = QToolButton(self.pbTendiesPage)
self.deleteAllDescriptorsBtn.setObjectName(u"deleteAllDescriptorsBtn")
icon23 = QIcon()
icon23.addFile(u":/icon/arrow.clockwise.svg", QSize(), QIcon.Normal, QIcon.Off)
self.deleteAllDescriptorsBtn.setIcon(icon23)
icon25 = QIcon()
icon25.addFile(u":/icon/arrow.clockwise.svg", QSize(), QIcon.Normal, QIcon.Off)
self.deleteAllDescriptorsBtn.setIcon(icon25)
self.deleteAllDescriptorsBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.deleteAllDescriptorsBtn)
self.horizontalLayout_32.addWidget(self.deleteAllDescriptorsBtn)
self.resetPRBExtBtn = QToolButton(self.posterboardPageContent)
self.resetPRBExtBtn = QToolButton(self.pbTendiesPage)
self.resetPRBExtBtn.setObjectName(u"resetPRBExtBtn")
self.resetPRBExtBtn.setIcon(icon23)
self.resetPRBExtBtn.setIcon(icon25)
self.resetPRBExtBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_14.addWidget(self.resetPRBExtBtn)
self.horizontalLayout_32.addWidget(self.resetPRBExtBtn)
self.horizontalSpacer_20 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalSpacer_23 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_14.addItem(self.horizontalSpacer_20)
self.horizontalLayout_32.addItem(self.horizontalSpacer_23)
self.verticalLayout_133.addLayout(self.horizontalLayout_14)
self.verticalLayout_38.addLayout(self.horizontalLayout_32)
self.pbPages.addWidget(self.pbTendiesPage)
self.pbVideoPage = QWidget()
self.pbVideoPage.setObjectName(u"pbVideoPage")
self.verticalLayout_39 = QVBoxLayout(self.pbVideoPage)
self.verticalLayout_39.setObjectName(u"verticalLayout_39")
self.caVideoChk = QCheckBox(self.pbVideoPage)
self.caVideoChk.setObjectName(u"caVideoChk")
self.verticalLayout_39.addWidget(self.caVideoChk)
self.reverseLoopChk = QCheckBox(self.pbVideoPage)
self.reverseLoopChk.setObjectName(u"reverseLoopChk")
self.verticalLayout_39.addWidget(self.reverseLoopChk)
self.useForegroundChk = QCheckBox(self.pbVideoPage)
self.useForegroundChk.setObjectName(u"useForegroundChk")
self.verticalLayout_39.addWidget(self.useForegroundChk)
self.horizontalLayout_30 = QHBoxLayout()
self.horizontalLayout_30.setObjectName(u"horizontalLayout_30")
self.chooseThumbBtn = QToolButton(self.pbVideoPage)
self.chooseThumbBtn.setObjectName(u"chooseThumbBtn")
self.horizontalLayout_30.addWidget(self.chooseThumbBtn)
self.chooseVideoBtn = QToolButton(self.pbVideoPage)
self.chooseVideoBtn.setObjectName(u"chooseVideoBtn")
self.horizontalLayout_30.addWidget(self.chooseVideoBtn)
self.horizontalSpacer_19 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_30.addItem(self.horizontalSpacer_19)
self.verticalLayout_143.addWidget(self.posterboardPageContent)
self.verticalLayout_39.addLayout(self.horizontalLayout_30)
self.pbVideoThumbLbl = QLabel(self.pbVideoPage)
self.pbVideoThumbLbl.setObjectName(u"pbVideoThumbLbl")
self.verticalLayout_39.addWidget(self.pbVideoThumbLbl)
self.pbVideoLbl = QLabel(self.pbVideoPage)
self.pbVideoLbl.setObjectName(u"pbVideoLbl")
self.verticalLayout_39.addWidget(self.pbVideoLbl)
self.verticalSpacer_22 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_39.addItem(self.verticalSpacer_22)
self.horizontalLayout_34 = QHBoxLayout()
self.horizontalLayout_34.setObjectName(u"horizontalLayout_34")
self.horizontalLayout_34.setContentsMargins(-1, 0, -1, -1)
self.clearSuggestedBtn = QToolButton(self.pbVideoPage)
self.clearSuggestedBtn.setObjectName(u"clearSuggestedBtn")
self.clearSuggestedBtn.setIcon(icon25)
self.clearSuggestedBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_34.addWidget(self.clearSuggestedBtn)
self.horizontalSpacer_24 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_34.addItem(self.horizontalSpacer_24)
self.verticalLayout_39.addLayout(self.horizontalLayout_34)
self.pbPages.addWidget(self.pbVideoPage)
self.verticalLayout_143.addWidget(self.pbPages)
self.pages.addWidget(self.posterboardPage)
self.advancedOptionsPage = QWidget()
@@ -2394,13 +2538,13 @@ class Ui_Nugget(object):
self.advancedOptionsPageContent = QWidget(self.advancedOptionsPage)
self.advancedOptionsPageContent.setObjectName(u"advancedOptionsPageContent")
self.advancedOptionsPageContent.setEnabled(True)
self.verticalLayout_134 = QVBoxLayout(self.advancedOptionsPageContent)
self.verticalLayout_134.setObjectName(u"verticalLayout_134")
self.verticalLayout_134.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_133 = QVBoxLayout(self.advancedOptionsPageContent)
self.verticalLayout_133.setObjectName(u"verticalLayout_133")
self.verticalLayout_133.setContentsMargins(0, 0, 0, 0)
self.label_17 = QLabel(self.advancedOptionsPageContent)
self.label_17.setObjectName(u"label_17")
self.verticalLayout_134.addWidget(self.label_17)
self.verticalLayout_133.addWidget(self.label_17)
self.line_191 = QFrame(self.advancedOptionsPageContent)
self.line_191.setObjectName(u"line_191")
@@ -2410,17 +2554,17 @@ class Ui_Nugget(object):
self.line_191.setFrameShadow(QFrame.Plain)
self.line_191.setFrameShape(QFrame.HLine)
self.verticalLayout_134.addWidget(self.line_191)
self.verticalLayout_133.addWidget(self.line_191)
self.disableOTAChk = QCheckBox(self.advancedOptionsPageContent)
self.disableOTAChk.setObjectName(u"disableOTAChk")
self.verticalLayout_134.addWidget(self.disableOTAChk)
self.verticalLayout_133.addWidget(self.disableOTAChk)
self.thermalmonitordChk = QCheckBox(self.advancedOptionsPageContent)
self.thermalmonitordChk.setObjectName(u"thermalmonitordChk")
self.verticalLayout_134.addWidget(self.thermalmonitordChk)
self.verticalLayout_133.addWidget(self.thermalmonitordChk)
self.line_181 = QFrame(self.advancedOptionsPageContent)
self.line_181.setObjectName(u"line_181")
@@ -2430,12 +2574,12 @@ class Ui_Nugget(object):
self.line_181.setFrameShadow(QFrame.Plain)
self.line_181.setFrameShape(QFrame.HLine)
self.verticalLayout_134.addWidget(self.line_181)
self.verticalLayout_133.addWidget(self.line_181)
self.enableResolutionChk = QCheckBox(self.advancedOptionsPageContent)
self.enableResolutionChk.setObjectName(u"enableResolutionChk")
self.verticalLayout_134.addWidget(self.enableResolutionChk)
self.verticalLayout_133.addWidget(self.enableResolutionChk)
self.resChangerContent = QWidget(self.advancedOptionsPageContent)
self.resChangerContent.setObjectName(u"resChangerContent")
@@ -2511,11 +2655,11 @@ class Ui_Nugget(object):
self.verticalLayout_35.addLayout(self.resolutionContent)
self.verticalLayout_134.addWidget(self.resChangerContent)
self.verticalLayout_133.addWidget(self.resChangerContent)
self.verticalSpacer_63 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_134.addItem(self.verticalSpacer_63)
self.verticalLayout_133.addItem(self.verticalSpacer_63)
self.verticalLayout_144.addWidget(self.advancedOptionsPageContent)
@@ -2609,9 +2753,9 @@ class Ui_Nugget(object):
self.horizontalLayout_7.setContentsMargins(-1, 10, -1, 0)
self.chooseGestaltBtn = QToolButton(self.verticalWidget2)
self.chooseGestaltBtn.setObjectName(u"chooseGestaltBtn")
icon24 = QIcon()
icon24.addFile(u":/icon/folder.svg", QSize(), QIcon.Normal, QIcon.Off)
self.chooseGestaltBtn.setIcon(icon24)
icon26 = QIcon()
icon26.addFile(u":/icon/folder.svg", QSize(), QIcon.Normal, QIcon.Off)
self.chooseGestaltBtn.setIcon(icon26)
self.chooseGestaltBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
self.horizontalLayout_7.addWidget(self.chooseGestaltBtn)
@@ -2776,12 +2920,6 @@ 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")
@@ -3031,9 +3169,9 @@ class Ui_Nugget(object):
" padding-right: 5px;\n"
" border-radius: 0px;\n"
"}")
icon25 = QIcon()
icon25.addFile(u":/icon/pencil.svg", QSize(), QIcon.Normal, QIcon.Off)
self.toolButton_12.setIcon(icon25)
icon27 = QIcon()
icon27.addFile(u":/icon/pencil.svg", QSize(), QIcon.Normal, QIcon.Off)
self.toolButton_12.setIcon(icon27)
self.toolButton_12.setIconSize(QSize(25, 25))
self.horizontalLayout_22.addWidget(self.toolButton_12)
@@ -3094,7 +3232,7 @@ class Ui_Nugget(object):
self.importOperationBtn = QToolButton(self.customOperationsPageContent)
self.importOperationBtn.setObjectName(u"importOperationBtn")
self.importOperationBtn.setEnabled(True)
self.importOperationBtn.setIcon(icon22)
self.importOperationBtn.setIcon(icon24)
self.importOperationBtn.setIconSize(QSize(20, 20))
self.importOperationBtn.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
@@ -3120,8 +3258,8 @@ class Ui_Nugget(object):
self.operationsCnt = QWidget(self.customOperationsPageContent)
self.operationsCnt.setObjectName(u"operationsCnt")
self.operationsCnt.setEnabled(True)
sizePolicy5.setHeightForWidth(self.operationsCnt.sizePolicy().hasHeightForWidth())
self.operationsCnt.setSizePolicy(sizePolicy5)
sizePolicy7.setHeightForWidth(self.operationsCnt.sizePolicy().hasHeightForWidth())
self.operationsCnt.setSizePolicy(sizePolicy7)
self.verticalLayout_19.addWidget(self.operationsCnt)
@@ -3150,9 +3288,9 @@ class Ui_Nugget(object):
" padding-right: 5px;\n"
" border-radius: 0px;\n"
"}")
icon26 = QIcon()
icon26.addFile(u":/icon/compass.svg", QSize(), QIcon.Normal, QIcon.Off)
self.toolButton_16.setIcon(icon26)
icon28 = QIcon()
icon28.addFile(u":/icon/compass.svg", QSize(), QIcon.Normal, QIcon.Off)
self.toolButton_16.setIcon(icon28)
self.horizontalLayout_31.addWidget(self.toolButton_16)
@@ -3195,8 +3333,8 @@ class Ui_Nugget(object):
self.exploreThemesCnt = QWidget(self.explorePage)
self.exploreThemesCnt.setObjectName(u"exploreThemesCnt")
sizePolicy5.setHeightForWidth(self.exploreThemesCnt.sizePolicy().hasHeightForWidth())
self.exploreThemesCnt.setSizePolicy(sizePolicy5)
sizePolicy7.setHeightForWidth(self.exploreThemesCnt.sizePolicy().hasHeightForWidth())
self.exploreThemesCnt.setSizePolicy(sizePolicy7)
self.verticalLayout_31.addWidget(self.exploreThemesCnt)
@@ -3262,15 +3400,13 @@ class Ui_Nugget(object):
self.importThemeFolderBtn = QToolButton(self.horizontalWidget7)
self.importThemeFolderBtn.setObjectName(u"importThemeFolderBtn")
self.importThemeFolderBtn.setIcon(icon24)
self.importThemeFolderBtn.setIcon(icon26)
self.horizontalLayout_26.addWidget(self.importThemeFolderBtn)
self.importThemeZipBtn = QToolButton(self.horizontalWidget7)
self.importThemeZipBtn.setObjectName(u"importThemeZipBtn")
icon27 = QIcon()
icon27.addFile(u":/icon/file-earmark-zip.svg", QSize(), QIcon.Normal, QIcon.Off)
self.importThemeZipBtn.setIcon(icon27)
self.importThemeZipBtn.setIcon(icon22)
self.horizontalLayout_26.addWidget(self.importThemeZipBtn)
@@ -3425,8 +3561,10 @@ class Ui_Nugget(object):
self.helpFromBtn.setText(QCoreApplication.translate("Nugget", u"With Help From", None))
self.posterRestoreBtn.setText(QCoreApplication.translate("Nugget", u"PosterRestore Team\n"
"Posterboard", None))
self.snoolieBtn.setText(QCoreApplication.translate("Nugget", u"Snoolie\n"
".aar Handling", None))
self.disfordottieBtn.setText(QCoreApplication.translate("Nugget", u"disfordottie\n"
"Clock Anim, Photos UI", None))
"Feature Flags", None))
self.mikasaBtn.setText(QCoreApplication.translate("Nugget", u"Mikasa\n"
"Quiet Daemon", None))
self.toolButton_15.setText(QCoreApplication.translate("Nugget", u"Additional Thanks", None))
@@ -3685,11 +3823,13 @@ class Ui_Nugget(object):
self.modifyPosterboardsChk.setText(QCoreApplication.translate("Nugget", u"Modify", None))
self.findPBBtn.setText(QCoreApplication.translate("Nugget", u" Find Wallpapers", None))
self.pbHelpBtn.setText(QCoreApplication.translate("Nugget", u"...", None))
self.tendiesPageBtn.setText(QCoreApplication.translate("Nugget", u" Tendies", None))
self.videoPageBtn.setText(QCoreApplication.translate("Nugget", u" Live", None))
self.pbActionLbl.setText(QCoreApplication.translate("Nugget", u"None", None))
#if QT_CONFIG(tooltip)
self.importTendiesBtn.setToolTip(QCoreApplication.translate("Nugget", u"Select a wallpaper file with the .tendies extension.", None))
#endif // QT_CONFIG(tooltip)
self.importTendiesBtn.setText(QCoreApplication.translate("Nugget", u" Import Files (.tendies)", None))
self.pbActionLbl.setText(QCoreApplication.translate("Nugget", u"None", None))
#if QT_CONFIG(tooltip)
self.deleteAllDescriptorsBtn.setToolTip(QCoreApplication.translate("Nugget", u"Clears all the wallpapers in the Collections section so that you can import more.", None))
#endif // QT_CONFIG(tooltip)
@@ -3700,6 +3840,24 @@ class Ui_Nugget(object):
"Warning: This will remove all of your wallpapers and will restrict you from adding new ones until you restore again.", None))
#endif // QT_CONFIG(tooltip)
self.resetPRBExtBtn.setText(QCoreApplication.translate("Nugget", u" Remove All Wallpapers", None))
#if QT_CONFIG(tooltip)
self.caVideoChk.setToolTip(QCoreApplication.translate("Nugget", u"Uses the CoreAnimation file to play the video (300 fps limit)\n"
"Will show up in Collections", None))
#endif // QT_CONFIG(tooltip)
self.caVideoChk.setText(QCoreApplication.translate("Nugget", u"Loop (use CoreAnimation method)", None))
self.reverseLoopChk.setText(QCoreApplication.translate("Nugget", u"Reverse on Loop", None))
self.useForegroundChk.setText(QCoreApplication.translate("Nugget", u"Make Foreground (hides clock)", None))
#if QT_CONFIG(tooltip)
self.chooseThumbBtn.setToolTip(QCoreApplication.translate("Nugget", u"Choose a photo for the wallpaper to freeze on when finished (.heic files only)", None))
#endif // QT_CONFIG(tooltip)
self.chooseThumbBtn.setText(QCoreApplication.translate("Nugget", u"Choose Freeze Frame (.HEIC)", None))
#if QT_CONFIG(tooltip)
self.chooseVideoBtn.setToolTip(QCoreApplication.translate("Nugget", u"Choose a video file for the wallpaper (.mov or .mp4)", None))
#endif // QT_CONFIG(tooltip)
self.chooseVideoBtn.setText(QCoreApplication.translate("Nugget", u"Choose Video", None))
self.pbVideoThumbLbl.setText(QCoreApplication.translate("Nugget", u"Current Thumbnail: None", None))
self.pbVideoLbl.setText(QCoreApplication.translate("Nugget", u"Current Video: None", None))
self.clearSuggestedBtn.setText(QCoreApplication.translate("Nugget", u" Clear Suggested Photos", None))
self.advancedOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Risky Options", None))
self.label_17.setText(QCoreApplication.translate("Nugget", u"Disclaimer:\n"
"\n"
@@ -3741,7 +3899,6 @@ 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)

View File

@@ -1,3 +1,6 @@
pymobiledevice3
PySide6-Essentials
PyInstaller
PyInstaller
ffmpeg
ffmpeg-python
opencv-python

View File

@@ -1,6 +1,6 @@
# Resource object code (Python 3)
# Created by: object code
# Created by: The Resource Compiler for Qt version 6.6.3
# Created by: The Resource Compiler for Qt version 6.8.2
# WARNING! All changes made in this file will be lost!
from PySide6 import QtCore
@@ -235598,7 +235598,7 @@ qt_resource_struct = b"\
\x00\x00\x04\x5c\x00\x00\x00\x00\x00\x01\x007d\x95\
\x00\x00\x01\x95\x82z\xa7E\
\x00\x00\x03|\x00\x00\x00\x00\x00\x01\x007H\xbf\
\x00\x00\x01\x95\xc8T\x85\x10\
\x00\x00\x01\x95\xc8\x82\x5c\xbb\
\x00\x00\x02\x84\x00\x00\x00\x00\x00\x01\x007*\xc4\
\x00\x00\x01\x95\x82z\xa7D\
\x00\x00\x03\xc4\x00\x00\x00\x00\x00\x01\x007O\x1a\

View File

@@ -1,4 +1,5 @@
from .tweak_classes import Tweak
from controllers.files_handler import get_bundle_files
from Sparserestore.restore import FileToRestore
from devicemanagement.constants import Version
@@ -47,10 +48,7 @@ class EligibilityTweak(Tweak):
return None
print(f"Applying EU Enabler for region \'{self.code}\'...")
# get the plists directory
try:
source_dir = path.join(sys._MEIPASS, "files/eligibility")
except:
source_dir = path.join(getcwd(), "files/eligibility")
source_dir = get_bundle_files("files/eligibility")
# start with eligibility.plist
file_path = path.join(source_dir, 'eligibility.plist')

View File

@@ -1,15 +1,16 @@
import os
import zipfile
import uuid
import re
from random import randint
from PySide6 import QtWidgets, QtCore, QtGui
from shutil import copytree
from PySide6 import QtWidgets
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
from controllers.files_handler import get_bundle_files
from controllers import video_handler
from controllers.aar.aar import wrap_in_aar
class TendieFile:
path: str
@@ -61,9 +62,14 @@ class PosterboardTweak(Tweak):
def __init__(self):
super().__init__(key=None)
self.tendies: list[TendieFile] = []
self.videoThumbnail = None
self.videoFile = None
self.loop_video = True
self.reverse_video = False
self.use_foreground = False
self.bundle_id = "com.apple.PosterBoard"
self.resetting = False
self.resetType = 0 # 0 for descriptor 1 for prb
self.resetType = 0 # 0 for descriptor, 1 for prb, 2 for suggested photos
self.structure_version = 61
def add_tendie(self, file: str):
@@ -106,6 +112,8 @@ class PosterboardTweak(Tweak):
isAdding: bool = False,
randomizeUUID: bool = False, randomizedID: int = None
):
if not os.path.isdir(curr_path):
return
for folder in sorted(os.listdir(curr_path)):
if folder.startswith('.') or folder == "__MACOSX":
continue
@@ -150,10 +158,75 @@ class PosterboardTweak(Tweak):
isAdding=True,
randomizeUUID=True
)
elif name == "video-descriptor" or name == "video-descriptors":
self.recursive_add(
files_to_restore,
os.path.join(curr_path, folder),
restore_path="/Library/Application Support/PRBPosterExtensionDataStore/61/Extensions/com.apple.PhotosUIPrivate.PhotosPosterProvider/descriptors",
isAdding=True,
randomizeUUID=True
)
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, version: str):
def create_live_photo_files(self, output_dir: str):
if self.videoFile != None and not self.loop_video:
source_dir = get_bundle_files("files/posterboard/1F20C883-EA98-4CCE-9923-0C9A01359721")
video_output_dir = os.path.join(output_dir, "video-descriptor/1F20C883-EA98-4CCE-9923-0C9A01359721")
copytree(source_dir, video_output_dir, dirs_exist_ok=True)
contents_path = os.path.join(video_output_dir, "versions/0/contents/0EFB6A0F-7052-4D24-8859-AB22BADF2E93")
# convert the video first
video_contents = None
if self.videoFile.endswith('.mov'):
# no need to convert
with open(self.videoFile, "rb") as vid:
video_contents = vid.read()
else:
# convert to mov
video_contents = video_handler.convert_to_mov(input_file=self.videoFile)
# now replace video
with open(os.path.join(contents_path, "output.layerStack/portrait-layer_settling-video.MOV"), "wb") as overriding:
overriding.write(video_contents)
aar_path = os.path.join(contents_path, "input.segmentation/segmentation.data.aar")
wrap_in_aar(get_bundle_files("files/posterboard/contents.plist"), video_contents, aar_path)
# replace the heic files
if self.videoThumbnail != None:
del video_contents
with open(self.videoThumbnail, "rb") as thumb:
thumb_contents = thumb.read()
else:
raise Exception("No thumbnail heic selected!")
# get the thumbnail from the video
thumb_contents = video_handler.get_thumbnail_from_contents(contents=video_contents)
del video_contents
to_override = ["input.segmentation/asset.resource/Adjusted.HEIC", "input.segmentation/asset.resource/proxy.heic", "output.layerStack/portrait-layer_background.HEIC"]
for file in to_override:
with open(os.path.join(contents_path, file), "wb") as overriding:
overriding.write(thumb_contents)
del thumb_contents
def create_video_loop_files(self, output_dir: str, update_label=lambda x: None):
print(f"file: {self.videoFile}, looping: {self.loop_video}")
if self.videoFile and self.loop_video:
source_dir = get_bundle_files("files/posterboard/VideoCAML")
video_output_dir = os.path.join(output_dir, "descriptor/VideoCAML")
copytree(source_dir, video_output_dir, dirs_exist_ok=True)
contents_path = os.path.join(video_output_dir, "versions/1/contents/9183.Custom-810w-1080h@2x~ipad.wallpaper")
if self.use_foreground:
# rename the foreground layer to background
bg_path = os.path.join(contents_path, "9183.Custom_Background-810w-1080h@2x~ipad.ca")
contents_path = os.path.join(contents_path, "9183.Custom_Floating-810w-1080h@2x~ipad.ca")
os.rename(contents_path, bg_path)
else:
contents_path = os.path.join(contents_path, "9183.Custom_Background-810w-1080h@2x~ipad.ca")
print(f"path at {contents_path}, creating caml")
video_handler.create_caml(video_path=self.videoFile, output_file=contents_path, auto_reverses=self.reverse_video, update_label=update_label)
def apply_tweak(self, files_to_restore: list[FileToRestore], output_dir: str, version: str, update_label=lambda x: None):
# unzip the file
if not self.enabled:
return
@@ -169,6 +242,9 @@ class PosterboardTweak(Tweak):
# resetting descriptors
file_paths.append(f"/{self.structure_version}/Extensions/com.apple.WallpaperKit.CollectionsPoster/descriptors")
file_paths.append(f"/{self.structure_version}/Extensions/com.apple.MercuryPoster/descriptors")
elif self.resetType == 2:
# resetting suggested photos
file_paths.append(f"/{self.structure_version}/Extensions/com.apple.PhotosUIPrivate.PhotosPosterProvider/descriptors")
else:
file_paths.append("")
for file_path in file_paths:
@@ -178,12 +254,17 @@ class PosterboardTweak(Tweak):
domain=f"AppDomain-{self.bundle_id}"
))
return
elif self.tendies == None or len(self.tendies) == 0:
elif (self.tendies == None or len(self.tendies) == 0) and (self.videoFile == None):
return
update_label("Generating PosterBoard Video...")
self.create_video_loop_files(output_dir, update_label=update_label)
for tendie in self.tendies:
update_label(f"Extracting {tendie.name}...")
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)
# add the files
update_label("Adding tendies...")
self.recursive_add(files_to_restore, curr_path=output_dir)
update_label("Adding other tweaks...")