chore(performance): Removes NetflixSession from the core addon & adds a HTTP proxy...
[plugin.video.netflix.git] / resources / lib / NetflixHttpSubRessourceHandler.py
1 class NetflixHttpSubRessourceHandler:
2
3     def __init__ (self, kodi_helper, netflix_session):
4         self.kodi_helper = kodi_helper
5         self.netflix_session = netflix_session
6         credentials = self.kodi_helper.get_credentials()
7
8         if self.netflix_session.is_logged_in(account=credentials):
9             self.netflix_session.refresh_session_data(account=credentials)
10         else:
11             self.netflix_session.login(account=credentials)
12         self.profiles = self.netflix_session.profiles
13
14     def is_logged_in (self, params):
15         credentials = self.kodi_helper.get_credentials()
16         return self.netflix_session.is_logged_in(account=credentials)
17
18     def logout (self, params):
19         return self.netflix_session.logout()
20
21     def list_profiles (self, params):
22         return self.profiles
23
24     def get_esn (self, params):
25         return self.netflix_session.esn
26
27     def fetch_video_list_ids (self, params):
28         video_list_ids_raw = self.netflix_session.fetch_video_list_ids()
29         if 'error' in video_list_ids_raw:
30             return video_list_ids_raw
31         return self.netflix_session.parse_video_list_ids(response_data=video_list_ids_raw)
32
33     def fetch_video_list (self, params):
34         list_id = params.get('list_id', [''])[0]
35         raw_video_list = self.netflix_session.fetch_video_list(list_id=list_id)
36         if 'error' in raw_video_list:
37             return raw_video_list
38         # parse the video list ids
39         if 'videos' in raw_video_list.get('value', {}).keys():
40             return self.netflix_session.parse_video_list(response_data=raw_video_list)
41         return []
42
43     def fetch_episodes_by_season (self, params):
44         raw_episode_list = self.netflix_session.fetch_episodes_by_season(season_id=params.get('season_id')[0])
45         if 'error' in raw_episode_list:
46             return raw_episode_list
47         return self.netflix_session.parse_episodes_by_season(response_data=raw_episode_list)
48
49     def fetch_seasons_for_show (self, params):
50         show_id = params.get('show_id', [''])[0]
51         raw_season_list = self.netflix_session.fetch_seasons_for_show(id=show_id)
52         if 'error' in raw_season_list:
53             return raw_season_list
54         # check if we have sesons, announced shows that are not available yet have none
55         if 'seasons' not in raw_season_list.get('value', {}):
56               return []
57         return self.netflix_session.parse_seasons(id=show_id, response_data=raw_season_list)
58
59     def rate_video (self, params):
60         video_id = params.get('video_id', [''])[0]
61         rating = params.get('rating', [''])[0]
62         return self.netflix_session.rate_video(video_id=video_id, rating=rating)
63
64     def remove_from_list (self, params):
65         video_id = params.get('video_id', [''])[0]
66         return self.netflix_session.remove_from_list(video_id=video_id)
67
68     def add_to_list (self, params):
69         video_id = params.get('video_id', [''])[0]
70         return self.netflix_session.add_to_list(video_id=video_id)
71
72     def fetch_metadata (self, params):
73         video_id = params.get('video_id', [''])[0]
74         return self.netflix_session.fetch_metadata(id=video_id)
75
76     def switch_profile (self, params):
77         credentials = self.kodi_helper.get_credentials()
78         profile_id = params.get('profile_id', [''])[0]
79         return self.netflix_session.switch_profile(profile_id=profile_id, account=credentials)
80
81     def get_user_data (self, params):
82         return self.netflix_session.user_data
83
84     def search (self, params):
85         term = params.get('term', [''])[0]
86         has_search_results = False
87         raw_search_results = self.netflix_session.fetch_search_results(search_str=term)
88         # check for any errors
89         if 'error' in raw_search_results:
90             return raw_search_results
91
92         # determine if we found something
93         if 'search' in raw_search_results['value']:
94             for key in raw_search_results['value']['search'].keys():
95                 if self.netflix_session._is_size_key(key=key) == False:
96                     has_search_results = raw_search_results['value']['search'][key]['titles']['length'] > 0
97                     if has_search_results == False:
98                         if raw_search_results['value']['search'][key].get('suggestions', False) != False:
99                             for entry in raw_search_results['value']['search'][key]['suggestions']:
100                                 if self.netflix_session._is_size_key(key=entry) == False:
101                                     if raw_search_results['value']['search'][key]['suggestions'][entry]['relatedvideos']['length'] > 0:
102                                         has_search_results = True
103
104         # display that we haven't found a thing
105         if has_search_results == False:
106             return []
107
108         # list the search results
109         search_results = self.netflix_session.parse_search_results(response_data=raw_search_results)
110         # add more menaingful data to the search results
111         raw_search_contents = self.netflix_session.fetch_video_list_information(video_ids=search_results.keys())
112         # check for any errors
113         if 'error' in raw_search_contents:
114             return raw_search_contents
115         return self.netflix_session.parse_video_list(response_data=raw_search_contents)