mirror of
https://github.com/leminlimez/Nugget.git
synced 2025-04-08 04:23:05 +08:00
69
README.md
69
README.md
@@ -1,7 +1,9 @@
|
||||

|
||||
|
||||
# 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
0
controllers/__init__.py
Normal file
21
controllers/aar/LICENSE
Normal file
21
controllers/aar/LICENSE
Normal 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.
|
||||
0
controllers/aar/__init__.py
Normal file
0
controllers/aar/__init__.py
Normal file
62
controllers/aar/aar.py
Normal file
62
controllers/aar/aar.py
Normal 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)
|
||||
|
||||
8
controllers/files_handler.py
Normal file
8
controllers/files_handler.py
Normal 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)
|
||||
208
controllers/video_handler.py
Normal file
208
controllers/video_handler.py
Normal 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>
|
||||
""")
|
||||
@@ -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))
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
88D1F444-E2B3-43C4-BB15-790C67EDEA56
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
9183
|
||||
@@ -0,0 +1 @@
|
||||
PRPosterRoleLockScreen
|
||||
BIN
files/posterboard/VideoCAML/providerInfo.plist
Normal file
BIN
files/posterboard/VideoCAML/providerInfo.plist
Normal file
Binary file not shown.
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
BIN
files/posterboard/contents.plist
Normal file
BIN
files/posterboard/contents.plist
Normal file
Binary file not shown.
29
gui/apply_worker.py
Normal file
29
gui/apply_worker.py
Normal 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()
|
||||
@@ -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,9 +980,57 @@ 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
|
||||
|
||||
238
mainwindow_ui.py
238
mainwindow_ui.py
@@ -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"
|
||||
|
||||
607
qt/mainwindow.ui
607
qt/mainwindow.ui
@@ -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 "Unknown Part" 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">
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
pymobiledevice3
|
||||
PySide6-Essentials
|
||||
PyInstaller
|
||||
ffmpeg
|
||||
ffmpeg-python
|
||||
opencv-python
|
||||
|
||||
@@ -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\
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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...")
|
||||
|
||||
Reference in New Issue
Block a user