@@ -906,10 +906,68 @@ def build_date_menu(self, date_string):
906
906
"""
907
907
self .log (f'build_date_menu, date_string = { date_string } ' )
908
908
909
- # API v3 use the date in sortable format, i.e. year first
909
+ # Note: We do not use `build_menu_apiv3` here because the structure
910
+ # of the response is quite different from other typical responses.
911
+ # If it is possible to integrate this into `build_menu_apiv3` without
912
+ # too many changes, it might be a good idea.
913
+ mode = 60
910
914
elems = date_string .split ('-' )
911
- query = f'videos-by-date/{ elems [2 ]} -{ elems [1 ]} -{ elems [0 ]} '
912
- return self .build_menu_apiv3 (query )
915
+ query = (f'tv-program-guide?date={ elems [2 ]} -{ elems [1 ]} -{ elems [0 ]} '
916
+ f'&businessUnits={ self .bu } ' )
917
+ js = json .loads (self .open_url (self .apiv3_url + query ))
918
+ data = utils .try_get (js , 'data' , list , [])
919
+ for item in data :
920
+ if not isinstance (item , dict ):
921
+ continue
922
+ channel = utils .try_get (
923
+ item , 'channel' , data_type = dict , default = {})
924
+ name = utils .try_get (channel , 'title' )
925
+ if not name :
926
+ continue
927
+ image = utils .try_get (channel , 'imageUrl' )
928
+ list_item = xbmcgui .ListItem (label = name )
929
+ list_item .setProperty ('IsPlayable' , 'false' )
930
+ list_item .setArt ({'thumb' : image , 'fanart' : image })
931
+ channel_date_id = name .replace (' ' , '-' ) + '_' + date_string
932
+ cache_id = self .addon_id + '.' + channel_date_id
933
+ programs = utils .try_get (
934
+ item , 'programList' , data_type = list , default = [])
935
+ self .cache .set (cache_id , programs )
936
+ self .log (f'build_date_menu: Cache set with id = { cache_id } ' )
937
+ url = self .build_url (mode = mode , name = cache_id )
938
+ xbmcplugin .addDirectoryItem (
939
+ handle = self .handle , url = url , listitem = list_item , isFolder = True )
940
+
941
+ def build_specific_date_menu (self , cache_id ):
942
+ """
943
+ Builds a list of available videos from a specific channel
944
+ and specific date given by cache_id from `build_date_menu`.
945
+
946
+ Keyword arguments:
947
+ cache_id -- cache id set by `build_date_menu`
948
+ """
949
+ self .log (f'build_specific_date_menu, cache_id = { cache_id } ' )
950
+ program_list = self .cache .get (cache_id )
951
+
952
+ # videos might be listed multiple times, but we only
953
+ # want them a single time:
954
+ already_seen = set ()
955
+ for pitem in program_list :
956
+ media_urn = utils .try_get (pitem , 'mediaUrn' )
957
+ if not media_urn or 'video' not in media_urn :
958
+ continue
959
+ if media_urn in already_seen :
960
+ continue
961
+ already_seen .add (media_urn )
962
+ name = utils .try_get (pitem , 'title' )
963
+ image = utils .try_get (pitem , 'imageUrl' )
964
+ subtitle = utils .try_get (pitem , 'subtitle' )
965
+ list_item = xbmcgui .ListItem (label = name )
966
+ list_item .setInfo ('video' , {'plotoutline' : subtitle })
967
+ list_item .setArt ({'thumb' : image , 'fanart' : image })
968
+ url = self .build_url (mode = 100 , name = media_urn )
969
+ xbmcplugin .addDirectoryItem (
970
+ handle = self .handle , url = url , listitem = list_item , isFolder = True )
913
971
914
972
def build_search_menu (self ):
915
973
"""
@@ -1321,7 +1379,7 @@ def read_searches(self, filename):
1321
1379
with open (file_path , 'r' ) as f :
1322
1380
json_file = json .load (f )
1323
1381
try :
1324
- return [entry ['search' ] for entry in json_file ]
1382
+ return [entry ['search' ] for entry in json_file ]
1325
1383
except KeyError :
1326
1384
self .log (f'Unexpected file structure for { filename } .' )
1327
1385
return []
0 commit comments