2 # -*- coding: utf-8 -*-
3 # Module: NetflixHttpSubRessourceHandler
4 # Created on: 07.03.2017
6 class NetflixHttpSubRessourceHandler:
8 def __init__ (self, kodi_helper, netflix_session):
9 self.kodi_helper = kodi_helper
10 self.netflix_session = netflix_session
11 self.credentials = self.kodi_helper.get_credentials()
12 self.video_list_cache = {}
14 if self.credentials['email'] != '' and self.credentials['password'] != '':
15 if self.netflix_session.is_logged_in(account=self.credentials):
16 self.netflix_session.refresh_session_data(account=self.credentials)
18 self.netflix_session.login(account=self.credentials)
19 self.profiles = self.netflix_session.profiles
20 self._prefetch_user_video_lists()
24 def _prefetch_user_video_lists (self):
25 for profile_id in self.profiles:
26 self.switch_profile({'profile_id': [profile_id]})
27 self.video_list_cache[profile_id] = self.fetch_video_list_ids({})
28 print self.video_list_cache
30 def is_logged_in (self, params):
31 if self.credentials['email'] == '' or self.credentials['password'] == '':
33 return self.netflix_session.is_logged_in(account=self.credentials)
35 def logout (self, params):
37 self.credentials = {'email': '', 'password': ''}
38 return self.netflix_session.logout()
40 def login (self, params):
41 email = params.get('email', [''])[0]
42 password = params.get('password', [''])[0]
43 if email != '' and password != '':
44 self.credentials = {'email': email, 'password': password}
45 _ret = self.netflix_session.login(account=self.credentials)
46 self.profiles = self.netflix_session.profiles
50 def list_profiles (self, params):
53 def get_esn (self, params):
54 return self.netflix_session.esn
56 def fetch_video_list_ids (self, params):
57 cached_list = self.video_list_cache.get(self.netflix_session.user_data['guid'], None)
58 if cached_list != None:
59 self.kodi_helper.log('Serving cached list for user: ' + self.netflix_session.user_data['guid'])
61 video_list_ids_raw = self.netflix_session.fetch_video_list_ids()
62 if 'error' in video_list_ids_raw:
63 return video_list_ids_raw
64 return self.netflix_session.parse_video_list_ids(response_data=video_list_ids_raw)
66 def fetch_video_list (self, params):
67 list_id = params.get('list_id', [''])[0]
68 raw_video_list = self.netflix_session.fetch_video_list(list_id=list_id)
69 if 'error' in raw_video_list:
71 # parse the video list ids
72 if 'videos' in raw_video_list.get('value', {}).keys():
73 return self.netflix_session.parse_video_list(response_data=raw_video_list)
76 def fetch_episodes_by_season (self, params):
77 raw_episode_list = self.netflix_session.fetch_episodes_by_season(season_id=params.get('season_id')[0])
78 if 'error' in raw_episode_list:
79 return raw_episode_list
80 return self.netflix_session.parse_episodes_by_season(response_data=raw_episode_list)
82 def fetch_seasons_for_show (self, params):
83 show_id = params.get('show_id', [''])[0]
84 raw_season_list = self.netflix_session.fetch_seasons_for_show(id=show_id)
85 if 'error' in raw_season_list:
86 return raw_season_list
87 # check if we have sesons, announced shows that are not available yet have none
88 if 'seasons' not in raw_season_list.get('value', {}):
90 return self.netflix_session.parse_seasons(id=show_id, response_data=raw_season_list)
92 def rate_video (self, params):
93 video_id = params.get('video_id', [''])[0]
94 rating = params.get('rating', [''])[0]
95 return self.netflix_session.rate_video(video_id=video_id, rating=rating)
97 def remove_from_list (self, params):
98 video_id = params.get('video_id', [''])[0]
99 return self.netflix_session.remove_from_list(video_id=video_id)
101 def add_to_list (self, params):
102 video_id = params.get('video_id', [''])[0]
103 return self.netflix_session.add_to_list(video_id=video_id)
105 def fetch_metadata (self, params):
106 video_id = params.get('video_id', [''])[0]
107 return self.netflix_session.fetch_metadata(id=video_id)
109 def switch_profile (self, params):
110 profile_id = params.get('profile_id', [''])[0]
111 return self.netflix_session.switch_profile(profile_id=profile_id, account=self.credentials)
113 def get_user_data (self, params):
114 return self.netflix_session.user_data
116 def search (self, params):
117 term = params.get('term', [''])[0]
118 has_search_results = False
119 raw_search_results = self.netflix_session.fetch_search_results(search_str=term)
120 # check for any errors
121 if 'error' in raw_search_results:
122 return raw_search_results
124 # determine if we found something
125 if 'search' in raw_search_results['value']:
126 for key in raw_search_results['value']['search'].keys():
127 if self.netflix_session._is_size_key(key=key) == False:
128 has_search_results = raw_search_results['value']['search'][key]['titles']['length'] > 0
129 if has_search_results == False:
130 if raw_search_results['value']['search'][key].get('suggestions', False) != False:
131 for entry in raw_search_results['value']['search'][key]['suggestions']:
132 if self.netflix_session._is_size_key(key=entry) == False:
133 if raw_search_results['value']['search'][key]['suggestions'][entry]['relatedvideos']['length'] > 0:
134 has_search_results = True
136 # display that we haven't found a thing
137 if has_search_results == False:
140 # list the search results
141 search_results = self.netflix_session.parse_search_results(response_data=raw_search_results)
142 # add more menaingful data to the search results
143 raw_search_contents = self.netflix_session.fetch_video_list_information(video_ids=search_results.keys())
144 # check for any errors
145 if 'error' in raw_search_contents:
146 return raw_search_contents
147 return self.netflix_session.parse_video_list(response_data=raw_search_contents)