def run(self): """Run failed thread.""" generic_queue.QueueItem.run(self) self.started = True try: for ep_obj in self.segment: log.info('Marking episode as bad: {ep}', {'ep': ep_obj.pretty_name()}) failed_history.mark_failed(ep_obj) (release, provider) = failed_history.find_release(ep_obj) if release: failed_history.log_failed(release) history.log_failed(ep_obj, release, provider) failed_history.revert_episode(ep_obj) log.info('Beginning failed download search for: {ep}', {'ep': ep_obj.pretty_name()}) # If it is wanted, self.down_cur_quality doesnt matter # if it isn't wanted, we need to make sure to not overwrite the existing ep that we reverted to! search_result = search_providers(self.show, self.segment, True) if search_result: for result in search_result: # just use the first result for now if result.seeders not in ( -1, None) and result.leechers not in (-1, None): log.info( 'Downloading {name} with {seeders} seeders and {leechers} leechers ' 'and size {size} from {provider}', { 'name': result.name, 'seeders': result.seeders, 'leechers': result.leechers, 'size': pretty_file_size(result.size), 'provider': result.provider.name, }) else: log.info( 'Downloading {name} with size: {size} from {provider}', { 'name': result.name, 'size': pretty_file_size(result.size), 'provider': result.provider.name, }) # Set the search_type for the result. result.search_type = SearchType.FAILED_SEARCH # Create the queue item snatch_queue_item = SnatchQueueItem( result.series, result.episodes, result) # Add the queue item to the queue app.manual_snatch_scheduler.action.add_item( snatch_queue_item) self.success = False while snatch_queue_item.success is False: if snatch_queue_item.started and snatch_queue_item.success: self.success = True time.sleep(1) # give the CPU a break time.sleep(common.cpu_presets[app.CPU_PRESET]) else: log.info( 'No needed episodes found during failed search for: {name}', {'name': self.show.name}) # TODO: Replace the catch all exception with a more specific one. except Exception: self.success = False log.info(traceback.format_exc()) # ## Keep a list with the 100 last executed searches fifo(FORCED_SEARCH_HISTORY, self, FORCED_SEARCH_HISTORY_SIZE) if self.success is None: self.success = False self.finish()
def run(self): """Run failed thread.""" generic_queue.QueueItem.run(self) self.started = True try: for ep_obj in self.segment: log.info('Marking episode as bad: {ep}', {'ep': ep_obj.pretty_name()}) failed_history.mark_failed(ep_obj) (release, provider) = failed_history.find_release(ep_obj) if release: failed_history.log_failed(release) history.log_failed(ep_obj, release, provider) failed_history.revert_episode(ep_obj) log.info('Beginning failed download search for: {ep}', {'ep': ep_obj.pretty_name()}) # If it is wanted, self.down_cur_quality doesnt matter # if it isn't wanted, we need to make sure to not overwrite the existing ep that we reverted to! search_result = search_providers(self.show, self.segment, True) if search_result: for result in search_result: # just use the first result for now if result.seeders not in (-1, None) and result.leechers not in (-1, None): log.info( 'Downloading {name} with {seeders} seeders and {leechers} leechers ' 'and size {size} from {provider}', { 'name': result.name, 'seeders': result.seeders, 'leechers': result.leechers, 'size': pretty_file_size(result.size), 'provider': result.provider.name, } ) else: log.info( 'Downloading {name} with size: {size} from {provider}', { 'name': result.name, 'size': pretty_file_size(result.size), 'provider': result.provider.name, } ) # Set the search_type for the result. result.search_type = SearchType.FAILED_SEARCH # Create the queue item snatch_queue_item = SnatchQueueItem(result.series, result.episodes, result) # Add the queue item to the queue app.manual_snatch_scheduler.action.add_item(snatch_queue_item) self.success = False while snatch_queue_item.success is False: if snatch_queue_item.started and snatch_queue_item.success: self.success = True time.sleep(1) # give the CPU a break time.sleep(common.cpu_presets[app.CPU_PRESET]) else: log.info('No needed episodes found during failed search for: {name}', {'name': self.show.name}) # TODO: Replace the catch all exception with a more specific one. except Exception: self.success = False log.info(traceback.format_exc()) # ## Keep a list with the 100 last executed searches fifo(FORCED_SEARCH_HISTORY, self, FORCED_SEARCH_HISTORY_SIZE) if self.success is None: self.success = False self.finish()