def init(self, app_id, address, port, user_name, password, use_cache, epg_of_days): helper.log_info('DataProvider.init. %s %s %s %s %s %s %s' % (app_id, address, port, user_name, password, use_cache, epg_of_days)) self.use_cache_ = use_cache self.app_id_ = app_id self.address_ = address self.epg_of_days_ = epg_of_days self.http_data_provider_ = HttpDataProvider(address, port, user_name, password) self.reset_()
class DataProvider(object): UPDATE_PERIOD_SEC_ = 0.5 IDLE_PERIOD_SEC_ = 3600 UPDATE_CHANNELS_AND_EPG_PERIOD_SEC_ = 43200 UPDATE_CHANNELS_DELAY_SEC_ = 15 UPDATE_EPG_DELAY_SEC_ = 15 def init(self, app_id, address, port, user_name, password, use_cache, epg_of_days): helper.log_info('DataProvider.init. %s %s %s %s %s %s %s' % (app_id, address, port, user_name, password, use_cache, epg_of_days)) self.use_cache_ = use_cache self.app_id_ = app_id self.address_ = address self.epg_of_days_ = epg_of_days self.http_data_provider_ = HttpDataProvider(address, port, user_name, password) self.reset_() def get_channels(self): if not self.channels_ or not self.use_cache_: self.channels_ = self.http_data_provider_.get_channels() return self.channels_ def get_tv_channels(self): self.get_channels() return [channel for channel in self.channels_ \ if ChannelType.CHANNEL_TV == channel.channel_type] def get_radio_channels(self): self.get_channels() return [channel for channel in self.channels_ \ if ChannelType.CHANNEL_RADIO == channel.channel_type] def get_stream_info(self): if not self.channels_: self.channels_ = self.http_data_provider_.get_channels() if not self.stream_infos_ or not self.use_cache_: self.stream_infos_ = self.get_channels_stream_info_(self.channels_) return dict((stream_info.dvblink_channel_id, stream_info.channel_url) \ for stream_info in self.stream_infos_) def get_channel_epg(self, channel_id): if self.channels_id_with_programs_dict_.has_key(channel_id): return self.channels_id_with_programs_dict_[channel_id] else: programs = self.search_epg_(channel_id) if self.use_cache_: self.channels_id_with_programs_dict_[channel_id] = programs return programs def get_actual_programs(self, requested_count): if self.is_update_completed_ and self.use_cache_: return self.get_actual_programs_locally_(requested_count) else: return self.get_actual_programs_remotely_(requested_count) def search_epg_by_keywords(self, keywords): searcher = EpgSearcher(keywords=keywords) return self.http_data_provider_.search_epg(searcher) def search_epg_by_genre(self, genre_mask): searcher = EpgSearcher(genre_mask=genre_mask) return self.http_data_provider_.search_epg(searcher) def play_channel(self, request_stream): return self.http_data_provider_.play_channel(request_stream) def stop_channel(self, stop_stream): return self.http_data_provider_.stop_channel(stop_stream) def get_recordings(self, is_forced = True): if is_forced or self.recordings_ == None or not self.use_cache_: self.recordings_ = self.http_data_provider_.get_recordings() return self.recordings_ def get_schedules(self): return self.http_data_provider_.get_schedules() def add_schedule(self, schedule): return self.http_data_provider_.add_schedule(schedule) def update_schedule(self, schedule_updater): return self.http_data_provider_.update_schedule(schedule_updater) def remove_schedule(self, schedule_remover): return self.http_data_provider_.remove_schedule(schedule_remover) def remove_recording(self, recording_remover): return self.http_data_provider_.remove_recording(recording_remover) def get_object(self, object_requester): return self.http_data_provider_.get_object(object_requester) def remove_object(self, object_remover): return self.http_data_provider_.remove_object(object_remover) def stop_recording(self, stop_recording): return self.http_data_provider_.stop_recording(stop_recording) def set_parental_lock(self): parental_lock = ParentalLock(client_id=self.app_id_, is_enable=True) return self.http_data_provider_.set_parental_lock(parental_lock) def reset_parental_lock(self, lock_code): parental_lock = ParentalLock(client_id=self.app_id_, is_enable=False, code=lock_code) return self.http_data_provider_.set_parental_lock(parental_lock) def schedule_processing(self): if (long(time.time()) - self.last_channels_update_) > self.UPDATE_CHANNELS_AND_EPG_PERIOD_SEC_: try: self.channels_ = self.http_data_provider_.get_channels() self.stream_infos_ = self.get_channels_stream_info_(self.channels_) if not self.channels_ or not self.stream_infos_: raise Exception() self.recordings_ = self.http_data_provider_.get_recordings() self.channels_without_epg_ = self.channels_[:] self.last_channels_update_ = long(time.time()) except: self.last_channels_update_ = long(time.time()) - self.UPDATE_CHANNELS_AND_EPG_PERIOD_SEC_ + self.UPDATE_CHANNELS_DELAY_SEC_ else: if self.channels_without_epg_ and ((long(time.time()) - self.last_error_time_) > self.UPDATE_EPG_DELAY_SEC_): try: channel = self.channels_without_epg_[0] self.channels_id_with_programs_dict_[channel.channel_id] = self.search_epg_(channel.channel_id) del self.channels_without_epg_[0] if not len(self.channels_without_epg_): self.is_update_completed_ = True return self.IDLE_PERIOD_SEC_ except Exception, error: self.last_error_time_ = long(time.time()) return self.UPDATE_PERIOD_SEC_