コード例 #1
0
 def __init__(self, nfsession: 'NFSessionOperations'):
     self.nfsession = nfsession
     self.events_handler_thread = None
     self._init_msl_handler()
     common.register_slot(signal=common.Signals.SWITCH_EVENTS_HANDLER,
                          callback=self.switch_events_handler,
                          is_signal=True)
     # Slot allocation for IPC
     self.slots = [self.msl_requests.perform_key_handshake]
コード例 #2
0
 def __init__(self):
     xbmc.Monitor.__init__(self)
     self._init_data = None
     self.tracking = False
     self.events_workaround = False
     self.active_player_id = None
     self.action_managers = None
     self._last_player_state = {}
     common.register_slot(self.initialize_playback, common.Signals.PLAYBACK_INITIATED)
コード例 #3
0
 def __init__(self, cache_path, plugin_handle):
     self.plugin_handle = plugin_handle
     self.cache_path = cache_path
     self.buckets = {}
     self.window = xbmcgui.Window(10000)  # Kodi home window
     # If you use multiple Kodi profiles you need to distinguish the cache of the current profile
     self.properties_prefix = common.get_current_kodi_profile_name()
     if g.IS_SERVICE:
         common.register_slot(self.invalidate_callback, signal=common.Signals.INVALIDATE_SERVICE_CACHE)
コード例 #4
0
 def __init__(self, chunked_request):
     super(EventsHandler, self).__init__()
     self.chunked_request = chunked_request
     # session_id, app_id are common to all events
     self.session_id = int(time.time()) * 10000 + random.randint(1, 10001)
     self.app_id = None
     self.queue_events = queue.Queue(maxsize=10)
     self.cache_data_events = {}
     self.banned_events_ids = []
     common.register_slot(signal=common.Signals.QUEUE_VIDEO_EVENT, callback=self.callback_event_video_queue)
コード例 #5
0
 def __init__(self):
     xbmc.Monitor.__init__(self)
     self.tracking = False
     self.active_player_id = None
     self.action_managers = None
     common.register_slot(self.initialize_playback, common.Signals.PLAYBACK_INITIATED)
     # UpNext Add-on - play call back method
     common.register_slot(self._play_callback, signal=g.ADDON_ID + '_play_action', source_id='upnextprovider')
     # Safe measure for when Kodi interrupt the play action due to an error/problem or Kodi crash
     _reset_upnext_callback_state()
コード例 #6
0
 def __init__(self):
     xbmc.Monitor.__init__(self)
     self._init_data = None
     self.init_count = 0
     self.tracking = False
     self.tracking_tick = False
     self.active_player_id = None
     self.action_managers = None
     self._last_player_state = {}
     self._is_pause_called = False
     common.register_slot(self.initialize_playback, common.Signals.PLAYBACK_INITIATED)
コード例 #7
0
 def __init__(self):
     NFSessionAccess.__init__(self)
     DirectoryBuilder.__init__(self, self)
     self.slots = [
         self.login, self.logout, self.activate_profile,
         self.parental_control_data, self.path_request,
         self.perpetual_path_request, self.callpath_request, self.get,
         self.post, self.startup_requests_module
     ]
     for slot in self.slots:
         common.register_slot(slot)
     self.prefetch_login()
コード例 #8
0
 def __init__(self, netflix_session):
     super(DirectoryBuilder, self).__init__()
     self.netflix_session = netflix_session
     self.slots = [
         self.get_mainmenu, self.get_profiles, self.get_seasons,
         self.get_episodes, self.get_video_list, self.get_video_list_sorted,
         self.get_video_list_supplemental, self.get_video_list_chunked,
         self.get_video_list_search, self.get_genres, self.get_subgenres,
         self.get_mylist_videoids_profile_switch,
         self.add_videoids_to_video_list_cache
     ]
     for slot in self.slots:
         common.register_slot(slot)
コード例 #9
0
 def __init__(self):
     NFSessionAccess.__init__(self)
     DirectoryBuilder.__init__(self, self)
     self.slots = [
         self.fetch_initial_page, self.login, self.logout,
         self.activate_profile, self.parental_control_data,
         self.path_request, self.perpetual_path_request,
         self.callpath_request, self.get, self.post, self.update_lolomo_data
     ]
     for slot in self.slots:
         common.register_slot(slot)
     self.prefetch_login()
     self.is_profile_session_active = False
コード例 #10
0
 def __init__(self):
     super(MSLHandler, self).__init__()
     self._events_handler_thread = None
     self._init_msl_handler()
     common.register_slot(signal=common.Signals.ESN_CHANGED,
                          callback=self.msl_requests.perform_key_handshake)
     common.register_slot(signal=common.Signals.RELEASE_LICENSE,
                          callback=self.release_license)
     common.register_slot(signal=common.Signals.CLEAR_USER_ID_TOKENS,
                          callback=self.clear_user_id_tokens)
     common.register_slot(signal=common.Signals.REINITIALIZE_MSL_HANDLER,
                          callback=self.reinitialize_msl_handler)
     common.register_slot(signal=common.Signals.SWITCH_EVENTS_HANDLER,
                          callback=self.switch_events_handler)
コード例 #11
0
 def __init__(self):
     NFSessionAccess.__init__(self)
     DirectoryBuilder.__init__(self, self)
     self.slots = [
         self.login, self.logout, self.activate_profile,
         self.parental_control_data, self.path_request,
         self.perpetual_path_request, self.callpath_request, self.get,
         self.post, self.startup_requests_module
     ]
     for slot in self.slots:
         common.register_slot(slot)
     # UpNext Add-on - play call back method
     # common.register_slot(play_callback, signal=g.ADDON_ID + '_play_action',
     #                      source_id='upnextprovider')
     self.prefetch_login()
コード例 #12
0
 def __init__(self):
     # pylint: disable=broad-except
     try:
         msl_data = json.loads(common.load_file('msl_data.json'))
         self.request_builder = MSLRequestBuilder(msl_data)
         common.debug('Loaded MSL data from disk')
     except Exception:
         import traceback
         common.debug(traceback.format_exc())
         common.debug('Stored MSL data expired or not available')
         self.request_builder = MSLRequestBuilder()
         self.perform_key_handshake()
     common.register_slot(
         signal=common.Signals.ESN_CHANGED,
         callback=self.perform_key_handshake)
コード例 #13
0
 def __init__(self):
     super(NetflixSession, self).__init__()
     self.slots = [
         self.login, self.logout, self.activate_profile,
         self.parental_control_data, self.path_request,
         self.perpetual_path_request,
         self.perpetual_path_request_switch_profiles, self.get, self.post,
         self.startup_requests_module
     ]
     for slot in self.slots:
         common.register_slot(slot)
     common.register_slot(play_callback,
                          signal=g.ADDON_ID + '_play_action',
                          source_id='upnextprovider')
     self.prefetch_login()
コード例 #14
0
 def __init__(self, nfsession: 'NFSessionOperations', msl_handler: 'MSLHandler',
              directory_builder: 'DirectoryBuilder'):
     xbmc.Monitor.__init__(self)
     self.nfsession = nfsession
     self.msl_handler = msl_handler
     self.directory_builder = directory_builder
     self._playback_tick = None
     self._init_data = None
     self.init_count = 0
     self.is_tracking_enabled = False
     self.active_player_id = None
     self.action_managers = None
     self._last_player_state = {}
     self._is_pause_called = False
     common.register_slot(self.initialize_playback, common.Signals.PLAYBACK_INITIATED)
コード例 #15
0
 def __init__(self):
     # Create and establish the Netflix session
     self.nfsession = NFSessionOperations()
     # Initialize correlated features
     self.directory_builder = DirectoryBuilder(self.nfsession)
     # Register the functions to IPC
     slots = self.nfsession.slots + self.directory_builder.slots + [
         self.library_auto_update
     ]
     for slot in slots:
         func_name = slot.__name__
         enveloped_func = common.EnvelopeIPCReturnCall(slot).call
         # For HTTP IPC (http_server.py)
         self.http_ipc_slots[func_name] = enveloped_func
         # For AddonSignals IPC
         common.register_slot(enveloped_func, func_name)
コード例 #16
0
    def __init__(self):
        super(MSLHandler, self).__init__()
        self.msl_requests = None
        try:
            msl_data = json.loads(common.load_file('msl_data.json'))
            common.info('Loaded MSL data from disk')
        except Exception:  # pylint: disable=broad-except
            msl_data = None

        self.msl_requests = MSLRequests(msl_data)

        EventsHandler(self.msl_requests.chunked_request).start()

        common.register_slot(signal=common.Signals.ESN_CHANGED,
                             callback=self.msl_requests.perform_key_handshake)
        common.register_slot(signal=common.Signals.RELEASE_LICENSE,
                             callback=self.release_license)
コード例 #17
0
 def __init__(self):
     self.slots = [
         self.login,
         self.logout,
         self.activate_profile,
         self.path_request,
         self.perpetual_path_request,
         self.get,
         self.post,
     ]
     for slot in self.slots:
         common.register_slot(slot)
     common.register_slot(play_callback,
                          signal=g.ADDON_ID + '_play_action',
                          source_id='upnextprovider')
     self._init_session()
     self._prefetch_login()
コード例 #18
0
 def __init__(self):
     self._identifier_prefix = None
     self.mutex = threading.Lock()
     self.local_storage = threading.local()
     self.conn = None
     self.db_file_path = None
     self.memory_cache = {}
     self._initialize()
     self.next_schedule = _compute_next_schedule()
     self.ttl_values = {}
     self.load_ttl_values()
     self.pending_db_ops_add = []
     # Slot allocation for IPC
     slots = [self.get, self.add, self.delete, self.clear]
     for slot in slots:
         # For AddonSignals IPC
         common.register_slot(slot, slot.__name__)
コード例 #19
0
 def __init__(self):
     # pylint: disable=broad-except
     self.request_builder = None
     try:
         msl_data = json.loads(common.load_file('msl_data.json'))
         common.info('Loaded MSL data from disk')
     except Exception:
         msl_data = None
     try:
         self.request_builder = MSLRequestBuilder(msl_data)
         # Addon just installed, the service starts but there is no esn
         if g.get_esn():
             self.check_mastertoken_validity()
     except Exception:
         import traceback
         common.error(traceback.format_exc())
     common.register_slot(signal=common.Signals.ESN_CHANGED,
                          callback=self.perform_key_handshake)
コード例 #20
0
 def __init__(self):
     self._events_handler_thread = None
     self._init_msl_handler()
     common.register_slot(signal=common.Signals.RELEASE_LICENSE,
                          callback=self.release_license)
     common.register_slot(signal=common.Signals.CLEAR_USER_ID_TOKENS,
                          callback=self.clear_user_id_tokens)
     common.register_slot(signal=common.Signals.REINITIALIZE_MSL_HANDLER,
                          callback=self.reinitialize_msl_handler)
     common.register_slot(signal=common.Signals.SWITCH_EVENTS_HANDLER,
                          callback=self.switch_events_handler)
     # Register slot perform_key_handshake to IPC
     func_name = self.msl_requests.perform_key_handshake.__name__
     enveloped_func = common.EnvelopeIPCReturnCall(
         self.msl_requests.perform_key_handshake).call
     self.http_ipc_slots[
         func_name] = enveloped_func  # HTTP IPC (http_server.py)
     common.register_slot(enveloped_func, func_name)  # AddonSignals IPC
コード例 #21
0
 def __init__(self):
     # Create and establish the Netflix session
     self.nfsession = NFSessionOperations()
     # Create MSL handler
     self.msl_handler = MSLHandler(self.nfsession)
     # Initialize correlated features
     self.directory_builder = DirectoryBuilder(self.nfsession)
     self.action_controller = ActionController(self.nfsession,
                                               self.msl_handler,
                                               self.directory_builder)
     # Register the functions to IPC
     slots = (self.nfsession.slots + self.msl_handler.slots +
              self.directory_builder.slots + [self.library_auto_update])
     for slot in slots:
         func_name = slot.__name__
         # For HTTP IPC (http_server.py)
         self.http_ipc_slots[func_name] = slot
         # For AddonSignals IPC
         common.register_slot(slot, func_name)
コード例 #22
0
 def __init__(self):
     self.slots = [
         self.login,
         self.logout,
         self.update_profiles_data,
         self.activate_profile,
         self.parental_control_data,
         self.path_request,
         self.perpetual_path_request,
         self.perpetual_path_request_switch_profiles,
         self.get,
         self.post,
     ]
     for slot in self.slots:
         common.register_slot(slot)
     common.register_slot(play_callback,
                          signal=g.ADDON_ID + '_play_action',
                          source_id='upnextprovider')
     self.verify_ssl = bool(g.ADDON.getSettingBool('ssl_verification'))
     self._init_session()
     self.is_prefetch_login = False
     self._prefetch_login()
コード例 #23
0
 def __init__(self, nfsession: 'NFSessionOperations'):
     self.nfsession = nfsession
     self.events_handler_thread = None
     self._init_msl_handler()
     common.register_slot(signal=common.Signals.CLEAR_USER_ID_TOKENS,
                          callback=self.clear_user_id_tokens,
                          is_signal=True)
     common.register_slot(signal=common.Signals.REINITIALIZE_MSL_HANDLER,
                          callback=self.reinitialize_msl_handler,
                          is_signal=True)
     common.register_slot(signal=common.Signals.SWITCH_EVENTS_HANDLER,
                          callback=self.switch_events_handler,
                          is_signal=True)
     # Slot allocation for IPC
     self.slots = [self.msl_requests.perform_key_handshake]