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
a38a83a1
Commit
a38a83a1
authored
2 years ago
by
Benoît Harrault
Browse files
Options
Downloads
Plain Diff
Merge branch '25-fix-encoding-in-track-data' into 'master'
Resolve "Fix encoding in track data" Closes
#25
See merge request
!22
parents
775844b6
089a039a
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 @
a38a83a1
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon
id=
"script.spotify.screensaver"
name=
"Spotify Screensaver"
version=
"0.0.1
6
"
version=
"0.0.1
7
"
provider-name=
"Benoît Harrault"
>
<requires>
<import
addon=
"xbmc.python"
version=
"2.25.0"
/>
...
...
This diff is collapsed.
Click to expand it.
gui.py
+
91
−
57
View file @
a38a83a1
...
...
@@ -49,6 +49,7 @@ class GUI(xbmcgui.WindowXMLDialog):
self
.
Monitor
=
MyMonitor
(
action
=
self
.
_exit
)
self
.
stop
=
False
self
.
last_spotify_event
=
''
self
.
current_track_id
=
''
def
_get_settings
(
self
):
# read addon settings
...
...
@@ -124,8 +125,9 @@ class GUI(xbmcgui.WindowXMLDialog):
event_value
=
event_split
[
2
]
if
len
(
event_split
)
>
2
else
''
if
event_type
==
'
changed
'
or
event_type
==
'
playing
'
:
self
.
_reload_images
(
event_value
)
self
.
next
=
True
if
(
self
.
current_track_id
!=
event_value
):
self
.
_reload_images
(
event_value
)
self
.
next
=
True
elif
event_type
==
'
preloading
'
:
self
.
_preload_images
(
event_value
)
elif
(
...
...
@@ -150,30 +152,44 @@ class GUI(xbmcgui.WindowXMLDialog):
self
.
log
(
'
preload images for track:
'
+
track_id
)
track_data
=
self
.
_get_track_data
(
track_id
)
track_name
=
track_data
.
get
(
'
track_name
'
)
track_artists
=
track_data
.
get
(
'
track_artists
'
)
track_image_url
=
track_data
.
get
(
'
track_image_url
'
)
notification
=
(
'
Notification(
"
Next:
"
,
"'
+
'
,
'
.
join
(
track_artists
)
+
'
-
'
+
track_name
+
'"
, 29000,
'
+
track_image_url
+
'
)
'
)
xbmc
.
executebuiltin
(
notification
)
if
track_data
is
None
:
self
.
log
(
'
failed to get next track data
'
,
xbmc
.
LOGERROR
)
else
:
track_name
=
track_data
.
get
(
'
track_name
'
)
track_artists
=
track_data
.
get
(
'
track_artists
'
)
track_image_url
=
track_data
.
get
(
'
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
).
replace
(
'"'
,
'
\"
'
)
notification
=
(
'
Notification(
"
Next:
"
,
"'
+
str
(
artists_string
)
+
'
-
'
+
str
(
track_name
)
+
'"
, 29000,
'
+
str
(
track_image_url
)
+
'
)
'
)
xbmc
.
executebuiltin
(
notification
)
def
_reload_images
(
self
,
track_id
):
self
.
log
(
'
load images for track:
'
+
track_id
)
self
.
PanelItems
=
self
.
getControl
(
101
)
self
.
PanelItems
.
reset
()
self
.
PanelItems
.
addItems
(
self
.
_build_items_list
(
track_id
))
self
.
current_track_id
=
track_id
def
_remove_images
(
self
):
self
.
log
(
'
no played track. remove images
'
)
self
.
PanelItems
=
self
.
getControl
(
101
)
self
.
PanelItems
.
reset
()
self
.
current_track_id
=
''
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
):
self
.
log
(
'
track_id: [
'
+
str
(
track_id
)
+
'
]
'
)
...
...
@@ -200,84 +216,102 @@ class GUI(xbmcgui.WindowXMLDialog):
# album/track image
album
=
data
.
get
(
'
album
'
)
if
album
is
None
:
self
.
log
(
'
failed to get album from API
'
,
xbmc
.
LOGERROR
)
self
.
log
(
json
.
dumps
(
data
),
xbmc
.
LOGERROR
)
if
json
.
dumps
(
data
)
==
'
{
"
error
"
: {
"
status
"
: 401,
"
message
"
:
"
The access token expired
"
}}
'
:
self
.
log
(
'
trying to refresh access token
'
)
self
.
_init_spotify_access_token
()
self
.
log
(
'
retry get image
'
)
self
.
_get_track_data
(
track_id
,
try_count
+
1
)
self
.
log
(
'
failed to get album from API:
'
+
json
.
dumps
(
data
),
xbmc
.
LOGERROR
)
error_string
=
(
'
{
"
error
"
: {
"
status
"
: 401,
'
+
'"
message
"
:
"
The access token expired
"
}}
'
)
if
json
.
dumps
(
data
)
==
error_string
:
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
:
self
.
log
(
'
unknown error getting image
'
,
xbmc
.
LOGERROR
)
else
:
self
.
log
(
'
ok got album from API
'
)
self
.
log
(
json
.
dumps
(
album
))
self
.
log
(
'
ok got album from API:
'
+
json
.
dumps
(
album
))
# get artists
artists
=
album
.
get
(
'
artists
'
)
if
artists
is
None
:
self
.
log
(
'
failed to get artists from API
'
,
xbmc
.
LOGERROR
)
self
.
log
(
json
.
dumps
(
album
),
xbmc
.
LOGERROR
)
self
.
log
(
'
failed to get artists from API:
'
+
json
.
dumps
(
album
),
xbmc
.
LOGERROR
)
else
:
self
.
log
(
'
ok got artists from API
'
)
self
.
log
(
json
.
dumps
(
artists
))
self
.
log
(
'
ok got artists from API:
'
+
json
.
dumps
(
artists
))
for
artist
in
artists
:
artist_name
=
artist
.
get
(
'
name
'
)
if
artist_name
is
None
:
self
.
log
(
'
failed to get artist_name from API
'
,
xbmc
.
LOGERROR
)
self
.
log
(
json
.
dumps
(
artist
),
xbmc
.
LOGERROR
)
'
failed to get artist_name from API:
'
+
json
.
dumps
(
artist
),
xbmc
.
LOGERROR
)
else
:
self
.
log
(
'
ok got artist_name from API
'
)
self
.
log
(
json
.
dumps
(
artist_name
))
track_data
[
'
track_artists
'
].
append
(
self
.
_fix_encoding
(
artist_name
))
self
.
log
(
'
ok got artist_name from API:
'
+
json
.
dumps
(
artist_name
))
track_data
[
'
track_artists
'
].
append
(
self
.
_fix_encoding
(
artist_name
))
# get images
images
=
album
.
get
(
'
images
'
)
if
images
is
None
:
self
.
log
(
'
failed to get images from API
'
,
xbmc
.
LOGERROR
)
self
.
log
(
json
.
dumps
(
album
),
xbmc
.
LOGERROR
)
self
.
log
(
'
failed to get images from API:
'
+
json
.
dumps
(
album
),
xbmc
.
LOGERROR
)
else
:
self
.
log
(
'
ok got images from API
'
)
self
.
log
(
json
.
dumps
(
images
))
self
.
log
(
'
ok got images from API:
'
+
json
.
dumps
(
images
))
image
=
images
[
0
]
if
image
is
None
:
self
.
log
(
'
failed to get image from API
'
,
xbmc
.
LOGERROR
)
self
.
log
(
json
.
dumps
(
images
),
xbmc
.
LOGERROR
)
self
.
log
(
'
failed to get image from API:
'
+
json
.
dumps
(
images
),
xbmc
.
LOGERROR
)
else
:
self
.
log
(
'
ok got image from API
'
)
self
.
log
(
json
.
dumps
(
image
))
self
.
log
(
'
ok got image from API:
'
+
json
.
dumps
(
image
))
track_image_url
=
image
.
get
(
'
url
'
)
if
track_image_url
is
None
:
self
.
log
(
'
failed to get track_image_url from API
'
,
xbmc
.
LOGERROR
)
self
.
log
(
json
.
dumps
(
image
),
xbmc
.
LOGERROR
)
'
failed to get track_image_url from API:
'
+
json
.
dumps
(
image
),
xbmc
.
LOGERROR
)
else
:
self
.
log
(
'
ok got track_image_url from API
'
)
self
.
log
(
track_image_url
)
self
.
log
(
'
ok got track_image_url from API:
'
+
track_image_url
)
track_data
[
'
track_image_url
'
]
=
track_image_url
except
Exception
as
e
:
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
def
_build_items_list
(
self
,
track_id
):
imageLST
=
[]
track_data
=
self
.
_get_track_data
(
track_id
)
track_name
=
track_data
.
get
(
'
track_name
'
)
track_artists
=
track_data
.
get
(
'
track_artists
'
)
track_image_url
=
track_data
.
get
(
'
track_image_url
'
)
imageLST
.
append
(
xbmcgui
.
ListItem
(
'
,
'
.
join
(
track_artists
)
+
'
-
'
+
track_name
,
thumbnailImage
=
track_image_url
)
)
if
track_data
is
None
:
self
.
log
(
'
failed to get next track data
'
,
xbmc
.
LOGERROR
)
else
:
track_name
=
track_data
.
get
(
'
track_name
'
)
track_artists
=
track_data
.
get
(
'
track_artists
'
)
track_image_url
=
track_data
.
get
(
'
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
...
...
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