You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.3 KiB
73 lines
2.3 KiB
from base64 import b32decode, b16encode
|
|
from couchpotato.core.event import addEvent
|
|
from couchpotato.core.helpers.encoding import toSafeString
|
|
from couchpotato.core.logger import CPLog
|
|
from couchpotato.core.plugins.base import Plugin
|
|
from couchpotato.environment import Env
|
|
import os
|
|
import re
|
|
import traceback
|
|
|
|
log = CPLog(__name__)
|
|
|
|
class Downloader(Plugin):
|
|
|
|
type = []
|
|
|
|
def __init__(self):
|
|
addEvent('download', self.download)
|
|
addEvent('download.status', self.getDownloadStatus)
|
|
|
|
def download(self, data = {}, movie = {}, manual = False, filedata = None):
|
|
pass
|
|
|
|
def getDownloadStatus(self, data = {}, movie = {}):
|
|
pass
|
|
|
|
def createNzbName(self, data, movie):
|
|
tag = self.cpTag(movie)
|
|
return '%s%s' % (toSafeString(data.get('name')[:127 - len(tag)]), tag)
|
|
|
|
def createFileName(self, data, filedata, movie):
|
|
name = os.path.join(self.createNzbName(data, movie))
|
|
if data.get('type') == 'nzb' and 'DOCTYPE nzb' not in filedata and '</nzb>' not in filedata:
|
|
return '%s.%s' % (name, 'rar')
|
|
return '%s.%s' % (name, data.get('type'))
|
|
|
|
def cpTag(self, movie):
|
|
if Env.setting('enabled', 'renamer'):
|
|
return '.cp(' + movie['library'].get('identifier') + ')' if movie['library'].get('identifier') else ''
|
|
|
|
return ''
|
|
|
|
def isCorrectType(self, item_type):
|
|
is_correct = item_type in self.type
|
|
|
|
if not is_correct:
|
|
log.debug("Downloader doesn't support this type")
|
|
|
|
return is_correct
|
|
|
|
def magnetToTorrent(self, magnet_link):
|
|
torrent_hash = re.findall('urn:btih:([\w]{32,40})', magnet_link)[0]
|
|
|
|
# Convert base 32 to hex
|
|
if len(torrent_hash) == 32:
|
|
torrent_hash = b16encode(b32decode(torrent_hash))
|
|
|
|
url = 'http://torrage.com/torrent/%s.torrent' % torrent_hash
|
|
|
|
try:
|
|
filedata = self.urlopen(url)
|
|
return filedata
|
|
except:
|
|
log.error('Failed converting magnet url to torrent: %s, %s', (url, traceback.format_exc()))
|
|
|
|
return False
|
|
|
|
def isDisabled(self, manual):
|
|
return not self.isEnabled(manual)
|
|
|
|
def isEnabled(self, manual):
|
|
d_manual = self.conf('manual', default = False)
|
|
return super(Downloader, self).isEnabled() and ((d_manual and manual) or (d_manual is False))
|
|
|