use new caml method for video

This commit is contained in:
leminlimez
2025-03-26 13:29:22 -04:00
parent 88f8aca169
commit fbaf03c83f
16 changed files with 1055 additions and 34 deletions

View File

@@ -1,3 +1,5 @@
import cv2
import os
import ffmpeg
from tempfile import NamedTemporaryFile
@@ -37,3 +39,351 @@ def get_thumbnail_from_contents(contents: bytes, output_file: str = None):
inp_file.write(contents)
contents = get_thumbnail_from_mov(inp_file, output_file)
return contents
def create_caml(video_path: str, output_file: str):
cam = cv2.VideoCapture(video_path)
assets_path = os.path.join(output_file, "assets")
try:
# creating a folder named data
if not os.path.exists(assets_path):
os.makedirs(assets_path)
# 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)
frame_count = int(cam.get(cv2.CAP_PROP_FRAME_COUNT))
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">
<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'
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="Sleep PortraitUp Light">
<elements/>
</LKState>
<LKState name="Lock PortraitUp Light">
<elements/>
</LKState>
<LKState name="Home PortraitUp Light">
<elements/>
</LKState>
<LKState name="Sleep LandscapeLeft Light" basedOn="Sleep PortraitUp Light">
<elements/>
</LKState>
<LKState name="Lock LandscapeLeft Light">
<elements/>
</LKState>
<LKState name="Home LandscapeLeft Light" basedOn="Home PortraitUp Light">
<elements/>
</LKState>
<LKState name="Sleep PortraitDown Light" basedOn="Sleep PortraitUp Light">
<elements/>
</LKState>
<LKState name="Lock PortraitDown Light">
<elements/>
</LKState>
<LKState name="Home PortraitDown Light" basedOn="Home PortraitUp Light">
<elements/>
</LKState>
<LKState name="Sleep LandscapeRight Light" basedOn="Sleep PortraitUp Light">
<elements/>
</LKState>
<LKState name="Lock LandscapeRight Light">
<elements/>
</LKState>
<LKState name="Home LandscapeRight Light" basedOn="Home PortraitUp Light">
<elements/>
</LKState>
<LKState name="Sleep PortraitUp Dark" basedOn="Sleep PortraitUp Light">
<elements/>
</LKState>
<LKState name="Lock PortraitUp Dark">
<elements/>
</LKState>
<LKState name="Home PortraitUp Dark" basedOn="Home PortraitUp Light">
<elements/>
</LKState>
<LKState name="Sleep LandscapeLeft Dark" basedOn="Sleep PortraitUp Light">
<elements/>
</LKState>
<LKState name="Lock LandscapeLeft Dark">
<elements/>
</LKState>
<LKState name="Home LandscapeLeft Dark" basedOn="Home PortraitUp Light">
<elements/>
</LKState>
<LKState name="Sleep PortraitDown Dark" basedOn="Sleep PortraitUp Light">
<elements/>
</LKState>
<LKState name="Lock PortraitDown Dark">
<elements/>
</LKState>
<LKState name="Home PortraitDown Dark" basedOn="Home PortraitUp Light">
<elements/>
</LKState>
<LKState name="Sleep LandscapeRight Dark" basedOn="Sleep PortraitUp Light">
<elements/>
</LKState>
<LKState name="Lock LandscapeRight Dark">
<elements/>
</LKState>
<LKState name="Home LandscapeRight Dark" basedOn="Home PortraitUp Light">
<elements/>
</LKState>
</states>
<stateTransitions>
<LKStateTransition fromState="*" toState="Sleep PortraitUp Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Sleep PortraitUp Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock PortraitUp Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Lock PortraitUp Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home PortraitUp Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Home PortraitUp Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep LandscapeLeft Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Sleep LandscapeLeft Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock LandscapeLeft Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Lock LandscapeLeft Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home LandscapeLeft Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Home LandscapeLeft Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep PortraitDown Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Sleep PortraitDown Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock PortraitDown Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Lock PortraitDown Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home PortraitDown Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Home PortraitDown Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep LandscapeRight Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Sleep LandscapeRight Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock LandscapeRight Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Lock LandscapeRight Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home LandscapeRight Light">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Home LandscapeRight Light" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep PortraitUp Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Sleep PortraitUp Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock PortraitUp Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Lock PortraitUp Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home PortraitUp Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Home PortraitUp Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep LandscapeLeft Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Sleep LandscapeLeft Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock LandscapeLeft Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Lock LandscapeLeft Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home LandscapeLeft Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Home LandscapeLeft Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep PortraitDown Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Sleep PortraitDown Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock PortraitDown Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Lock PortraitDown Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home PortraitDown Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Home PortraitDown Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep LandscapeRight Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Sleep LandscapeRight Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock LandscapeRight Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Lock LandscapeRight Dark" toState="*">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home LandscapeRight Dark">
<elements/>
</LKStateTransition>
<LKStateTransition fromState="Home LandscapeRight Dark" toState="*">
<elements/>
</LKStateTransition>
</stateTransitions>
</CALayer>
</caml>
""")
# Release all space and windows once done
cam.release()
cv2.destroyAllWindows()
# Write the other caml
with open(os.path.join(output_file, "index.xml"), "w") as index:
index.write(f"""<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>assetManifest</key>
<string>assetManifest.caml</string>
<key>documentHeight</key>
<real>{height}</real>
<key>documentResizesToView</key>
<true/>
<key>documentWidth</key>
<real>{width}</real>
<key>dynamicGuidesEnabled</key>
<true/>
<key>geometryFlipped</key>
<false/>
<key>guidesEnabled</key>
<true/>
<key>interactiveMouseEventsEnabled</key>
<true/>
<key>interactiveShowsCursor</key>
<true/>
<key>interactiveTouchEventsEnabled</key>
<false/>
<key>loopEnd</key>
<real>0.0</real>
<key>loopStart</key>
<real>0.0</real>
<key>loopingEnabled</key>
<false/>
<key>multitouchDisablesMouse</key>
<false/>
<key>multitouchEnabled</key>
<false/>
<key>presentationMouseEventsEnabled</key>
<true/>
<key>presentationShowsCursor</key>
<true/>
<key>presentationTouchEventsEnabled</key>
<false/>
<key>rootDocument</key>
<string>main.caml</string>
<key>savesWindowFrame</key>
<false/>
<key>scalesToFitInPlayer</key>
<true/>
<key>showsTouches</key>
<true/>
<key>snappingEnabled</key>
<true/>
<key>timelineMarkers</key>
<string>[(null)]</string>
<key>touchesColor</key>
<string>1 1 0 0.8</string>
<key>unitsInPixelsInPlayer</key>
<true/>
</dict>
</plist>
""")

View File

@@ -0,0 +1 @@
PRPosterRoleLockScreen

Binary file not shown.

View File

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

View File

@@ -0,0 +1,480 @@
<?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>
<CALayer allowsEdgeAntialiasing="1" allowsGroupOpacity="1" anchorPoint="0.5 0.25" backgroundColor="1 1 1" bounds="0 0 3177 3175.5" contentsFormat="RGBA8" contentsScale="0.612339" cornerCurve="circular" hidden="0" name="Background Image Light" position="-0.5 -794.125" rasterizationScale="0.612339">
<contentsMultiplyColor opacity="0" value="1 1 1"/>
<sublayers>
<CALayer id="#1" allowsEdgeAntialiasing="1" allowsGroupOpacity="1" anchorPoint="0 0" backgroundColor="0 0 0" bounds="0 0 3177 3176.5" contentsFormat="RGBA8" contentsScale="0.612339" cornerCurve="circular" hidden="0" name="Background Image Dark" opacity="0" position="4.547473508865e-13 0" rasterizationScale="0.612339">
<contentsMultiplyColor opacity="0" value="1 1 1"/>
</CALayer>
</sublayers>
</CALayer>
</sublayers>
</CALayer>
</sublayers>
<states>
<LKState name="Sleep PortraitUp Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Lock PortraitUp Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Home PortraitUp Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Sleep LandscapeLeft Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Lock LandscapeLeft Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Home LandscapeLeft Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Sleep PortraitDown Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Lock PortraitDown Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Home PortraitDown Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Sleep LandscapeRight Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Lock LandscapeRight Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Home LandscapeRight Light">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="0"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Sleep PortraitUp Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Lock PortraitUp Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Home PortraitUp Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Sleep LandscapeLeft Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Lock LandscapeLeft Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Home LandscapeLeft Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Sleep PortraitDown Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Lock PortraitDown Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Home PortraitDown Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Sleep LandscapeRight Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Lock LandscapeRight Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
<LKState name="Home LandscapeRight Dark">
<elements>
<LKStateSetValue targetId="#1" keyPath="opacity">
<value type="integer" value="1"/>
</LKStateSetValue>
</elements>
</LKState>
</states>
<stateTransitions>
<LKStateTransition fromState="*" toState="Sleep PortraitUp Light">
<elements>
<LKStateTransitionElement id="#2" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Sleep PortraitUp Light" toState="*">
<elements>
<LKStateTransitionElement object="#2"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock PortraitUp Light">
<elements>
<LKStateTransitionElement id="#3" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Lock PortraitUp Light" toState="*">
<elements>
<LKStateTransitionElement object="#3"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home PortraitUp Light">
<elements>
<LKStateTransitionElement id="#4" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Home PortraitUp Light" toState="*">
<elements>
<LKStateTransitionElement object="#4"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep LandscapeLeft Light">
<elements>
<LKStateTransitionElement id="#5" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Sleep LandscapeLeft Light" toState="*">
<elements>
<LKStateTransitionElement object="#5"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock LandscapeLeft Light">
<elements>
<LKStateTransitionElement id="#6" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Lock LandscapeLeft Light" toState="*">
<elements>
<LKStateTransitionElement object="#6"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home LandscapeLeft Light">
<elements>
<LKStateTransitionElement id="#7" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Home LandscapeLeft Light" toState="*">
<elements>
<LKStateTransitionElement object="#7"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep PortraitDown Light">
<elements>
<LKStateTransitionElement id="#8" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Sleep PortraitDown Light" toState="*">
<elements>
<LKStateTransitionElement object="#8"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock PortraitDown Light">
<elements>
<LKStateTransitionElement id="#9" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Lock PortraitDown Light" toState="*">
<elements>
<LKStateTransitionElement object="#9"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home PortraitDown Light">
<elements>
<LKStateTransitionElement id="#10" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Home PortraitDown Light" toState="*">
<elements>
<LKStateTransitionElement object="#10"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep LandscapeRight Light">
<elements>
<LKStateTransitionElement id="#11" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Sleep LandscapeRight Light" toState="*">
<elements>
<LKStateTransitionElement object="#11"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock LandscapeRight Light">
<elements>
<LKStateTransitionElement id="#12" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Lock LandscapeRight Light" toState="*">
<elements>
<LKStateTransitionElement object="#12"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home LandscapeRight Light">
<elements>
<LKStateTransitionElement id="#13" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Home LandscapeRight Light" toState="*">
<elements>
<LKStateTransitionElement object="#13"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep PortraitUp Dark">
<elements>
<LKStateTransitionElement id="#14" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Sleep PortraitUp Dark" toState="*">
<elements>
<LKStateTransitionElement object="#14"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock PortraitUp Dark">
<elements>
<LKStateTransitionElement id="#15" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Lock PortraitUp Dark" toState="*">
<elements>
<LKStateTransitionElement object="#15"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home PortraitUp Dark">
<elements>
<LKStateTransitionElement id="#16" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Home PortraitUp Dark" toState="*">
<elements>
<LKStateTransitionElement object="#16"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep LandscapeLeft Dark">
<elements>
<LKStateTransitionElement id="#17" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Sleep LandscapeLeft Dark" toState="*">
<elements>
<LKStateTransitionElement object="#17"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock LandscapeLeft Dark">
<elements>
<LKStateTransitionElement id="#18" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Lock LandscapeLeft Dark" toState="*">
<elements>
<LKStateTransitionElement object="#18"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home LandscapeLeft Dark">
<elements>
<LKStateTransitionElement id="#19" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Home LandscapeLeft Dark" toState="*">
<elements>
<LKStateTransitionElement object="#19"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep PortraitDown Dark">
<elements>
<LKStateTransitionElement id="#20" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Sleep PortraitDown Dark" toState="*">
<elements>
<LKStateTransitionElement object="#20"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock PortraitDown Dark">
<elements>
<LKStateTransitionElement id="#21" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Lock PortraitDown Dark" toState="*">
<elements>
<LKStateTransitionElement object="#21"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home PortraitDown Dark">
<elements>
<LKStateTransitionElement id="#22" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Home PortraitDown Dark" toState="*">
<elements>
<LKStateTransitionElement object="#22"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Sleep LandscapeRight Dark">
<elements>
<LKStateTransitionElement id="#23" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Sleep LandscapeRight Dark" toState="*">
<elements>
<LKStateTransitionElement object="#23"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Lock LandscapeRight Dark">
<elements>
<LKStateTransitionElement id="#24" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Lock LandscapeRight Dark" toState="*">
<elements>
<LKStateTransitionElement object="#24"/>
</elements>
</LKStateTransition>
<LKStateTransition fromState="*" toState="Home LandscapeRight Dark">
<elements>
<LKStateTransitionElement id="#25" key="opacity" targetId="#1">
<animation type="CASpringAnimation" damping="10000" mass="1" stiffness="81" keyPath="opacity" duration="2.2" timingFunction="0.125 0 0.125 0"/>
</LKStateTransitionElement>
</elements>
</LKStateTransition>
<LKStateTransition fromState="Home LandscapeRight Dark" toState="*">
<elements>
<LKStateTransitionElement object="#25"/>
</elements>
</LKStateTransition>
</stateTransitions>
</CALayer>
</caml>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<caml xmlns="http://www.apple.com/CoreAnimation/1.0">
<MicaAssetManifest>
<modules type="NSArray"/>
</MicaAssetManifest>
</caml>

View File

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

View File

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

View File

@@ -172,6 +172,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.ui.chooseThumbBtn.clicked.connect(self.on_chooseThumbBtn_clicked)
self.ui.chooseVideoBtn.clicked.connect(self.on_chooseVideoBtn_clicked)
self.ui.clearSuggestedBtn.clicked.connect(self.on_clearSuggestedBtn_clicked)
self.ui.caVideoChk.toggled.connect(self.on_caVideoChk_toggled)
self.ui.findPBBtn.clicked.connect(self.on_findPBBtn_clicked)
self.ui.pbHelpBtn.clicked.connect(self.on_pbHelpBtn_clicked)
@@ -1005,6 +1006,8 @@ class MainWindow(QtWidgets.QMainWindow):
tweaks["PosterBoard"].resetType = 2
self.ui.pbActionLbl.setText("! Clearing Suggested Photos")
self.ui.pbActionLbl.show()
def on_caVideoChk_toggled(self, checked: bool):
tweaks["PosterBoard"].loop_video = checked
def on_findPBBtn_clicked(self):
webbrowser.open_new_tab("https://cowabun.ga/wallpapers")

View File

@@ -4275,9 +4275,21 @@ To work properly, also disable the daemon using the toggle above.</string>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
<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>
@@ -4309,14 +4321,14 @@ To work properly, also disable the daemon using the toggle above.</string>
<property name="minimumSize">
<size>
<width>0</width>
<height>35</height>
<height>25</height>
</size>
</property>
<property name="text">
<string> Tendies</string>
</property>
<property name="icon">
<iconset resource="resources.qrc">
<iconset>
<normaloff>:/icon/file-earmark-zip.svg</normaloff>:/icon/file-earmark-zip.svg</iconset>
</property>
<property name="checkable">
@@ -4332,11 +4344,17 @@ To work properly, also disable the daemon using the toggle above.</string>
</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 resource="resources.qrc">
<iconset>
<normaloff>:/icon/photo.svg</normaloff>:/icon/photo.svg</iconset>
</property>
<property name="checkable">
@@ -4381,6 +4399,13 @@ To work properly, also disable the daemon using the toggle above.</string>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="pbActionLbl">
<property name="text">
<string>None</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_18">
<property name="orientation">
@@ -4406,7 +4431,7 @@ To work properly, also disable the daemon using the toggle above.</string>
<string> Import Files (.tendies)</string>
</property>
<property name="icon">
<iconset resource="resources.qrc">
<iconset>
<normaloff>:/icon/import.svg</normaloff>:/icon/import.svg</iconset>
</property>
<property name="iconSize">
@@ -4422,13 +4447,6 @@ To work properly, also disable the daemon using the toggle above.</string>
</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">
@@ -4487,7 +4505,7 @@ To work properly, also disable the daemon using the toggle above.</string>
<string> Clear Collections Wallpapers</string>
</property>
<property name="icon">
<iconset resource="resources.qrc">
<iconset>
<normaloff>:/icon/arrow.clockwise.svg</normaloff>:/icon/arrow.clockwise.svg</iconset>
</property>
<property name="toolButtonStyle">
@@ -4506,7 +4524,7 @@ Warning: This will remove all of your wallpapers and will restrict you from addi
<string> Remove All Wallpapers</string>
</property>
<property name="icon">
<iconset resource="resources.qrc">
<iconset>
<normaloff>:/icon/arrow.clockwise.svg</normaloff>:/icon/arrow.clockwise.svg</iconset>
</property>
<property name="toolButtonStyle">
@@ -4569,7 +4587,7 @@ Warning: This will remove all of your wallpapers and will restrict you from addi
<string> Clear Suggested Photos</string>
</property>
<property name="icon">
<iconset resource="resources.qrc">
<iconset>
<normaloff>:/icon/arrow.clockwise.svg</normaloff>:/icon/arrow.clockwise.svg</iconset>
</property>
<property name="toolButtonStyle">
@@ -4592,6 +4610,13 @@ Warning: This will remove all of your wallpapers and will restrict you from addi
</item>
</layout>
</item>
<item>
<widget class="QCheckBox" name="caVideoChk">
<property name="text">
<string>Loop (use CoreAnimation method)</string>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer_22">
<property name="orientation">

View File

@@ -2250,7 +2250,12 @@ class Ui_Nugget(object):
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.pbPagePicker.sizePolicy().hasHeightForWidth())
self.pbPagePicker.setSizePolicy(sizePolicy5)
self.pbPagePicker.setMinimumSize(QSize(0, 30))
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)
@@ -2265,7 +2270,7 @@ class Ui_Nugget(object):
sizePolicy6.setVerticalStretch(0)
sizePolicy6.setHeightForWidth(self.tendiesPageBtn.sizePolicy().hasHeightForWidth())
self.tendiesPageBtn.setSizePolicy(sizePolicy6)
self.tendiesPageBtn.setMinimumSize(QSize(0, 35))
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)
@@ -2277,6 +2282,7 @@ class Ui_Nugget(object):
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)
@@ -2303,6 +2309,11 @@ class Ui_Nugget(object):
self.horizontalLayout_12 = QHBoxLayout()
self.horizontalLayout_12.setObjectName(u"horizontalLayout_12")
self.horizontalLayout_12.setContentsMargins(-1, -1, -1, 0)
self.pbActionLbl = QLabel(self.pbTendiesPage)
self.pbActionLbl.setObjectName(u"pbActionLbl")
self.horizontalLayout_12.addWidget(self.pbActionLbl)
self.horizontalSpacer_18 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_12.addItem(self.horizontalSpacer_18)
@@ -2321,11 +2332,6 @@ class Ui_Nugget(object):
self.verticalLayout_38.addLayout(self.horizontalLayout_12)
self.pbActionLbl = QLabel(self.pbTendiesPage)
self.pbActionLbl.setObjectName(u"pbActionLbl")
self.verticalLayout_38.addWidget(self.pbActionLbl)
self.line_27 = QFrame(self.pbTendiesPage)
self.line_27.setObjectName(u"line_27")
self.line_27.setStyleSheet(u"QFrame {\n"
@@ -2418,6 +2424,11 @@ class Ui_Nugget(object):
self.verticalLayout_39.addLayout(self.horizontalLayout_30)
self.caVideoChk = QCheckBox(self.pbVideoPage)
self.caVideoChk.setObjectName(u"caVideoChk")
self.verticalLayout_39.addWidget(self.caVideoChk)
self.verticalSpacer_22 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_39.addItem(self.verticalSpacer_22)
@@ -3782,11 +3793,11 @@ class Ui_Nugget(object):
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)
@@ -3802,6 +3813,7 @@ class Ui_Nugget(object):
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.caVideoChk.setText(QCoreApplication.translate("Nugget", u"Loop (use CoreAnimation method)", None))
self.advancedOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Risky Options", None))
self.label_17.setText(QCoreApplication.translate("Nugget", u"Disclaimer:\n"
"\n"

View File

@@ -2250,7 +2250,12 @@ class Ui_Nugget(object):
sizePolicy5.setVerticalStretch(0)
sizePolicy5.setHeightForWidth(self.pbPagePicker.sizePolicy().hasHeightForWidth())
self.pbPagePicker.setSizePolicy(sizePolicy5)
self.pbPagePicker.setMinimumSize(QSize(0, 30))
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)
@@ -2265,7 +2270,7 @@ class Ui_Nugget(object):
sizePolicy6.setVerticalStretch(0)
sizePolicy6.setHeightForWidth(self.tendiesPageBtn.sizePolicy().hasHeightForWidth())
self.tendiesPageBtn.setSizePolicy(sizePolicy6)
self.tendiesPageBtn.setMinimumSize(QSize(0, 35))
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)
@@ -2277,6 +2282,7 @@ class Ui_Nugget(object):
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)
@@ -2303,6 +2309,11 @@ class Ui_Nugget(object):
self.horizontalLayout_12 = QHBoxLayout()
self.horizontalLayout_12.setObjectName(u"horizontalLayout_12")
self.horizontalLayout_12.setContentsMargins(-1, -1, -1, 0)
self.pbActionLbl = QLabel(self.pbTendiesPage)
self.pbActionLbl.setObjectName(u"pbActionLbl")
self.horizontalLayout_12.addWidget(self.pbActionLbl)
self.horizontalSpacer_18 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_12.addItem(self.horizontalSpacer_18)
@@ -2321,11 +2332,6 @@ class Ui_Nugget(object):
self.verticalLayout_38.addLayout(self.horizontalLayout_12)
self.pbActionLbl = QLabel(self.pbTendiesPage)
self.pbActionLbl.setObjectName(u"pbActionLbl")
self.verticalLayout_38.addWidget(self.pbActionLbl)
self.line_27 = QFrame(self.pbTendiesPage)
self.line_27.setObjectName(u"line_27")
self.line_27.setStyleSheet(u"QFrame {\n"
@@ -2418,6 +2424,11 @@ class Ui_Nugget(object):
self.verticalLayout_39.addLayout(self.horizontalLayout_30)
self.caVideoChk = QCheckBox(self.pbVideoPage)
self.caVideoChk.setObjectName(u"caVideoChk")
self.verticalLayout_39.addWidget(self.caVideoChk)
self.verticalSpacer_22 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_39.addItem(self.verticalSpacer_22)
@@ -3782,11 +3793,11 @@ class Ui_Nugget(object):
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)
@@ -3802,6 +3813,7 @@ class Ui_Nugget(object):
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.caVideoChk.setText(QCoreApplication.translate("Nugget", u"Loop (use CoreAnimation method)", None))
self.advancedOptionsLbl.setText(QCoreApplication.translate("Nugget", u"Risky Options", None))
self.label_17.setText(QCoreApplication.translate("Nugget", u"Disclaimer:\n"
"\n"

View File

@@ -66,6 +66,7 @@ class PosterboardTweak(Tweak):
self.tendies: list[TendieFile] = []
self.videoThumbnail = None
self.videoFile = None
self.loop_video = False
self.bundle_id = "com.apple.PosterBoard"
self.resetting = False
self.resetType = 0 # 0 for descriptor, 1 for prb, 2 for suggested photos
@@ -166,7 +167,7 @@ class PosterboardTweak(Tweak):
self.recursive_add(files_to_restore, os.path.join(curr_path, folder), isAdding=False)
def create_live_photo_files(self, output_dir: str):
if self.videoFile != None:
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)
@@ -202,6 +203,16 @@ class PosterboardTweak(Tweak):
overriding.write(thumb_contents)
del thumb_contents
def create_video_loop_files(self, output_dir: str):
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/9183.Custom_Floating-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)
def apply_tweak(self, files_to_restore: list[FileToRestore], output_dir: str, windows_path_fix: bool):
@@ -227,12 +238,13 @@ class PosterboardTweak(Tweak):
domain=f"AppDomain-{self.bundle_id}"
))
return
elif (self.tendies == None or len(self.tendies) == 0) and (self.videoThumbnail == None or self.videoThumbnail == None):
elif (self.tendies == None or len(self.tendies) == 0) and (self.videoFile == None):
return
if os.name == "nt" and windows_path_fix:
# try to get past directory name limit on windows
output_dir = "\\\\?\\" + output_dir
self.create_live_photo_files(output_dir)
self.create_video_loop_files(output_dir)
for tendie in self.tendies:
zip_output = os.path.join(output_dir, str(uuid.uuid4()))
os.makedirs(zip_output)