Private GIT

Skip to content
Snippets Groups Projects
Commit 1b19b562 authored by miigotu's avatar miigotu
Browse files

Merge pull request #432 from SickRage/hounddawgs-fix

Hounddawgs add seeds,leeches, freeleech and ranked support
parents db3ab906 36e17d60
No related branches found
No related tags found
No related merge requests found
...@@ -21,10 +21,11 @@ import traceback ...@@ -21,10 +21,11 @@ import traceback
from sickbeard import logger from sickbeard import logger
from sickbeard import tvcache from sickbeard import tvcache
from sickbeard.bs4_parser import BS4Parser from sickbeard.bs4_parser import BS4Parser
from sickrage.helper.common import try_int
from sickrage.providers.TorrentProvider import TorrentProvider from sickrage.providers.TorrentProvider import TorrentProvider
class HoundDawgsProvider(TorrentProvider): class HoundDawgsProvider(TorrentProvider): # pylint: disable=too-many-instance-attributes
def __init__(self): def __init__(self):
...@@ -35,12 +36,15 @@ class HoundDawgsProvider(TorrentProvider): ...@@ -35,12 +36,15 @@ class HoundDawgsProvider(TorrentProvider):
self.ratio = None self.ratio = None
self.minseed = None self.minseed = None
self.minleech = None self.minleech = None
self.freeleech = None
self.ranked = None
self.cache = HoundDawgsCache(self)
self.urls = {'base_url': 'https://hounddawgs.org/', self.urls = {
'base_url': 'https://hounddawgs.org/',
'search': 'https://hounddawgs.org/torrents.php', 'search': 'https://hounddawgs.org/torrents.php',
'login': 'https://hounddawgs.org/login.php'} 'login': 'https://hounddawgs.org/login.php'
}
self.url = self.urls['base_url'] self.url = self.urls['base_url']
...@@ -60,12 +64,16 @@ class HoundDawgsProvider(TorrentProvider): ...@@ -60,12 +64,16 @@ class HoundDawgsProvider(TorrentProvider):
"searchtags": '' "searchtags": ''
} }
self.cache = HoundDawgsCache(self)
def login(self): def login(self):
login_params = {'username': self.username, login_params = {
'username': self.username,
'password': self.password, 'password': self.password,
'keeplogged': 'on', 'keeplogged': 'on',
'login': 'Login'} 'login': 'Login'
}
self.get_url(self.urls['base_url'], timeout=30) self.get_url(self.urls['base_url'], timeout=30)
response = self.get_url(self.urls['login'], post_data=login_params, timeout=30) response = self.get_url(self.urls['login'], post_data=login_params, timeout=30)
...@@ -81,7 +89,7 @@ class HoundDawgsProvider(TorrentProvider): ...@@ -81,7 +89,7 @@ class HoundDawgsProvider(TorrentProvider):
return True return True
def search(self, search_strings, age=0, ep_obj=None): def search(self, search_strings, age=0, ep_obj=None): # pylint: disable=too-many-locals,too-many-branches,too-many-statements
results = [] results = []
items = {'Season': [], 'Episode': [], 'RSS': []} items = {'Season': [], 'Episode': [], 'RSS': []}
...@@ -127,25 +135,20 @@ class HoundDawgsProvider(TorrentProvider): ...@@ -127,25 +135,20 @@ class HoundDawgsProvider(TorrentProvider):
allAs = (torrent[1]).find_all('a') allAs = (torrent[1]).find_all('a')
try: try:
# link = self.urls['base_url'] + allAs[2].attrs['href'] notinternal = result.find('img', src='/static//common/user_upload.png')
# url = result.find('td', attrs={'class': 'quickdownload'}).find('a') if self.ranked and notinternal:
logger.log(u"Found a user uploaded release, Ignoring it..", logger.DEBUG)
continue
freeleech = result.find('img', src='/static//common/browse/freeleech.png')
if self.freeleech and not freeleech:
continue
title = allAs[2].string title = allAs[2].string
# Trimming title so accepted by scene check(Feature has been rewuestet i forum)
title = title.replace("custom.", "")
title = title.replace("CUSTOM.", "")
title = title.replace("Custom.", "")
title = title.replace("dk", "")
title = title.replace("DK", "")
title = title.replace("Dk", "")
title = title.replace("subs.", "")
title = title.replace("SUBS.", "")
title = title.replace("Subs.", "")
download_url = self.urls['base_url']+allAs[0].attrs['href'] download_url = self.urls['base_url']+allAs[0].attrs['href']
# FIXME torrent_size = result.find("td", class_="nobr").find_next_sibling("td").string
size = -1 if torrent_size:
seeders = 1 size = self._convertSize(torrent_size)
leechers = 0 seeders = try_int((result.findAll('td')[6]).text)
leechers = try_int((result.findAll('td')[7]).text)
except (AttributeError, TypeError): except (AttributeError, TypeError):
continue continue
...@@ -154,10 +157,10 @@ class HoundDawgsProvider(TorrentProvider): ...@@ -154,10 +157,10 @@ class HoundDawgsProvider(TorrentProvider):
continue continue
# Filter unseeded torrent # Filter unseeded torrent
# if seeders < self.minseed or leechers < self.minleech: if seeders < self.minseed or leechers < self.minleech:
# if mode != 'RSS': if mode != 'RSS':
# logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG) logger.log(u"Discarding torrent because it doesn't meet the minimum seeders or leechers: {0} (S:{1} L:{2})".format(title, seeders, leechers), logger.DEBUG)
# continue continue
item = title, download_url, size, seeders, leechers item = title, download_url, size, seeders, leechers
if mode != 'RSS': if mode != 'RSS':
...@@ -165,7 +168,7 @@ class HoundDawgsProvider(TorrentProvider): ...@@ -165,7 +168,7 @@ class HoundDawgsProvider(TorrentProvider):
items[mode].append(item) items[mode].append(item)
except Exception, e: except Exception:
logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR) logger.log(u"Failed parsing provider. Traceback: %s" % traceback.format_exc(), logger.ERROR)
# For each search mode sort all the items by seeders if available # For each search mode sort all the items by seeders if available
...@@ -175,6 +178,21 @@ class HoundDawgsProvider(TorrentProvider): ...@@ -175,6 +178,21 @@ class HoundDawgsProvider(TorrentProvider):
return results return results
@staticmethod
def _convertSize(size):
size = re.sub(r'[i, ]+', '', size)
matches = re.match(r'([\d.]+)([TGMK])', size.strip().upper())
if not matches:
return -1
size = matches.group(1)
modifier = matches.group(2)
mod = {'K': 1, 'M': 2, 'G': 3, 'T': 4}
return float(size) * 1024**mod[modifier]
def seed_ratio(self): def seed_ratio(self):
return self.ratio return self.ratio
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment