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({})
29 def is_logged_in (self, params):
30 if self.credentials['email'] == '' or self.credentials['password'] == '':
32 return self.netflix_session.is_logged_in(account=self.credentials)
34 def logout (self, params):
36 self.credentials = {'email': '', 'password': ''}
37 return self.netflix_session.logout()
39 def login (self, params):
40 email = params.get('email', [''])[0]
41 password = params.get('password', [''])[0]
42 if email != '' and password != '':
43 self.credentials = {'email': email, 'password': password}
44 _ret = self.netflix_session.login(account=self.credentials)
45 self.profiles = self.netflix_session.profiles
49 def list_profiles (self, params):
52 def get_esn (self, params):
53 return self.netflix_session.esn
55 def fetch_video_list_ids (self, params):
56 cached_list = self.video_list_cache.get(self.netflix_session.user_data['guid'], None)
57 if cached_list != None:
58 self.kodi_helper.log('Serving cached list for user: ' + self.netflix_session.user_data['guid'])
60 video_list_ids_raw = self.netflix_session.fetch_video_list_ids()
61 if 'error' in video_list_ids_raw:
62 return video_list_ids_raw
63 return self.netflix_session.parse_video_list_ids(response_data=video_list_ids_raw)
65 def fetch_video_list (self, params):
66 list_id = params.get('list_id', [''])[0]
67 raw_video_list = self.netflix_session.fetch_video_list(list_id=list_id)
68 if 'error' in raw_video_list:
70 # parse the video list ids
71 if 'videos' in raw_video_list.get('value', {}).keys():
72 return self.netflix_session.parse_video_list(response_data=raw_video_list)
75 def fetch_episodes_by_season (self, params):
76 raw_episode_list = self.netflix_session.fetch_episodes_by_season(season_id=params.get('season_id')[0])
77 if 'error' in raw_episode_list:
78 return raw_episode_list
79 return self.netflix_session.parse_episodes_by_season(response_data=raw_episode_list)
81 def fetch_seasons_for_show (self, params):
82 show_id = params.get('show_id', [''])[0]
83 raw_season_list = self.netflix_session.fetch_seasons_for_show(id=show_id)
84 if 'error' in raw_season_list:
85 return raw_season_list
86 # check if we have sesons, announced shows that are not available yet have none
87 if 'seasons' not in raw_season_list.get('value', {}):
89 return self.netflix_session.parse_seasons(id=show_id, response_data=raw_season_list)
91 def rate_video (self, params):
92 video_id = params.get('video_id', [''])[0]
93 rating = params.get('rating', [''])[0]
94 return self.netflix_session.rate_video(video_id=video_id, rating=rating)
96 def remove_from_list (self, params):
97 video_id = params.get('video_id', [''])[0]
98 return self.netflix_session.remove_from_list(video_id=video_id)
100 def add_to_list (self, params):
101 video_id = params.get('video_id', [''])[0]
102 return self.netflix_session.add_to_list(video_id=video_id)
104 def fetch_metadata (self, params):
105 video_id = params.get('video_id', [''])[0]
106 return self.netflix_session.fetch_metadata(id=video_id)
108 def switch_profile (self, params):
109 profile_id = params.get('profile_id', [''])[0]
110 return self.netflix_session.switch_profile(profile_id=profile_id, account=self.credentials)
112 def get_user_data (self, params):
113 return self.netflix_session.user_data
115 def search (self, params):
116 term = params.get('term', [''])[0]
117 has_search_results = False
118 raw_search_results = self.netflix_session.fetch_search_results(search_str=term)
119 # check for any errors
120 if 'error' in raw_search_results:
121 return raw_search_results
123 # determine if we found something
124 if 'search' in raw_search_results['value']:
125 for key in raw_search_results['value']['search'].keys():
126 if self.netflix_session._is_size_key(key=key) == False:
127 has_search_results = raw_search_results['value']['search'][key]['titles']['length'] > 0
128 if has_search_results == False:
129 if raw_search_results['value']['search'][key].get('suggestions', False) != False:
130 for entry in raw_search_results['value']['search'][key]['suggestions']:
131 if self.netflix_session._is_size_key(key=entry) == False:
132 if raw_search_results['value']['search'][key]['suggestions'][entry]['relatedvideos']['length'] > 0:
133 has_search_results = True
135 # display that we haven't found a thing
136 if has_search_results == False:
139 # list the search results
140 search_results = self.netflix_session.parse_search_results(response_data=raw_search_results)
141 # add more menaingful data to the search results
142 raw_search_contents = self.netflix_session.fetch_video_list_information(video_ids=search_results.keys())
143 # check for any errors
144 if 'error' in raw_search_contents:
145 return raw_search_contents
146 return self.netflix_session.parse_video_list(response_data=raw_search_contents)