From 8b5ab27444bd59097b802149b01ff7ab1b8a4213 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 17 Nov 2014 14:50:44 +0800 Subject: [PATCH] Remove unsupported t411 provider Removing unsupported french private tracker --- CHANGES.md | 1 + gui/slick/images/providers/t411.png | Bin 3270 -> 0 bytes sickbeard/__init__.py | 2 +- sickbeard/providers/__init__.py | 1 - sickbeard/providers/t411.py | 295 ---------------------------- 5 files changed, 2 insertions(+), 297 deletions(-) delete mode 100644 gui/slick/images/providers/t411.png delete mode 100644 sickbeard/providers/t411.py diff --git a/CHANGES.md b/CHANGES.md index 0429db5f..35e9c9f4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,6 +13,7 @@ * Fix unset vars on Add New Shows Page used in the Add Existing Shows context * Remove unneeded datetime convert from Coming Episodes page * Fix the log output of the limited backlog search for episodes missed +* Remove unsupported t411 provider ### 0.3.0 (2014-11-12 14:30:00 UTC) diff --git a/gui/slick/images/providers/t411.png b/gui/slick/images/providers/t411.png deleted file mode 100644 index cffc3785ee5f8bf1e82f0c2dde3622688a4c0053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3270 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 -# URL: http://code.google.com/p/sickbeard/ -# -# This file is part of Sick Beard. -# -# Sick Beard is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Sick Beard is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Sick Beard. If not, see . - -import traceback -import time -import re -import datetime -import sickbeard -import generic -from lib import requests -from sickbeard.common import USER_AGENT, Quality, cpu_presets -from sickbeard import logger -from sickbeard import tvcache -from sickbeard import show_name_helpers -from sickbeard.bs4_parser import BS4Parser -from sickbeard import db - -class T411Provider(generic.TorrentProvider): - urls = {'base_url': 'http://www.t411.me/', - 'search': 'http://www.t411.me/torrents/search/?name=%s&cat=210&subcat=433&search=%s&submit=Recherche', - 'login_page': 'http://www.t411.me/users/login/', - 'download': 'http://www.t411.me/torrents/download/?id=%s', - } - - def __init__(self): - - generic.TorrentProvider.__init__(self, "T411") - - self.supportsBacklog = True - - self.enabled = False - self.username = None - self.password = None - self.ratio = None - - self.cache = T411Cache(self) - - self.url = self.urls['base_url'] - - self.last_login_check = None - - self.login_opener = None - - def isEnabled(self): - return self.enabled - - def imageName(self): - return 't411.png' - - def getQuality(self, item, anime=False): - - quality = Quality.sceneQuality(item[0], anime) - return quality - - def getLoginParams(self): - return { - 'login': self.username, - 'password': self.password, - 'remember': '1', - } - - def loginSuccess(self, output): - if "Ratio: 0: - for result in entries: - - try: - link = result.find('a', title=True) - torrentName = link['title'] - torrent_name = str(torrentName) - torrentId = result.find_all('td')[2].find_all('a')[0]['href'][1:].replace('torrents/nfo/?id=','') - torrent_download_url = (self.urls['download'] % torrentId).encode('utf8') - except (AttributeError, TypeError): - continue - - if not torrent_name or not torrent_download_url: - continue - - item = torrent_name, torrent_download_url - logger.log(u"Found result: " + torrent_name + " (" + torrent_download_url + ")", logger.DEBUG) - items[mode].append(item) - - else: - logger.log(u"The Data returned from " + self.name + " do not contains any torrent", - logger.WARNING) - continue - - except Exception, e: - logger.log(u"Failed parsing " + self.name + " Traceback: " + traceback.format_exc(), - logger.ERROR) - - results += items[mode] - - return results - - def _get_title_and_url(self, item): - - title, url = item - - if title: - title = u'' + title - title = title.replace(' ', '.') - - if url: - url = str(url).replace('&', '&') - - return title, url - - def findPropers(self, search_date=datetime.datetime.today()): - - results = [] - - myDB = db.DBConnection() - sqlResults = myDB.select( - 'SELECT s.show_name, e.showid, e.season, e.episode, e.status, e.airdate FROM tv_episodes AS e' + - ' INNER JOIN tv_shows AS s ON (e.showid = s.indexer_id)' + - ' WHERE e.airdate >= ' + str(search_date.toordinal()) + - ' AND (e.status IN (' + ','.join([str(x) for x in Quality.DOWNLOADED]) + ')' + - ' OR (e.status IN (' + ','.join([str(x) for x in Quality.SNATCHED]) + ')))' - ) - - if not sqlResults: - return [] - - for sqlshow in sqlResults: - self.show = helpers.findCertainShow(sickbeard.showList, int(sqlshow["showid"])) - if self.show: - curEp = self.show.getEpisode(int(sqlshow["season"]), int(sqlshow["episode"])) - searchString = self._get_episode_search_strings(curEp, add_string='PROPER|REPACK') - - for item in self._doSearch(searchString[0]): - title, url = self._get_title_and_url(item) - results.append(classes.Proper(title, url, datetime.datetime.today(), self.show)) - - return results - - def seedRatio(self): - return self.ratio - - -class T411Cache(tvcache.TVCache): - def __init__(self, provider): - - tvcache.TVCache.__init__(self, provider) - - # Only poll T411 every 10 minutes max - self.minTime = 10 - - def _getDailyData(self): - search_params = {'RSS': ['']} - return self.provider._doSearch(search_params) - - -provider = T411Provider()