fix(login): Enables hot login functionality, as well as proper login failed verification
[plugin.video.netflix.git] / resources / lib / NetflixHttpSubRessourceHandler.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 # Module: NetflixHttpSubRessourceHandler
4 # Created on: 07.03.2017
5
6 class NetflixHttpSubRessourceHandler:
7
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
13         if self.credentials['email'] != '' and self.credentials['password'] != '':
14             if self.netflix_session.is_logged_in(account=self.credentials):
15                 self.netflix_session.refresh_session_data(account=self.credentials)
16             else:
17                 self.netflix_session.login(account=self.credentials)
18             self.profiles = self.netflix_session.profiles
19         else:
20             self.profiles = []
21
22     def is_logged_in (self, params):
23         if self.credentials['email'] == '' or self.credentials['password'] == '':
24             return False
25         return self.netflix_session.is_logged_in(account=self.credentials)
26
27     def logout (self, params):
28         self.profiles = []
29         self.credentials = {'email': '', 'password': ''}
30         return self.netflix_session.logout()
31
32     def login (self, params):
33         email = params.get('email', [''])[0]
34         password = params.get('password', [''])[0]
35         if email != '' and password != '':
36             self.credentials = {'email': email, 'password': password}
37             _ret = self.netflix_session.login(account=self.credentials)
38             self.profiles = self.netflix_session.profiles
39             return _ret
40         return None
41
42     def list_profiles (self, params):
43         return self.profiles
44
45     def get_esn (self, params):
46         return self.netflix_session.esn
47
48     def fetch_video_list_ids (self, params):
49         video_list_ids_raw = self.netflix_session.fetch_video_list_ids()
50         if 'error' in video_list_ids_raw:
51             return video_list_ids_raw
52         return self.netflix_session.parse_video_list_ids(response_data=video_list_ids_raw)
53
54     def fetch_video_list (self, params):
55         list_id = params.get('list_id', [''])[0]
56         raw_video_list = self.netflix_session.fetch_video_list(list_id=list_id)
57         if 'error' in raw_video_list:
58             return raw_video_list
59         # parse the video list ids
60         if 'videos' in raw_video_list.get('value', {}).keys():
61             return self.netflix_session.parse_video_list(response_data=raw_video_list)
62         return []
63
64     def fetch_episodes_by_season (self, params):
65         raw_episode_list = self.netflix_session.fetch_episodes_by_season(season_id=params.get('season_id')[0])
66         if 'error' in raw_episode_list:
67             return raw_episode_list
68         return self.netflix_session.parse_episodes_by_season(response_data=raw_episode_list)
69
70     def fetch_seasons_for_show (self, params):
71         show_id = params.get('show_id', [''])[0]
72         raw_season_list = self.netflix_session.fetch_seasons_for_show(id=show_id)
73         if 'error' in raw_season_list:
74             return raw_season_list
75         # check if we have sesons, announced shows that are not available yet have none
76         if 'seasons' not in raw_season_list.get('value', {}):
77               return []
78         return self.netflix_session.parse_seasons(id=show_id, response_data=raw_season_list)
79
80     def rate_video (self, params):
81         video_id = params.get('video_id', [''])[0]
82         rating = params.get('rating', [''])[0]
83         return self.netflix_session.rate_video(video_id=video_id, rating=rating)
84
85     def remove_from_list (self, params):
86         video_id = params.get('video_id', [''])[0]
87         return self.netflix_session.remove_from_list(video_id=video_id)
88
89     def add_to_list (self, params):
90         video_id = params.get('video_id', [''])[0]
91         return self.netflix_session.add_to_list(video_id=video_id)
92
93     def fetch_metadata (self, params):
94         video_id = params.get('video_id', [''])[0]
95         return self.netflix_session.fetch_metadata(id=video_id)
96
97     def switch_profile (self, params):
98         profile_id = params.get('profile_id', [''])[0]
99         return self.netflix_session.switch_profile(profile_id=profile_id, account=self.credentials)
100
101     def get_user_data (self, params):
102         return self.netflix_session.user_data
103
104     def search (self, params):
105         term = params.get('term', [''])[0]
106         has_search_results = False
107         raw_search_results = self.netflix_session.fetch_search_results(search_str=term)
108         # check for any errors
109         if 'error' in raw_search_results:
110             return raw_search_results
111
112         # determine if we found something
113         if 'search' in raw_search_results['value']:
114             for key in raw_search_results['value']['search'].keys():
115                 if self.netflix_session._is_size_key(key=key) == False:
116                     has_search_results = raw_search_results['value']['search'][key]['titles']['length'] > 0
117                     if has_search_results == False:
118                         if raw_search_results['value']['search'][key].get('suggestions', False) != False:
119                             for entry in raw_search_results['value']['search'][key]['suggestions']:
120                                 if self.netflix_session._is_size_key(key=entry) == False:
121                                     if raw_search_results['value']['search'][key]['suggestions'][entry]['relatedvideos']['length'] > 0:
122                                         has_search_results = True
123
124         # display that we haven't found a thing
125         if has_search_results == False:
126             return []
127
128         # list the search results
129         search_results = self.netflix_session.parse_search_results(response_data=raw_search_results)
130         # add more menaingful data to the search results
131         raw_search_contents = self.netflix_session.fetch_video_list_information(video_ids=search_results.keys())
132         # check for any errors
133         if 'error' in raw_search_contents:
134             return raw_search_contents
135         return self.netflix_session.parse_video_list(response_data=raw_search_contents)