def _downloadResult(result): resProvider = providers.getProviderModule(result.provider) newResult = False if resProvider == None: logger.log("Invalid provider name - this is a coding error, report it please", logger.ERROR) return False if result.resultType == "nzb": newResult = resProvider.downloadNZB(result) elif result.resultType == "nzbdata": fileName = os.path.join(sickbeard.NZB_DIR, result.name + ".nzb") logger.log("Saving NZB to " + fileName) newResult = True try: fileOut = open(fileName, "w") fileOut.write(result.extraInfo[0]) fileOut.close() except IOError, e: logger.log("Error trying to save NZB to black hole: "+str(e), logger.ERROR) newResult = False
def __str__(self): providerModule = providers.getProviderModule(self.provider) if providerModule == None: return "Invalid provider, unable to print self" myString = providerModule.providerName + " @ " + self.url + "\n" myString += "Extra Info:\n" for extra in self.extraInfo: myString += " " + extra + "\n" return myString
def _downloadResult(result): resProvider = providers.getProviderModule(result.provider) if resProvider == None: logger.log("Invalid provider name - this is a coding error, report it please", logger.ERROR) return False if resProvider.providerType == "nzb": resProvider.downloadNZB(result) elif resProvider.providerType == "torrent": resProvider.downloadTorrent(result) else: logger.log("Invalid provider type - this is a coding error, report it please", logger.ERROR) return False
def logSnatch(searchResult): showid = int(searchResult.episode.show.tvdbid) season = int(searchResult.episode.season) episode = int(searchResult.episode.episode) quality = searchResult.quality providerModule = providers.getProviderModule(searchResult.provider) if providerModule != None: provider = providerModule.providerName else: provider = "unknown" action = Quality.compositeStatus(SNATCHED, searchResult.quality) resource = searchResult.extraInfo[0] _logHistoryItem(action, showid, season, episode, quality, resource, provider)
def logSnatch(searchResult): showid = int(searchResult.episode.show.tvdbid) season = int(searchResult.episode.season) episode = int(searchResult.episode.episode) quality = searchResult.quality providerModule = providers.getProviderModule(searchResult.provider) if providerModule != None: provider = providerModule.providerName else: provider = "unknown" if searchResult.predownloaded: action = ACTION_PRESNATCHED else: action = ACTION_SNATCHED resource = searchResult.extraInfo[0] _logHistoryItem(action, showid, season, episode, quality, resource, provider)
def searchEpisode(self, show=None, season=None, episode=None): outStr = "" epObj = _getEpisode(show, season, episode) if isinstance(epObj, str): return _genericMessage("Error", epObj) tempStr = "Searching for download for " + epObj.prettyName(True) logger.log(tempStr) outStr += tempStr + "<br />\n" foundEpisodes = search.findEpisode(epObj) if len(foundEpisodes) == 0: message = 'No downloads were found' flash.error(message, "Couldn't find a download for <i>%s</i>" % epObj.prettyName(True)) logger.log(message) else: # just use the first result for now logger.log("Downloading episode from " + foundEpisodes[0].url + "<br />\n") result = search.snatchEpisode(foundEpisodes[0]) providerModule = providers.getProviderModule(foundEpisodes[0].provider) if providerModule == None: flash.error('Provider is configured incorrectly, unable to download') else: flash.message('Episode snatched from <b>%s</b>' % providerModule.providerName) #TODO: check if the download was successful # update our lists to reflect the result if this search sickbeard.updateMissingList() sickbeard.updateAiringList() sickbeard.updateComingList() redirect("/home/displayShow?show=" + str(epObj.show.tvdbid))
def findNeededEpisodes(self, episode = None, manualSearch=False): neededEps = {} if episode: neededEps[episode] = [] myDB = self._getDB() if not episode: sqlResults = myDB.select("SELECT * FROM "+self.providerName) else: sqlResults = myDB.select("SELECT * FROM "+self.providerName+" WHERE tvdbid = ? AND season = ? AND episodes LIKE ?", [episode.show.tvdbid, episode.season, "|"+str(episode.episode)+"|"]) # for each cache entry for curResult in sqlResults: # get the show object, or if it's not one of our shows then ignore it showObj = helpers.findCertainShow(sickbeard.showList, int(curResult["tvdbid"])) if not showObj: continue # get season and ep data (ignoring multi-eps for now) curSeason = int(curResult["season"]) if curSeason == -1: continue curEp = curResult["episodes"].split("|")[1] if not curEp: continue curEp = int(curEp) curQuality = int(curResult["quality"]) # if the show says we want that episode then add it to the list if not showObj.wantEpisode(curSeason, curEp, curQuality, manualSearch): logger.log("Skipping "+curResult["name"]+" because we don't want an episode that's "+Quality.qualityStrings[curQuality], logger.DEBUG) else: if episode: epObj = episode else: epObj = showObj.getEpisode(curSeason, curEp) # build a result object title = curResult["name"] url = curResult["url"] logger.log("Found result " + title + " at " + url) resProvider = providers.getProviderModule(self.providerName.lower()) resultType = resProvider.providerType if resultType == "nzb": result = classes.NZBSearchResult([epObj]) elif resultType == "torrent": result = classes.TorrentSearchResult([epObj]) result.provider = self.providerName.lower() result.url = url result.name = title result.quality = curQuality # add it to the list if epObj not in neededEps: neededEps[epObj] = [result] else: neededEps[epObj].append(result) return neededEps