diff --git a/.gitignore b/.gitignore index 217a73c..3dec717 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ /settings.conf /logs/*.log /_source/ -/_data/ \ No newline at end of file +/_data/ diff --git a/couchpotato/core/downloaders/base.py b/couchpotato/core/downloaders/base.py index f72c0b3..3b139e4 100644 --- a/couchpotato/core/downloaders/base.py +++ b/couchpotato/core/downloaders/base.py @@ -2,6 +2,8 @@ from couchpotato.core.event import addEvent from couchpotato.core.logger import CPLog from couchpotato.core.plugins.base import Plugin from couchpotato.environment import Env +from couchpotato.core.helpers.encoding import toSafeString +import os log = CPLog(__name__) @@ -16,6 +18,12 @@ class Downloader(Plugin): def download(self, data = {}): pass + def createFileName(self, data, file, movie): + if "DOCTYPE nzb" not in file: + if data.get('type') == 'nzb': + return os.path.join('%s%s.%s' % (toSafeString(data.get('name')), self.cpTag(movie) , 'rar')) + return os.path.join('%s%s.%s' % (toSafeString(data.get('name')), self.cpTag(movie) , data.get('type'))) + def cpTag(self, movie): if Env.setting('enabled', 'renamer'): return '.cp(' + movie['library'].get('identifier') + ')' if movie['library'].get('identifier') else '' diff --git a/couchpotato/core/downloaders/blackhole/main.py b/couchpotato/core/downloaders/blackhole/main.py index f4357e7..0c2b876 100644 --- a/couchpotato/core/downloaders/blackhole/main.py +++ b/couchpotato/core/downloaders/blackhole/main.py @@ -11,36 +11,37 @@ class Blackhole(Downloader): type = ['nzb', 'torrent'] def download(self, data = {}, movie = {}): - if self.isDisabled() or not self.isCorrectType(data.get('type') or not self.conf('use_for') in ['both', data.get('type')]): return directory = self.conf('directory') - if not directory or not os.path.isdir(directory): log.error('No directory set for blackhole %s download.' % data.get('type')) else: - fullPath = os.path.join(directory, '%s%s.%s' % (toSafeString(data.get('name')), self.cpTag(movie) , data.get('type'))) - try: - if not os.path.isfile(fullPath): - log.info('Downloading %s to %s.' % (data.get('type'), fullPath)) + file = data.get('download')(url = data.get('url'), nzb_id = data.get('id')) + + if len(file) < 50: + log.error('No nzb available!') + return False - try: - file = data.get('download')(url = data.get('url'), nzb_id = data.get('id')) + fullPath = os.path.join(directory, self.createFileName(data, file, movie)) + try: + if not os.path.isfile(fullPath): + log.info('Downloading %s to %s.' % (data.get('type'), fullPath)) with open(fullPath, 'wb') as f: f.write(file) - except: - log.debug('Failed download file: %s' % data.get('name')) - return False - - return True - else: - log.info('File %s already exists.' % fullPath) - return True - except: - log.error('Failed to download to blackhole %s' % traceback.format_exc()) - pass + return True + else: + log.info('File %s already exists.' % fullPath) + return True + + except: + log.error('Failed to download to blackhole %s' % traceback.format_exc()) + pass + except: + log.debug('Failed to download file: %s' % data.get('name')) + return False return False diff --git a/couchpotato/core/downloaders/sabnzbd/main.py b/couchpotato/core/downloaders/sabnzbd/main.py index 8d56a8f..5a802ac 100644 --- a/couchpotato/core/downloaders/sabnzbd/main.py +++ b/couchpotato/core/downloaders/sabnzbd/main.py @@ -44,13 +44,20 @@ class Sabnzbd(Downloader): nzb_file = data.get('download')(url = data.get('url'), nzb_id = data.get('id')) + if len(nzb_file) < 50: + log.error('No nzb available!') + return False + + # If it's a .rar, it adds the .rar extension, otherwise it stays .nzb + nzb_filename = self.createFileName(data, nzb_file, movie) + if pp: params['script'] = pp_script_fn url = cleanHost(self.conf('host')) + "api?" + urlencode(params) try: - data = self.urlopen(url, params = {"nzbfile": (params['nzbname'] + ".nzb", nzb_file)}, multipart = True) + data = self.urlopen(url, params = {"nzbfile": (nzb_filename, nzb_file)}, multipart = True) except Exception: log.error("Unable to connect to SAB: %s" % traceback.format_exc()) return False diff --git a/couchpotato/core/providers/nzb/x264/__init__.py b/couchpotato/core/providers/nzb/x264/__init__.py new file mode 100644 index 0000000..cf65b0a --- /dev/null +++ b/couchpotato/core/providers/nzb/x264/__init__.py @@ -0,0 +1,20 @@ +from .main import X264 + +def start(): + return X264() + +config = [{ + 'name': 'x264', + 'groups': [ + { + 'tab': 'providers', + 'name': '#alt.binaries.hdtv.x264', + 'options': [ + { + 'name': 'enabled', + 'type': 'enabler', + }, + ], + }, + ], +}] diff --git a/couchpotato/core/providers/nzb/x264/main.py b/couchpotato/core/providers/nzb/x264/main.py new file mode 100644 index 0000000..2cbd976 --- /dev/null +++ b/couchpotato/core/providers/nzb/x264/main.py @@ -0,0 +1,89 @@ +from couchpotato.core.event import fireEvent +from couchpotato.core.helpers.rss import RSS +from couchpotato.core.logger import CPLog +from couchpotato.core.providers.nzb.base import NZBProvider +from dateutil.parser import parse +from imdb.parser.http.bsouplxml._bsoup import SoupStrainer, BeautifulSoup +import urllib +import urllib2 +from urllib import urlencode +from urllib import quote_plus +import time +import re + +log = CPLog(__name__) + + +class X264(NZBProvider, RSS): + + urls = { + 'download': 'http://85.214.105.230/get_nzb.php?id=%s§ion=hd', + 'search': 'http://85.214.105.230/x264/requests.php?release=%s&status=FILLED&age=700&sort=ID', + 'regex': '