@@ -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