Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
script.spotify.screensaver
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
kodi
script.spotify.screensaver
Commits
089a039a
Commit
089a039a
authored
2 years ago
by
Benoît Harrault
Browse files
Options
Downloads
Patches
Plain Diff
Fix encoding in track data, clean/improve some code, log
parent
775844b6
No related branches found
No related tags found
1 merge request
!22
Resolve "Fix encoding in track data"
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
addon.xml
+1
-1
1 addition, 1 deletion
addon.xml
gui.py
+91
-57
91 additions, 57 deletions
gui.py
with
92 additions
and
58 deletions
addon.xml
+
1
−
1
View file @
089a039a
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon
id=
"script.spotify.screensaver"
<addon
id=
"script.spotify.screensaver"
name=
"Spotify Screensaver"
name=
"Spotify Screensaver"
version=
"0.0.1
6
"
version=
"0.0.1
7
"
provider-name=
"Benoît Harrault"
>
provider-name=
"Benoît Harrault"
>
<requires>
<requires>
<import
addon=
"xbmc.python"
version=
"2.25.0"
/>
<import
addon=
"xbmc.python"
version=
"2.25.0"
/>
...
...
This diff is collapsed.
Click to expand it.
gui.py
+
91
−
57
View file @
089a039a
...
@@ -49,6 +49,7 @@ class GUI(xbmcgui.WindowXMLDialog):
...
@@ -49,6 +49,7 @@ class GUI(xbmcgui.WindowXMLDialog):
self
.
Monitor
=
MyMonitor
(
action
=
self
.
_exit
)
self
.
Monitor
=
MyMonitor
(
action
=
self
.
_exit
)
self
.
stop
=
False
self
.
stop
=
False
self
.
last_spotify_event
=
''
self
.
last_spotify_event
=
''
self
.
current_track_id
=
''
def
_get_settings
(
self
):
def
_get_settings
(
self
):
# read addon settings
# read addon settings
...
@@ -124,8 +125,9 @@ class GUI(xbmcgui.WindowXMLDialog):
...
@@ -124,8 +125,9 @@ class GUI(xbmcgui.WindowXMLDialog):
event_value
=
event_split
[
2
]
if
len
(
event_split
)
>
2
else
''
event_value
=
event_split
[
2
]
if
len
(
event_split
)
>
2
else
''
if
event_type
==
'
changed
'
or
event_type
==
'
playing
'
:
if
event_type
==
'
changed
'
or
event_type
==
'
playing
'
:
self
.
_reload_images
(
event_value
)
if
(
self
.
current_track_id
!=
event_value
):
self
.
next
=
True
self
.
_reload_images
(
event_value
)
self
.
next
=
True
elif
event_type
==
'
preloading
'
:
elif
event_type
==
'
preloading
'
:
self
.
_preload_images
(
event_value
)
self
.
_preload_images
(
event_value
)
elif
(
elif
(
...
@@ -150,30 +152,44 @@ class GUI(xbmcgui.WindowXMLDialog):
...
@@ -150,30 +152,44 @@ class GUI(xbmcgui.WindowXMLDialog):
self
.
log
(
'
preload images for track:
'
+
track_id
)
self
.
log
(
'
preload images for track:
'
+
track_id
)
track_data
=
self
.
_get_track_data
(
track_id
)
track_data
=
self
.
_get_track_data
(
track_id
)
track_name
=
track_data
.
get
(
'
track_name
'
)
track_artists
=
track_data
.
get
(
'
track_artists
'
)
if
track_data
is
None
:
track_image_url
=
track_data
.
get
(
'
track_image_url
'
)
self
.
log
(
'
failed to get next track data
'
,
xbmc
.
LOGERROR
)
else
:
notification
=
(
track_name
=
track_data
.
get
(
'
track_name
'
)
'
Notification(
"
Next:
"
,
"'
+
'
,
'
.
join
(
track_artists
)
track_artists
=
track_data
.
get
(
'
track_artists
'
)
+
'
-
'
+
track_name
track_image_url
=
track_data
.
get
(
'
track_image_url
'
)
+
'"
, 29000,
'
+
track_image_url
+
'
)
'
)
if
((
track_name
is
None
)
xbmc
.
executebuiltin
(
notification
)
or
(
track_artists
is
None
)
or
(
track_image_url
is
None
)):
self
.
log
(
'
failed to parse next track data
'
,
xbmc
.
LOGERROR
)
else
:
artists_string
=
'
,
'
.
join
(
track_artists
).
replace
(
'"'
,
'
\"
'
)
notification
=
(
'
Notification(
"
Next:
"
,
"'
+
str
(
artists_string
)
+
'
-
'
+
str
(
track_name
)
+
'"
, 29000,
'
+
str
(
track_image_url
)
+
'
)
'
)
xbmc
.
executebuiltin
(
notification
)
def
_reload_images
(
self
,
track_id
):
def
_reload_images
(
self
,
track_id
):
self
.
log
(
'
load images for track:
'
+
track_id
)
self
.
log
(
'
load images for track:
'
+
track_id
)
self
.
PanelItems
=
self
.
getControl
(
101
)
self
.
PanelItems
=
self
.
getControl
(
101
)
self
.
PanelItems
.
reset
()
self
.
PanelItems
.
reset
()
self
.
PanelItems
.
addItems
(
self
.
_build_items_list
(
track_id
))
self
.
PanelItems
.
addItems
(
self
.
_build_items_list
(
track_id
))
self
.
current_track_id
=
track_id
def
_remove_images
(
self
):
def
_remove_images
(
self
):
self
.
log
(
'
no played track. remove images
'
)
self
.
log
(
'
no played track. remove images
'
)
self
.
PanelItems
=
self
.
getControl
(
101
)
self
.
PanelItems
=
self
.
getControl
(
101
)
self
.
PanelItems
.
reset
()
self
.
PanelItems
.
reset
()
self
.
current_track_id
=
''
def
_fix_encoding
(
self
,
string
):
def
_fix_encoding
(
self
,
string
):
return
string
.
encode
(
'
utf-8
'
)
return
str
(
string
.
encode
(
'
utf-8
'
)
)
def
_get_track_data
(
self
,
track_id
,
try_count
=
1
):
def
_get_track_data
(
self
,
track_id
,
try_count
=
1
):
self
.
log
(
'
track_id: [
'
+
str
(
track_id
)
+
'
]
'
)
self
.
log
(
'
track_id: [
'
+
str
(
track_id
)
+
'
]
'
)
...
@@ -200,84 +216,102 @@ class GUI(xbmcgui.WindowXMLDialog):
...
@@ -200,84 +216,102 @@ class GUI(xbmcgui.WindowXMLDialog):
# album/track image
# album/track image
album
=
data
.
get
(
'
album
'
)
album
=
data
.
get
(
'
album
'
)
if
album
is
None
:
if
album
is
None
:
self
.
log
(
'
failed to get album from API
'
,
xbmc
.
LOGERROR
)
self
.
log
(
self
.
log
(
json
.
dumps
(
data
),
xbmc
.
LOGERROR
)
'
failed to get album from API:
'
+
json
.
dumps
(
data
),
xbmc
.
LOGERROR
)
if
json
.
dumps
(
data
)
==
'
{
"
error
"
: {
"
status
"
: 401,
"
message
"
:
"
The access token expired
"
}}
'
:
self
.
log
(
'
trying to refresh access token
'
)
error_string
=
(
'
{
"
error
"
: {
"
status
"
: 401,
'
self
.
_init_spotify_access_token
()
+
'"
message
"
:
"
The access token expired
"
}}
'
)
self
.
log
(
'
retry get image
'
)
if
json
.
dumps
(
data
)
==
error_string
:
self
.
_get_track_data
(
track_id
,
try_count
+
1
)
if
try_count
<
3
:
self
.
log
(
'
trying to refresh access token
'
)
self
.
_init_spotify_access_token
()
self
.
log
(
'
retry get image
'
)
return
self
.
_get_track_data
(
track_id
,
try_count
+
1
)
else
:
self
.
log
(
'
giving up
'
,
xbmc
.
LOGERROR
)
else
:
else
:
self
.
log
(
'
unknown error getting image
'
,
xbmc
.
LOGERROR
)
self
.
log
(
'
unknown error getting image
'
,
xbmc
.
LOGERROR
)
else
:
else
:
self
.
log
(
'
ok got album from API
'
)
self
.
log
(
'
ok got album from API:
'
+
json
.
dumps
(
album
))
self
.
log
(
json
.
dumps
(
album
))
# get artists
# get artists
artists
=
album
.
get
(
'
artists
'
)
artists
=
album
.
get
(
'
artists
'
)
if
artists
is
None
:
if
artists
is
None
:
self
.
log
(
'
failed to get artists from API
'
,
xbmc
.
LOGERROR
)
self
.
log
(
self
.
log
(
json
.
dumps
(
album
),
xbmc
.
LOGERROR
)
'
failed to get artists from API:
'
+
json
.
dumps
(
album
),
xbmc
.
LOGERROR
)
else
:
else
:
self
.
log
(
'
ok got artists from API
'
)
self
.
log
(
'
ok got artists from API:
'
+
json
.
dumps
(
artists
))
self
.
log
(
json
.
dumps
(
artists
))
for
artist
in
artists
:
for
artist
in
artists
:
artist_name
=
artist
.
get
(
'
name
'
)
artist_name
=
artist
.
get
(
'
name
'
)
if
artist_name
is
None
:
if
artist_name
is
None
:
self
.
log
(
self
.
log
(
'
failed to get artist_name from API
'
,
'
failed to get artist_name from API:
'
xbmc
.
LOGERROR
)
+
json
.
dumps
(
artist
),
xbmc
.
LOGERROR
)
self
.
log
(
json
.
dumps
(
artist
),
xbmc
.
LOGERROR
)
else
:
else
:
self
.
log
(
'
ok got artist_name from API
'
)
self
.
log
(
self
.
log
(
json
.
dumps
(
artist_name
))
'
ok got artist_name from API:
'
+
json
.
dumps
(
artist_name
))
track_data
[
'
track_artists
'
].
append
(
self
.
_fix_encoding
(
artist_name
))
track_data
[
'
track_artists
'
].
append
(
self
.
_fix_encoding
(
artist_name
))
# get images
# get images
images
=
album
.
get
(
'
images
'
)
images
=
album
.
get
(
'
images
'
)
if
images
is
None
:
if
images
is
None
:
self
.
log
(
'
failed to get images from API
'
,
xbmc
.
LOGERROR
)
self
.
log
(
self
.
log
(
json
.
dumps
(
album
),
xbmc
.
LOGERROR
)
'
failed to get images from API:
'
+
json
.
dumps
(
album
),
xbmc
.
LOGERROR
)
else
:
else
:
self
.
log
(
'
ok got images from API
'
)
self
.
log
(
'
ok got images from API:
'
+
json
.
dumps
(
images
))
self
.
log
(
json
.
dumps
(
images
))
image
=
images
[
0
]
image
=
images
[
0
]
if
image
is
None
:
if
image
is
None
:
self
.
log
(
'
failed to get image from API
'
,
xbmc
.
LOGERROR
)
self
.
log
(
self
.
log
(
json
.
dumps
(
images
),
xbmc
.
LOGERROR
)
'
failed to get image from API:
'
+
json
.
dumps
(
images
),
xbmc
.
LOGERROR
)
else
:
else
:
self
.
log
(
'
ok got image from API
'
)
self
.
log
(
'
ok got image from API:
'
+
json
.
dumps
(
image
))
self
.
log
(
json
.
dumps
(
image
))
track_image_url
=
image
.
get
(
'
url
'
)
track_image_url
=
image
.
get
(
'
url
'
)
if
track_image_url
is
None
:
if
track_image_url
is
None
:
self
.
log
(
self
.
log
(
'
failed to get track_image_url from API
'
,
'
failed to get track_image_url from API:
'
xbmc
.
LOGERROR
)
+
json
.
dumps
(
image
),
xbmc
.
LOGERROR
)
self
.
log
(
json
.
dumps
(
image
),
xbmc
.
LOGERROR
)
else
:
else
:
self
.
log
(
'
ok got track_image_url from API
'
)
self
.
log
(
self
.
log
(
track_image_url
)
'
ok got track_image_url from API:
'
+
track_image_url
)
track_data
[
'
track_image_url
'
]
=
track_image_url
track_data
[
'
track_image_url
'
]
=
track_image_url
except
Exception
as
e
:
except
Exception
as
e
:
self
.
log
(
'
failed to get track data:
'
+
str
(
e
),
xbmc
.
LOGERROR
)
self
.
log
(
'
failed to get track data:
'
+
str
(
e
),
xbmc
.
LOGERROR
)
self
.
log
(
'
track_name:
'
+
track_data
.
get
(
'
track_name
'
,
''
))
self
.
log
(
'
track_artists:
'
+
str
(
track_data
.
get
(
'
track_artists
'
,
[])))
self
.
log
(
'
track_image_url:
'
+
track_data
.
get
(
'
track_image_url
'
,
''
))
return
track_data
return
track_data
def
_build_items_list
(
self
,
track_id
):
def
_build_items_list
(
self
,
track_id
):
imageLST
=
[]
imageLST
=
[]
track_data
=
self
.
_get_track_data
(
track_id
)
track_data
=
self
.
_get_track_data
(
track_id
)
track_name
=
track_data
.
get
(
'
track_name
'
)
if
track_data
is
None
:
track_artists
=
track_data
.
get
(
'
track_artists
'
)
self
.
log
(
'
failed to get next track data
'
,
xbmc
.
LOGERROR
)
track_image_url
=
track_data
.
get
(
'
track_image_url
'
)
else
:
track_name
=
track_data
.
get
(
'
track_name
'
)
imageLST
.
append
(
track_artists
=
track_data
.
get
(
'
track_artists
'
)
xbmcgui
.
ListItem
(
track_image_url
=
track_data
.
get
(
'
track_image_url
'
)
'
,
'
.
join
(
track_artists
)
+
'
-
'
+
track_name
,
thumbnailImage
=
track_image_url
if
((
track_name
is
None
)
)
or
(
track_artists
is
None
)
)
or
(
track_image_url
is
None
)):
self
.
log
(
'
failed to parse next track data
'
,
xbmc
.
LOGERROR
)
else
:
artists_string
=
'
,
'
.
join
(
track_artists
)
imageLST
.
append
(
xbmcgui
.
ListItem
(
artists_string
+
'
-
'
+
track_name
,
thumbnailImage
=
track_image_url
)
)
return
imageLST
return
imageLST
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment