mirror of
https://github.com/leminlimez/Nugget.git
synced 2025-04-08 04:23:05 +08:00
use new caml method for video
This commit is contained in:
@@ -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>
|
||||
""")
|
||||
@@ -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.
Binary file not shown.
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,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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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")
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user