Initial commit — plextracks and octoprintstatus Tidbyt apps
This commit is contained in:
Executable
+11
@@ -0,0 +1,11 @@
|
||||
# plextracks
|
||||
|
||||
Display info on currently playing music from Plex server.
|
||||
|
||||
Configure with IP/Domain of a plex server, the API key, and it'll show the currently playing track and artwork.
|
||||
|
||||
Needs an authentication token / X-Plex-Token from Plex. [See how to find yours here] (https://support.plex.tv/articles/204059436-finding-an-authentication-token-x-plex-token/).
|
||||
|
||||
## Screenshot
|
||||
|
||||

|
||||
Executable
+45
@@ -0,0 +1,45 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 1000 460.9" style="enable-background:new 0 0 1000 460.9;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{fill:#FFFFFF;}
|
||||
.st1{fill:#EBAF00;}
|
||||
</style>
|
||||
<g id="plex-logo" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<g>
|
||||
<path id="path4_5_" inkscape:connector-curvature="0" d="M164.2,82.4c-39.9,0-65.5,11.5-87.2,38.5V91.2H0v366.2
|
||||
c0,0,1.4,0.7,5.4,1.4c5.4,1.4,33.8,7.4,54.7-10.1c18.2-15.5,22.3-33.8,22.3-54.1v-52.7c22.3,23.6,47.3,33.8,82.4,33.8
|
||||
c75.7,0,133.8-61.5,133.8-143.2C298.6,143.9,242.6,82.4,164.2,82.4L164.2,82.4z M149.3,306.1c-42.6,0-76.4-35.1-76.4-77.7
|
||||
c0-41.9,39.9-75.7,76.4-75.7c43.2,0,76.4,33.1,76.4,76.4S191.9,306.1,149.3,306.1z"/>
|
||||
<path id="path6_5_" inkscape:connector-curvature="0" d="M408.1,223.6c0,31.8,3.4,70.3,34.5,112.2c0.7,0.7,2,2.7,2,2.7
|
||||
c-12.8,21.6-28.4,36.5-49.3,36.5c-16.2,0-32.4-8.8-45.9-23.6c-14.2-16.2-20.9-37.2-20.9-59.5V0h79.1L408.1,223.6z"/>
|
||||
<polygon id="polygon10_5_" points="916.9,213.5 1000,91.2 904.1,91.2 869.6,141.9 "/>
|
||||
<path id="path12_5_" inkscape:connector-curvature="0" d="M869.6,316.2l16.2,22.3c15.5,24.3,35.8,36.5,59.5,36.5
|
||||
c25-0.7,42.6-22.3,49.3-30.4c0,0-12.2-10.8-27.7-29.1c-20.9-24.3-48.6-68.9-49.3-70.9L869.6,316.2z"/>
|
||||
<path id="path16_5_" inkscape:connector-curvature="0" d="M632.4,287.2c-16.2,14.9-27,23-49.3,23c-39.9,0-62.8-28.4-66.2-59.5
|
||||
h211.5c1.4-4.1,2-9.5,2-18.2c0-85.8-62.8-150-145.3-150c-78.4,0-142.6,65.5-142.6,147.3c0,81.1,64.2,145.3,144.6,145.3
|
||||
c56.1,0,104.7-31.8,131.1-87.8H632.4z M585.8,147.3c35.1,0,61.5,23,67.6,53.4H519.6C526.4,168.9,551.4,147.3,585.8,147.3
|
||||
L585.8,147.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path id="path4_4_" inkscape:connector-curvature="0" class="st0" d="M164.2,82.4c-39.9,0-65.5,11.5-87.2,38.5V91.2H0v366.2
|
||||
c0,0,1.4,0.7,5.4,1.4c5.4,1.4,33.8,7.4,54.7-10.1c18.2-15.5,22.3-33.8,22.3-54.1v-52.7c22.3,23.6,47.3,33.8,82.4,33.8
|
||||
c75.7,0,133.8-61.5,133.8-143.2C298.6,143.9,242.6,82.4,164.2,82.4L164.2,82.4z M149.3,306.1c-42.6,0-76.4-35.1-76.4-77.7
|
||||
c0-41.9,39.9-75.7,76.4-75.7c43.2,0,76.4,33.1,76.4,76.4S191.9,306.1,149.3,306.1z"/>
|
||||
<path id="path6_4_" inkscape:connector-curvature="0" class="st0" d="M408.1,223.6c0,31.8,3.4,70.3,34.5,112.2
|
||||
c0.7,0.7,2,2.7,2,2.7c-12.8,21.6-28.4,36.5-49.3,36.5c-16.2,0-32.4-8.8-45.9-23.6c-14.2-16.2-20.9-37.2-20.9-59.5V0h79.1
|
||||
L408.1,223.6z"/>
|
||||
<polygon id="polygon10_4_" class="st0" points="916.9,213.5 1000,91.2 904.1,91.2 869.6,141.9 "/>
|
||||
<path id="path12_4_" inkscape:connector-curvature="0" class="st0" d="M869.6,316.2l16.2,22.3c15.5,24.3,35.8,36.5,59.5,36.5
|
||||
c25-0.7,42.6-22.3,49.3-30.4c0,0-12.2-10.8-27.7-29.1c-20.9-24.3-48.6-68.9-49.3-70.9L869.6,316.2z"/>
|
||||
<path id="path16_4_" inkscape:connector-curvature="0" class="st0" d="M632.4,287.2c-16.2,14.9-27,23-49.3,23
|
||||
c-39.9,0-62.8-28.4-66.2-59.5h211.5c1.4-4.1,2-9.5,2-18.2c0-85.8-62.8-150-145.3-150c-78.4,0-142.6,65.5-142.6,147.3
|
||||
c0,81.1,64.2,145.3,144.6,145.3c56.1,0,104.7-31.8,131.1-87.8H632.4z M585.8,147.3c35.1,0,61.5,23,67.6,53.4H519.6
|
||||
C526.4,168.9,551.4,147.3,585.8,147.3L585.8,147.3z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="Layer_2">
|
||||
<polygon id="polygon8" class="st1" points="796.6,229.1 703.4,91.2 799.3,91.2 891.9,229.1 799.3,366.2 703.4,366.2 "/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 1017 B |
Executable
+22
@@ -0,0 +1,22 @@
|
||||
iVBORw0KGgoAAAANSUhEUgAAADAAAAAXCAYAAABNq8wJAAAACXBIWXMAAACIAAAA
|
||||
iAHr3JJSAAADq0lEQVRYhd1XX0iTURS/i0XF0i0MFEYoKkj2Insq0LGnvURgsPDF
|
||||
B5FeehjYXgrsUWtCmriH+aBiKFFusLk39cU2JoG5fDKFMRxM3Jhkm20LFn3xG99d
|
||||
d9frPqdC2oHLvnPPuefPPeeec0YkSTrxGhsb65MYWFtb2z+NvJOsS+SCw//tgMPh
|
||||
6BsZGek6K2WQBZlnJQ+gDoVC+xSJxWLb0Wj0rdlsftnS0nLNarVS0vtAIBBfXV3t
|
||||
s9lsHypRAIPb2tqedXR01NlsNrr9ZmtrKxcMBt/19vY+3vOqGggh09zR9ZudUtHZ
|
||||
wcHBeqPR+Emj0Vyle5lM5idhH2EqlfotKcDk5OQEfWxKj1jmLQt+v393YGCgPukh
|
||||
3qSHSNzqpLLm5+e/8HJmZmY8REmBCIaHh7uUHDiO8RTgRNJDdEkP+c45AFzH62F1
|
||||
Cd9AOp2WfD7fusvl+hgKhb7zdJPJNF4ubRBui8XSy+4hBR0Ox1MsyGZpSC/ft8nX
|
||||
hJAeTpQWqZVOpz2wibVvaWnpQQHhPdvc3MwipEqpYLfb24+KAELL3zBf43mZ0Iv9
|
||||
o1LJ6XS+oryy/IIcNX/zbrf7dn9/f5Tdx0NbXFw0mc3mpuLVaLX38/l8QhSB1tZW
|
||||
E4vncrmMy+VaZveqqqoK+qqrq1XAUTRkEqKwLd8+hWlL3ZOGQOBODx5xd3f3Q0oo
|
||||
cSAcDqd44ylEIhEXIeQ5xWtqau7F43GviLe2tvY6i8uON4l4WUDFslql0T2vCk54
|
||||
GFIhlfx+/10gBoOhSDhXjSyfz+8q8ajV6lslOIs0Nzdr8QBFUWhsbHzE4gcHB2Ge
|
||||
R6PRXMFvIpH4odfrdXR/fHzcflS6sYAes+dV6QQ9IYXUMhqNX+U+cIMSSiKAfESz
|
||||
gBPs/tTU1ASb/4BkMskrKeTx0NBQ+8bGRkm+I92sVusou/iz2Wz2s/w5zeU/oMcd
|
||||
dxaaocFg0M3Ozv5NL1FdjsVieTSOubm5ZbmyCGuwqD7jDKoY3xRRicCPaiKSCRqq
|
||||
jaACeXl5+Ka96FSNTP4tAQiHwkoa2cLCQrjSRoZLhp5DDpQbJ0BjRwks0W1SnuM4
|
||||
AePl+r9cbpRAZPmziOohB3CrIqOgCM1L9KcDhlLH5ZmlSMMZnOUvBjrk5gTj22QH
|
||||
2DXK62HnITQ+2CpKoeIBhI6mi9Liu7dogec4fJXoUhUslmFnZ+eXXq+/rFTuzhOU
|
||||
lNGVlZXgRTKesA5gDopEIi/+rTmVgxrjLT4wsh41B51bIIT8AdWtg7+vr6x4AAAA
|
||||
AElFTkSuQmCC
|
||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 104 B |
Executable
+29
@@ -0,0 +1,29 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<MediaContainer size="2">
|
||||
<Video addedAt="1668614720" art="/library/metadata/14311/art/1675672329" contentRating="TV-Y" duration="1282048" grandparentArt="/library/metadata/14311/art/1675672329" grandparentGuid="plex://show/5d9c07ebffd9ef001e98897d" grandparentKey="/library/metadata/14311" grandparentRatingKey="14311" grandparentTheme="/library/metadata/14311/theme/1675672329" grandparentThumb="/library/metadata/14311/thumb/1675672329" grandparentTitle="Wild Kratts" guid="plex://episode/5d9c0ab4e98e47001eb2854c" index="8" key="/library/metadata/14326" lastViewedAt="1673956075" librarySectionID="4" librarySectionKey="/library/sections/4" librarySectionTitle="Kid's TV Shows" originallyAvailableAt="2018-04-25" parentGuid="plex://season/602e5892de471d002d058a97" parentIndex="5" parentKey="/library/metadata/14463" parentRatingKey="14463" parentThumb="/library/metadata/14463/thumb/1668629745" parentTitle="Season 5" parentYear="2017" ratingKey="14326" sessionKey="282" summary="The Wild Kratts go to India to find the difference between African and Asian Elephants. But find out how complex these creatures really are. Meanwhile Paisley Paver plans on using the elephants as beasts of burden." thumb="/library/metadata/14326/thumb/1668629745" title="Elephant Brains" type="episode" updatedAt="1668629745" viewCount="1" viewOffset="435000">
|
||||
<Media id="14860" videoProfile="high" audioChannels="2" audioCodec="aac" bitrate="2132" container="mpegts" duration="1282048" height="720" protocol="hls" videoCodec="h264" videoFrameRate="PAL" videoResolution="720p" width="1280" selected="1">
|
||||
<Part id="14872" videoProfile="high" bitrate="2132" container="mpegts" duration="1282048" height="720" protocol="hls" width="1280" decision="transcode" selected="1">
|
||||
<Stream bitDepth="8" bitrate="1874" chromaLocation="left" chromaSubsampling="4:2:0" codec="h264" codedHeight="720" codedWidth="1280" colorPrimaries="bt709" colorRange="tv" colorSpace="bt709" colorTrc="bt709" default="1" displayTitle="720p (H.264)" extendedDisplayTitle="720p (H.264)" frameRate="25" hasScalingMatrix="0" height="720" id="34716" level="31" profile="high" refFrames="4" scanType="progressive" streamType="1" width="1280" decision="copy" location="segments-av" />
|
||||
<Stream bitrate="258" bitrateMode="cbr" channels="2" codec="aac" default="1" displayTitle="English (EAC3 Stereo)" extendedDisplayTitle="English (EAC3 Stereo)" id="34717" language="English" languageCode="eng" languageTag="en" selected="1" streamType="2" decision="transcode" location="segments-av" />
|
||||
</Part>
|
||||
</Media>
|
||||
<User id="120023380" thumb="https://plex.tv/users/64421f23801d397a/avatar?c=1641615221" title="Lochlan" />
|
||||
<Player address="192.168.1.1" device="Roku Streaming Stick+" machineIdentifier="26a71c2eb01658ed195e3531912ca133" model="3810X" platform="Roku" platformVersion="11.x" product="Plex for Roku" profile="Roku-7.x" remotePublicAddress="73.108.236.191" state="paused" title="Roku Streaming Stick+" vendor="Roku" version="7.0.24.8154-127760991-Plex" local="1" relayed="0" secure="1" userID="120023380" />
|
||||
<Session id="26a71c2eb01658ed195e3531912ca133" bandwidth="3470" location="lan" />
|
||||
<TranscodeSession key="/transcode/sessions/e6b9be45-9180-488a-bacb-e519c207dc42-33456" throttled="1" complete="1" progress="99.900001525878906" size="-22" speed="0" error="0" duration="1282048" remaining="23" context="streaming" sourceVideoCodec="h264" sourceAudioCodec="eac3" videoDecision="copy" audioDecision="transcode" protocol="hls" container="mpegts" videoCodec="h264" audioCodec="aac" audioChannels="2" width="1280" height="720" transcodeHwRequested="0" transcodeHwFullPipeline="0" timeStamp="1675857818.7497921" maxOffsetAvailable="1282" minOffsetAvailable="0" />
|
||||
</Video>
|
||||
<Track addedAt="1675312792" art="/library/metadata/3273/art/1664093924" duration="220466" grandparentArt="/library/metadata/3273/art/1664093924" grandparentGuid="plex://artist/5d07bbfc403c6402904a5ec9" grandparentKey="/library/metadata/3273" grandparentRatingKey="3273" grandparentThumb="/library/metadata/3273/thumb/1664093924" grandparentTitle="Various Artists" guid="plex://track/5d07cf70403c6402901c4b78" index="17" key="/library/metadata/18104" lastViewedAt="1675434032" librarySectionID="5" librarySectionKey="/library/sections/5" librarySectionTitle="Music" originalTitle="Jamiroquai" parentGuid="plex://album/5d07c449403c6402909e4875" parentIndex="1" parentKey="/library/metadata/18087" parentRatingKey="18087" parentStudio="Global Television" parentThumb="/library/metadata/18087/thumb/1675312794" parentTitle="Fresh Hits 1997" parentYear="1997" ratingCount="234735" ratingKey="18104" sessionKey="288" thumb="/library/metadata/18087/thumb/1675312794" title="Alright" type="track" updatedAt="1675312794" viewCount="1" viewOffset="0">
|
||||
<Media audioChannels="2" audioCodec="flac" bitrate="836" container="flac" duration="220466" id="19078">
|
||||
<Part container="flac" duration="220466" file="/data/music/albums/Various Artists/Fresh Hits 1997 (1997) [CD] {RADCD70}/1-17 - Jamiroquai - Alright.flac" hasThumbnail="1" id="19091" key="/library/parts/19091/1675259303/file.flac" size="23104955">
|
||||
<Stream albumGain="-9.79" albumPeak="0.988556" albumRange="7.718206" audioChannelLayout="stereo" bitDepth="16" bitrate="836" channels="2" codec="flac" displayTitle="FLAC (Stereo)" extendedDisplayTitle="FLAC (Stereo)" gain="-9.79" id="45504" index="0" loudness="-11.69" lra="2.47" peak="0.988556" samplingRate="44100" selected="1" streamType="2" />
|
||||
<Stream codec="lrc" displayTitle="LRC (External)" extendedDisplayTitle="LRC (External)" format="lrc" id="45556" key="/library/streams/45556" minLines="3" provider="com.plexapp.agents.lyricfind" streamType="4" timed="1" />
|
||||
<Stream codec="txt" displayTitle="TXT (External)" extendedDisplayTitle="TXT (External)" format="txt" id="45557" key="/library/streams/45557" provider="com.plexapp.agents.lyricfind" streamType="4" />
|
||||
</Part>
|
||||
</Media>
|
||||
<Mood filter="mood=1050" id="1050" tag="Romantic" />
|
||||
<Mood filter="mood=3323" id="3323" tag="Happy" />
|
||||
<Mood filter="mood=3084" id="3084" tag="Rousing" />
|
||||
<User id="1" thumb="https://plex.tv/users/d33ea664a7625f56/avatar?c=1656035690" title="poprhythm" />
|
||||
<Player address="192.168.1.1" device="Windows" machineIdentifier="30da171f-406b-413b-a764-f22e3d78ab90" platform="Windows" platformVersion="10.0.19045" product="Plexamp" profile="Windows" remotePublicAddress="73.108.236.191" state="playing" title="Neptune" version="4.6.1" local="1" relayed="0" secure="1" userID="1" />
|
||||
</Track>
|
||||
</MediaContainer>
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
curl http://192.168.1.3:32400/status/sessions?X-Plex-Token=1i5siHsw4toihxixjRKh
|
||||
#| jq .MediaContainer.size
|
||||
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
#pixlet serve plex_info.star
|
||||
|
||||
pixlet render plex_info.star
|
||||
#pixlet push --installation-id plexinfo "courteously-verified-upward-arapaima-2c1" plex_info.webp
|
||||
pixlet push courteously-verified-upward-arapaima-2c1 plex_info.star -i plexinfo
|
||||
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
---
|
||||
id: plextracks
|
||||
name: Plex Tracks
|
||||
summary: Display info on currently playing music from Plex server
|
||||
desc: Configure with IP/Domain of a plex server, the API key, and it'll show the currently playing track and artwork
|
||||
author: poprhythm
|
||||
fileName: plextracks.star
|
||||
packageName: plextracks
|
||||
Executable
+216
@@ -0,0 +1,216 @@
|
||||
"""
|
||||
Applet: Plex Tracks
|
||||
Summary: Display info on currently playing music from Plex server
|
||||
Description: Configure with IP/Domain of a plex server, the API key, and it'll show the currently playing track and artwork
|
||||
Author: poprhythm
|
||||
"""
|
||||
|
||||
load("render.star", "render")
|
||||
load("schema.star", "schema")
|
||||
load("encoding/base64.star", "base64")
|
||||
load("http.star", "http")
|
||||
load("xpath.star", "xpath")
|
||||
load("random.star", "random")
|
||||
load("cache.star", "cache")
|
||||
|
||||
DEFAULT_ADDR = "timetogetill.asuscomm.com"
|
||||
DEFAULT_PORT = "32400"
|
||||
DEFAULT_PLEXTOKEN = "1i5siHsw4toihxixjRKh"
|
||||
DEFAULT_PLAYER = ""
|
||||
CACHE_TTL = 45
|
||||
|
||||
def main(config):
|
||||
addr = config.get("addr", DEFAULT_ADDR)
|
||||
port = config.get("port", DEFAULT_PORT)
|
||||
token = config.get("token", DEFAULT_PLEXTOKEN)
|
||||
player = config.get("player", None)
|
||||
|
||||
trackInfo = update_plex_status(addr, port, token, player)
|
||||
|
||||
if trackInfo == None:
|
||||
quote = SILENCE_QUOTES[random.number(0,len(SILENCE_QUOTES))]
|
||||
return render.Root(
|
||||
render.Column([
|
||||
render.Image(src=PLEX_LOGO_W48),
|
||||
render.Marquee(render.Text(quote, font="tom-thumb"), width=64)
|
||||
],
|
||||
expanded=True,
|
||||
main_align="center",
|
||||
cross_align="center"
|
||||
)
|
||||
)
|
||||
|
||||
if "status_code" in trackInfo:
|
||||
return render.Root (
|
||||
render.Column ([
|
||||
render.Text("Plex request failed:"),
|
||||
render.Marquee(
|
||||
render.Text(trackInfo["status_code"]),
|
||||
width = 64,
|
||||
)]
|
||||
)
|
||||
)
|
||||
|
||||
return render.Root(
|
||||
child = render.Box(
|
||||
render.Row([
|
||||
render.Image(src=trackInfo["thumbnail"], width = 32, height = 32),
|
||||
render.Column([
|
||||
render.Image(src=PLEX_LOGO_H8),
|
||||
render.Marquee(
|
||||
render.Text(trackInfo["title"]),
|
||||
width = 32,
|
||||
),
|
||||
render.Marquee(
|
||||
render.Text(trackInfo["artist"]),
|
||||
width = 32,
|
||||
),
|
||||
render.Marquee(
|
||||
render.Text(trackInfo["album"]),
|
||||
width = 32,
|
||||
)
|
||||
]
|
||||
)
|
||||
],
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
def update_plex_status(addr, port, token, player):
|
||||
|
||||
if cache.get("title") != None:
|
||||
return {
|
||||
"title": cache.get("title"),
|
||||
"artist": cache.get("artist"),
|
||||
"album": cache.get("album"),
|
||||
"thumbnail": base64.decode(cache.get("thumbnail"))
|
||||
}
|
||||
|
||||
status_url = "http://%s:%s/status/sessions?X-Plex-Token=%s" % (addr,port,token)
|
||||
|
||||
rep = http.get(status_url)
|
||||
|
||||
if rep.status_code != 200:
|
||||
print("Plex request failed with status %d", rep.status_code)
|
||||
return {"status_code": rep.status_code}
|
||||
|
||||
xml = rep.body()
|
||||
xp = xpath.loads(xml)
|
||||
|
||||
query = "//Track"
|
||||
if not(player == None or not player):
|
||||
query += "[contains(Player/@title,'%s')]" % player
|
||||
|
||||
t = xp.query_node(query)
|
||||
|
||||
if t == None:
|
||||
return None
|
||||
|
||||
title = t.query("@title")
|
||||
|
||||
artist = t.query("@originalTitle")
|
||||
if artist == None:
|
||||
artist = t.query("@grandparentTitle")
|
||||
album = t.query("@parentTitle")
|
||||
else:
|
||||
album = t.query("@parentTitle")
|
||||
|
||||
#print("%s - %s" % (artist, title))
|
||||
|
||||
thumbnail_path = t.query("@thumb")
|
||||
thumbnail_url = "http://%s:%s%s?X-Plex-Token=%s" % (addr,port,thumbnail_path,token)
|
||||
thumbnail_rep = http.get(thumbnail_url)
|
||||
|
||||
trackInfo = {
|
||||
"title": title,
|
||||
"artist": artist,
|
||||
"album": album,
|
||||
"thumbnail": thumbnail_rep.body()
|
||||
}
|
||||
|
||||
cache.set("title", trackInfo["title"], CACHE_TTL)
|
||||
cache.set("artist", trackInfo["artist"], CACHE_TTL)
|
||||
cache.set("album", trackInfo["album"], CACHE_TTL)
|
||||
cache.set("thumbnail", base64.encode(trackInfo["thumbnail"]), CACHE_TTL)
|
||||
|
||||
return trackInfo
|
||||
|
||||
def get_schema():
|
||||
return schema.Schema(
|
||||
version = "1",
|
||||
fields = [
|
||||
schema.Text(
|
||||
id = "addr",
|
||||
name = "IP/Domain",
|
||||
desc = "IP or Domain of Plex Server",
|
||||
icon = "location-dot",
|
||||
default = DEFAULT_ADDR,
|
||||
),
|
||||
schema.Text(
|
||||
id = "port",
|
||||
name = "Port Number",
|
||||
desc = "Port on which Plex Server is hosted",
|
||||
icon = "location-dot",
|
||||
default = DEFAULT_PORT,
|
||||
),
|
||||
schema.Text(
|
||||
id = "token",
|
||||
name = "X-Plex-Token",
|
||||
desc = "Token for Plex API commands",
|
||||
icon = "hashtag",
|
||||
default = DEFAULT_PLEXTOKEN,
|
||||
),
|
||||
schema.Text(
|
||||
id = "player",
|
||||
name = "Player Name to Display",
|
||||
desc = "Leave blank for first match",
|
||||
icon = "mp3-player",
|
||||
default = DEFAULT_PLAYER,
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
PLEX_LOGO_H8 = base64.decode("""
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAICAYAAACYhf2vAAAAeElEQVQ4T2N
|
||||
kIAH8BwKQckYgIEEbXqUoBiFbAGMjW4jNAcjqUNQe4oM41u4TTjvA8sjOI2
|
||||
QpugMI8tEcgc0DeF0HcxxIIyjYcVmIHsbIUfQf6ghsoUH1EEB3CMxyWDQQH
|
||||
QJ4fYSWEGmSBqiZygnlFow0QE/LQY4DALpxgAnhQU15AAAAAElFTkSuQmCC
|
||||
""")
|
||||
|
||||
PLEX_LOGO_W48 = base64.decode("""
|
||||
iVBORw0KGgoAAAANSUhEUgAAADAAAAAXCAYAAABNq8wJAAAACXBIWXMAAACIAAAA
|
||||
iAHr3JJSAAADq0lEQVRYhd1XX0iTURS/i0XF0i0MFEYoKkj2Insq0LGnvURgsPDF
|
||||
B5FeehjYXgrsUWtCmriH+aBiKFFusLk39cU2JoG5fDKFMRxM3Jhkm20LFn3xG99d
|
||||
d9frPqdC2oHLvnPPuefPPeeec0YkSTrxGhsb65MYWFtb2z+NvJOsS+SCw//tgMPh
|
||||
6BsZGek6K2WQBZlnJQ+gDoVC+xSJxWLb0Wj0rdlsftnS0nLNarVS0vtAIBBfXV3t
|
||||
s9lsHypRAIPb2tqedXR01NlsNrr9ZmtrKxcMBt/19vY+3vOqGggh09zR9ZudUtHZ
|
||||
wcHBeqPR+Emj0Vyle5lM5idhH2EqlfotKcDk5OQEfWxKj1jmLQt+v393YGCgPukh
|
||||
3qSHSNzqpLLm5+e/8HJmZmY8REmBCIaHh7uUHDiO8RTgRNJDdEkP+c45AFzH62F1
|
||||
Cd9AOp2WfD7fusvl+hgKhb7zdJPJNF4ubRBui8XSy+4hBR0Ox1MsyGZpSC/ft8nX
|
||||
hJAeTpQWqZVOpz2wibVvaWnpQQHhPdvc3MwipEqpYLfb24+KAELL3zBf43mZ0Iv9
|
||||
o1LJ6XS+oryy/IIcNX/zbrf7dn9/f5Tdx0NbXFw0mc3mpuLVaLX38/l8QhSB1tZW
|
||||
E4vncrmMy+VaZveqqqoK+qqrq1XAUTRkEqKwLd8+hWlL3ZOGQOBODx5xd3f3Q0oo
|
||||
cSAcDqd44ylEIhEXIeQ5xWtqau7F43GviLe2tvY6i8uON4l4WUDFslql0T2vCk54
|
||||
GFIhlfx+/10gBoOhSDhXjSyfz+8q8ajV6lslOIs0Nzdr8QBFUWhsbHzE4gcHB2Ge
|
||||
R6PRXMFvIpH4odfrdXR/fHzcflS6sYAes+dV6QQ9IYXUMhqNX+U+cIMSSiKAfESz
|
||||
gBPs/tTU1ASb/4BkMskrKeTx0NBQ+8bGRkm+I92sVusou/iz2Wz2s/w5zeU/oMcd
|
||||
dxaaocFg0M3Ozv5NL1FdjsVieTSOubm5ZbmyCGuwqD7jDKoY3xRRicCPaiKSCRqq
|
||||
jaACeXl5+Ka96FSNTP4tAQiHwkoa2cLCQrjSRoZLhp5DDpQbJ0BjRwks0W1SnuM4
|
||||
AePl+r9cbpRAZPmziOohB3CrIqOgCM1L9KcDhlLH5ZmlSMMZnOUvBjrk5gTj22QH
|
||||
2DXK62HnITQ+2CpKoeIBhI6mi9Liu7dogec4fJXoUhUslmFnZ+eXXq+/rFTuzhOU
|
||||
lNGVlZXgRTKesA5gDopEIi/+rTmVgxrjLT4wsh41B51bIIT8AdWtg7+vr6x4AAAA
|
||||
AElFTkSuQmCC
|
||||
""")
|
||||
|
||||
SILENCE_QUOTES = [
|
||||
"Listen to silence. It has so much to say. Rumi",
|
||||
"Silence is the sleep that nourishes wisdom. Francis Bacon",
|
||||
"Noise creates illusions. Silence brings truth. Maxime Lagacé",
|
||||
"Speech is silver, silence is golden. Thomas Carlyle",
|
||||
"Silence is a source of great strength. Lao Tzu",
|
||||
"Silence is sometimes the best answer. Dalai Lama",
|
||||
"Silence is a true friend who never betrays. Confucius",
|
||||
"The truth hurts, but silence kills. Mark Twain",
|
||||
"To hear, one must be silent. Ursula K. Le Guin",
|
||||
"Sound is our mind, silence is our being. Osho"
|
||||
]
|
||||
Executable
BIN
Binary file not shown.
|
After Width: | Height: | Size: 202 KiB |
Reference in New Issue
Block a user