Skip to content

Commit 9a41c31

Browse files
committed
Use images in a consistent manner
1 parent eea9494 commit 9a41c31

File tree

1 file changed

+62
-32
lines changed

1 file changed

+62
-32
lines changed

lib/srgssr.py

Lines changed: 62 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ def build_folder_menu(self, folders):
311311

312312
# TODO: check parameters
313313
def build_menu_apiv3(self, queries, mode=1000, page=1, page_hash=None,
314-
whitelist_ids=None):
314+
is_show=False, whitelist_ids=None):
315315
"""
316316
Builds a menu based on the API v3, which is supposed to be more stable
317317
@@ -320,6 +320,7 @@ def build_menu_apiv3(self, queries, mode=1000, page=1, page_hash=None,
320320
mode -- mode for the URL of the next folder
321321
page -- current page
322322
page_hash -- cursor for fetching the next items
323+
is_show -- indicates if the menu contains only shows
323324
whitelist_ids -- list of ids that should be displayed, if it is set
324325
to `None` it will be ignored
325326
"""
@@ -337,7 +338,8 @@ def build_menu_apiv3(self, queries, mode=1000, page=1, page_hash=None,
337338

338339
items.sort(key=lambda item: item['date'], reverse=True)
339340
for item in items:
340-
self.build_entry_apiv3(item, whitelist_ids=whitelist_ids)
341+
self.build_entry_apiv3(
342+
item, is_show=is_show, whitelist_ids=whitelist_ids)
341343
return
342344

343345
if page_hash:
@@ -363,7 +365,8 @@ def build_menu_apiv3(self, queries, mode=1000, page=1, page_hash=None,
363365
utils.try_get(data, 'results', list, []) or data
364366

365367
for item in items:
366-
self.build_entry_apiv3(item, whitelist_ids=whitelist_ids)
368+
self.build_entry_apiv3(
369+
item, is_show=is_show, whitelist_ids=whitelist_ids)
367370

368371
if cursor:
369372
if page:
@@ -401,7 +404,7 @@ def build_all_shows_menu(self, favids=None):
401404
the shows on that list will be build. (default: None)
402405
"""
403406
self.log('build_all_shows_menu')
404-
self.build_menu_apiv3('shows', whitelist_ids=favids)
407+
self.build_menu_apiv3('shows', is_show=True, whitelist_ids=favids)
405408

406409
def build_favourite_shows_menu(self):
407410
"""
@@ -421,7 +424,7 @@ def build_most_searched_shows_menu(self):
421424
Builds a menu containing the most searched TV shows from
422425
the SRGSSR API.
423426
"""
424-
self.build_menu_apiv3('search/most-searched-tv-shows')
427+
self.build_menu_apiv3('search/most-searched-tv-shows', is_show=True)
425428

426429
def build_newest_favourite_menu(self, page=1):
427430
"""
@@ -517,6 +520,10 @@ def build_episode_menu(self, video_id, include_segments=True,
517520
available for video_id %s' % video_id)
518521
return
519522

523+
show_image_url = utils.try_get(json_response, ['show', 'imageUrl'])
524+
show_poster_image_url = utils.try_get(
525+
json_response, ['show', 'posterImageUrl'])
526+
# TODO: remove
520527
try:
521528
banner = utils.try_get(json_response, ('show', 'bannerImageUrl'))
522529
if re.match(r'.+/\d+x\d+$', banner):
@@ -544,22 +551,32 @@ def build_episode_menu(self, video_id, include_segments=True,
544551
if include_segments:
545552
# Generate entries for the whole video and
546553
# all the segments of this video.
547-
self.build_entry(json_chapter, banner=banner)
554+
self.build_entry(
555+
json_chapter, show_image_url=show_image_url,
556+
show_poster_image_url=show_poster_image_url)
548557

549558
if audio and chapter_index == 0:
550559
for aid in json_chapter_list[1:]:
551-
self.build_entry(aid, banner=banner)
560+
self.build_entry(
561+
aid, show_image_url=show_image_url,
562+
show_poster_image_url=show_poster_image_url)
552563

553564
for segment in json_segment_list:
554-
self.build_entry(segment, banner=banner)
565+
self.build_entry(
566+
segment, show_image_url=show_image_url,
567+
show_poster_image_url=show_poster_image_url)
555568
else:
556569
if segment_option and json_segment_list:
557570
# Generate a folder for the video
558571
self.build_entry(
559-
json_chapter, banner=banner, is_folder=True)
572+
json_chapter, is_folder=True,
573+
show_image_url=show_image_url,
574+
show_poster_image_url=show_poster_image_url)
560575
else:
561576
# Generate a simple playable item for the video
562-
self.build_entry(json_chapter, banner=banner)
577+
self.build_entry(
578+
json_chapter, show_image_url=show_image_url,
579+
show_poster_image_url=show_poster_image_url)
563580
else:
564581
json_segment = None
565582
for segment in json_segment_list:
@@ -571,9 +588,11 @@ def build_episode_menu(self, video_id, include_segments=True,
571588
for video_id %s' % video_id)
572589
return
573590
# Generate a simple playable item for the video
574-
self.build_entry(json_segment, banner)
591+
self.build_entry(
592+
json_segment, show_image_url=show_image_url,
593+
show_poster_image_url=show_poster_image_url)
575594

576-
def build_entry_apiv3(self, data, whitelist_ids=None):
595+
def build_entry_apiv3(self, data, is_show=False, whitelist_ids=None):
577596
"""
578597
Builds a entry from a APIv3 JSON data entry.
579598
@@ -601,7 +620,6 @@ def build_entry_apiv3(self, data, whitelist_ids=None):
601620
kodi_date_string = date
602621
dto = utils.parse_datetime(date)
603622
kodi_date_string = dto.strftime('%Y-%m-%d') if dto else None
604-
605623
label = title or urn
606624
list_item = xbmcgui.ListItem(label=label)
607625
list_item.setInfo(
@@ -614,11 +632,17 @@ def build_entry_apiv3(self, data, whitelist_ids=None):
614632
'aired': kodi_date_string,
615633
}
616634
)
635+
if is_show:
636+
poster = show_poster_image_url or poster_image_url or \
637+
show_image_url or image_url
638+
else:
639+
poster = image_url or poster_image_url or \
640+
show_poster_image_url or show_image_url
617641
list_item.setArt({
618642
'thumb': image_url,
619-
'poster': poster_image_url or show_poster_image_url,
620-
'fanart': show_image_url,
621-
'banner': image_url or show_image_url,
643+
'poster': poster,
644+
'fanart': show_image_url or self.fanart,
645+
'banner': show_image_url or image_url,
622646
})
623647
# TODO: should this be added?
624648
list_item.setProperty('IsPlayable', 'false')
@@ -640,33 +664,37 @@ def build_menu_by_urn(self, urn):
640664
self.build_episode_menu(id)
641665
# TODO: Add 'topic'
642666

643-
def build_entry(self, json_entry, banner=None, is_folder=False,
644-
audio=False, fanart=None, urn=None):
667+
def build_entry(self, json_entry, is_folder=False, audio=False,
668+
fanart=None, urn=None, show_image_url=None,
669+
show_poster_image_url=None):
645670
"""
646671
Builds an list item for a video or folder by giving the json part,
647672
describing this video.
648673
649674
Keyword arguments:
650-
json_entry -- the part of the json describing the video
651-
banner -- URL of the show's banner (default: None)
652-
is_folder -- indicates if the item is a folder (default: False)
653-
audio -- boolean value to indicate if the entry contains
654-
audio (default: False)
655-
fanart -- fanart to be used instead of default image
656-
urn -- override urn from json_entry
675+
json_entry -- the part of the json describing the video
676+
is_folder -- indicates if the item is a folder
677+
(default: False)
678+
audio -- boolean value to indicate if the entry
679+
contains audio (default: False)
680+
fanart -- fanart to be used instead of default image
681+
urn -- override urn from json_entry
682+
show_image_url -- url of the image of the show
683+
show_poster_image_url -- url of the poster image of the show
657684
"""
658685
self.log('build_entry')
659686
title = utils.try_get(json_entry, 'title')
660687
vid = utils.try_get(json_entry, 'id')
661688
description = utils.try_get(json_entry, 'description')
662689
lead = utils.try_get(json_entry, 'lead')
663-
image = utils.try_get(json_entry, 'imageUrl')
690+
image_url = utils.try_get(json_entry, 'imageUrl')
691+
poster_image_url = utils.try_get(json_entry, 'posterImageUrl')
664692
if not urn:
665693
urn = utils.try_get(json_entry, 'urn')
666694

667695
# RTS image links have a strange appendix '/16x9'.
668696
# This needs to be removed from the URL:
669-
image = re.sub(r'/\d+x\d+', '', image)
697+
image_url = re.sub(r'/\d+x\d+', '', image_url)
670698

671699
duration = utils.try_get(
672700
json_entry, 'duration', data_type=int, default=None)
@@ -693,13 +721,15 @@ def build_entry(self, json_entry, banner=None, is_folder=False,
693721
)
694722

695723
if not fanart:
696-
fanart = image
724+
fanart = image_url
697725

726+
poster = image_url or poster_image_url or \
727+
show_poster_image_url or show_image_url
698728
list_item.setArt({
699-
'thumb': image,
700-
'poster': image,
701-
'fanart': fanart,
702-
'banner': banner,
729+
'thumb': image_url,
730+
'poster': poster,
731+
'fanart': show_image_url or fanart,
732+
'banner': show_image_url or image_url,
703733
})
704734

705735
if not audio:

0 commit comments

Comments
 (0)