diff --git a/couchpotato/core/downloaders/deluge/main.py b/couchpotato/core/downloaders/deluge/main.py
index 7ca24292..4cd90c43 100644
--- a/couchpotato/core/downloaders/deluge/main.py
+++ b/couchpotato/core/downloaders/deluge/main.py
@@ -2,7 +2,7 @@ from base64 import b64encode, b16encode, b32decode
from bencode import bencode as benc, bdecode
from couchpotato.core.downloaders.base import Downloader, ReleaseDownloadList
from couchpotato.core.helpers.encoding import isInt, sp
-from couchpotato.core.helpers.variable import tryFloat
+from couchpotato.core.helpers.variable import tryFloat, cleanHost
from couchpotato.core.logger import CPLog
from datetime import timedelta
from hashlib import sha1
@@ -22,7 +22,7 @@ class Deluge(Downloader):
def connect(self):
# Load host from config and split out port.
- host = self.conf('host').split(':')
+ host = cleanHost(self.conf('host'), protocol = False).split(':')
if not isInt(host[1]):
log.error('Config properties are not filled in correctly, port is missing.')
return False
diff --git a/couchpotato/core/downloaders/nzbget/main.py b/couchpotato/core/downloaders/nzbget/main.py
index 2dc6cfcb..a05fb118 100644
--- a/couchpotato/core/downloaders/nzbget/main.py
+++ b/couchpotato/core/downloaders/nzbget/main.py
@@ -1,7 +1,7 @@
from base64 import standard_b64encode
from couchpotato.core.downloaders.base import Downloader, ReleaseDownloadList
from couchpotato.core.helpers.encoding import ss, sp
-from couchpotato.core.helpers.variable import tryInt, md5
+from couchpotato.core.helpers.variable import tryInt, md5, cleanHost
from couchpotato.core.logger import CPLog
from datetime import timedelta
import re
@@ -17,7 +17,7 @@ class NZBGet(Downloader):
protocol = ['nzb']
- url = '%(protocol)s://%(username)s:%(password)s@%(host)s/xmlrpc'
+ rpc = 'xmlrpc'
def download(self, data = None, media = None, filedata = None):
if not media: media = {}
@@ -29,10 +29,11 @@ class NZBGet(Downloader):
log.info('Sending "%s" to NZBGet.', data.get('name'))
- url = self.url % {'protocol': 'https' if self.conf('ssl') else 'http', 'host': self.conf('host'), 'username': self.conf('username'), 'password': self.conf('password')}
nzb_name = ss('%s.nzb' % self.createNzbName(data, media))
+ url = cleanHost(host = self.conf('host'), ssl = self.conf('ssl'), username = self.conf('username'), password = self.conf('password')) + self.rpc
rpc = xmlrpclib.ServerProxy(url)
+
try:
if rpc.writelog('INFO', 'CouchPotato connected to drop off %s.' % nzb_name):
log.debug('Successfully connected to NZBGet')
@@ -71,9 +72,9 @@ class NZBGet(Downloader):
log.debug('Checking NZBGet download status.')
- url = self.url % {'protocol': 'https' if self.conf('ssl') else 'http', 'host': self.conf('host'), 'username': self.conf('username'), 'password': self.conf('password')}
-
+ url = cleanHost(host = self.conf('host'), ssl = self.conf('ssl'), username = self.conf('username'), password = self.conf('password')) + self.rpc
rpc = xmlrpclib.ServerProxy(url)
+
try:
if rpc.writelog('INFO', 'CouchPotato connected to check status'):
log.debug('Successfully connected to NZBGet')
@@ -157,9 +158,9 @@ class NZBGet(Downloader):
log.info('%s failed downloading, deleting...', release_download['name'])
- url = self.url % {'host': self.conf('host'), 'username': self.conf('username'), 'password': self.conf('password')}
-
+ url = cleanHost(host = self.conf('host'), ssl = self.conf('ssl'), username = self.conf('username'), password = self.conf('password')) + self.rpc
rpc = xmlrpclib.ServerProxy(url)
+
try:
if rpc.writelog('INFO', 'CouchPotato connected to delete some history'):
log.debug('Successfully connected to NZBGet')
diff --git a/couchpotato/core/downloaders/nzbvortex/__init__.py b/couchpotato/core/downloaders/nzbvortex/__init__.py
index 3b95698e..3087d75b 100644
--- a/couchpotato/core/downloaders/nzbvortex/__init__.py
+++ b/couchpotato/core/downloaders/nzbvortex/__init__.py
@@ -22,7 +22,15 @@ config = [{
},
{
'name': 'host',
- 'default': 'https://localhost:4321',
+ 'default': 'localhost:4321',
+ 'description': 'Hostname with port. Usually localhost:4321',
+ },
+ {
+ 'name': 'ssl',
+ 'default': 1,
+ 'type': 'bool',
+ 'advanced': True,
+ 'description': 'Use HyperText Transfer Protocol Secure, or https',
},
{
'name': 'api_key',
diff --git a/couchpotato/core/downloaders/nzbvortex/main.py b/couchpotato/core/downloaders/nzbvortex/main.py
index 02256576..d2615bfd 100644
--- a/couchpotato/core/downloaders/nzbvortex/main.py
+++ b/couchpotato/core/downloaders/nzbvortex/main.py
@@ -116,7 +116,7 @@ class NZBVortex(Downloader):
params = tryUrlencode(parameters)
- url = cleanHost(self.conf('host')) + 'api/' + call
+ url = cleanHost(self.conf('host'), ssl = self.conf('ssl')) + 'api/' + call
try:
data = self.urlopen('%s?%s' % (url, params), *args, **kwargs)
diff --git a/couchpotato/core/downloaders/rtorrent/__init__.py b/couchpotato/core/downloaders/rtorrent/__init__.py
index 684ea45e..dbef6e6f 100755
--- a/couchpotato/core/downloaders/rtorrent/__init__.py
+++ b/couchpotato/core/downloaders/rtorrent/__init__.py
@@ -20,11 +20,32 @@ config = [{
'type': 'enabler',
'radio_group': 'torrent',
},
+# @RuudBurger: How do I migrate this?
+# {
+# 'name': 'url',
+# 'default': 'http://localhost:80/RPC2',
+# 'description': 'XML-RPC Endpoint URI. Usually scgi://localhost:5000 '
+# 'or http://localhost:80/RPC2'
+# },
{
- 'name': 'url',
- 'default': 'http://localhost:80/RPC2',
- 'description': 'XML-RPC Endpoint URI. Usually scgi://localhost:5000 '
- 'or http://localhost:80/RPC2'
+ 'name': 'host',
+ 'default': 'localhost:80',
+ 'description': 'Hostname with port or XML-RPC Endpoint URI. Usually scgi://localhost:5000 '
+ 'or localhost:80'
+ },
+ {
+ 'name': 'ssl',
+ 'default': 0,
+ 'type': 'bool',
+ 'advanced': True,
+ 'description': 'Use HyperText Transfer Protocol Secure, or https',
+ },
+ {
+ 'name': 'rpc_url',
+ 'type': 'string',
+ 'default': 'RPC2',
+ 'advanced': True,
+ 'description': 'Change if you don\'t run rTorrent RPC at the default url.',
},
{
'name': 'username',
diff --git a/couchpotato/core/downloaders/rtorrent/main.py b/couchpotato/core/downloaders/rtorrent/main.py
index 926bb415..7dc6abbf 100755
--- a/couchpotato/core/downloaders/rtorrent/main.py
+++ b/couchpotato/core/downloaders/rtorrent/main.py
@@ -1,7 +1,9 @@
from base64 import b16encode, b32decode
from bencode import bencode, bdecode
from couchpotato.core.downloaders.base import Downloader, ReleaseDownloadList
+from couchpotato.core.event import fireEvent
from couchpotato.core.helpers.encoding import sp
+from couchpotato.core.helpers.variable import cleanHost
from couchpotato.core.logger import CPLog
from datetime import timedelta
from hashlib import sha1
@@ -17,24 +19,30 @@ class rTorrent(Downloader):
protocol = ['torrent', 'torrent_magnet']
rt = None
+ # Migration url to host options
+ def __init__(self):
+ super(rTorrent, self).__init__()
+ if self.conf('url'):
+ self.conf('ssl', value = (self.conf('url').split('://')[0].strip() == 'https'))
+ self.conf('host', value = self.conf('url').split('://')[-1].split('/')[0].strip())
+ self.conf('rpc_url', value = self.conf('url').split('://')[-1].split('/',1)[1].strip('/ '))
+ self.conf('url', value = '')
+
def connect(self):
# Already connected?
if self.rt is not None:
return self.rt
- # Ensure url is set
- if not self.conf('url'):
- log.error('Config properties are not filled in correctly, url is missing.')
- return False
+ url = cleanHost(self.conf('host'), protocol = True, ssl = self.conf('ssl')) + '/' + self.conf('rpc_url').strip('/ ') + '/'
if self.conf('username') and self.conf('password'):
self.rt = RTorrent(
- self.conf('url'),
+ url,
self.conf('username'),
self.conf('password')
)
else:
- self.rt = RTorrent(self.conf('url'))
+ self.rt = RTorrent(url)
return self.rt
diff --git a/couchpotato/core/downloaders/sabnzbd/__init__.py b/couchpotato/core/downloaders/sabnzbd/__init__.py
index 48692dae..1edbbebf 100644
--- a/couchpotato/core/downloaders/sabnzbd/__init__.py
+++ b/couchpotato/core/downloaders/sabnzbd/__init__.py
@@ -24,6 +24,13 @@ config = [{
'name': 'host',
'default': 'localhost:8080',
},
+ {
+ 'name': 'ssl',
+ 'default': 0,
+ 'type': 'bool',
+ 'advanced': True,
+ 'description': 'Use HyperText Transfer Protocol Secure, or https',
+ },
{
'name': 'api_key',
'label': 'Api Key',
diff --git a/couchpotato/core/downloaders/sabnzbd/main.py b/couchpotato/core/downloaders/sabnzbd/main.py
index 0519cf62..1d9073ff 100644
--- a/couchpotato/core/downloaders/sabnzbd/main.py
+++ b/couchpotato/core/downloaders/sabnzbd/main.py
@@ -165,7 +165,7 @@ class Sabnzbd(Downloader):
def call(self, request_params, use_json = True, **kwargs):
- url = cleanHost(self.conf('host')) + 'api?' + tryUrlencode(mergeDicts(request_params, {
+ url = cleanHost(self.conf('host'), ssl = self.conf('ssl')) + 'api?' + tryUrlencode(mergeDicts(request_params, {
'apikey': self.conf('api_key'),
'output': 'json'
}))
diff --git a/couchpotato/core/downloaders/synology/main.py b/couchpotato/core/downloaders/synology/main.py
index 74bc449e..7299fa81 100644
--- a/couchpotato/core/downloaders/synology/main.py
+++ b/couchpotato/core/downloaders/synology/main.py
@@ -1,5 +1,6 @@
from couchpotato.core.downloaders.base import Downloader
from couchpotato.core.helpers.encoding import isInt
+from couchpotato.core.helpers.variable import cleanHost
from couchpotato.core.logger import CPLog
import json
import requests
@@ -21,7 +22,7 @@ class Synology(Downloader):
log.error('Sending "%s" (%s) to Synology.', (data['name'], data['protocol']))
# Load host from config and split out port.
- host = self.conf('host').split(':')
+ host = cleanHost(self.conf('host'), protocol = False).split(':')
if not isInt(host[1]):
log.error('Config properties are not filled in correctly, port is missing.')
return False
diff --git a/couchpotato/core/downloaders/transmission/main.py b/couchpotato/core/downloaders/transmission/main.py
index 620b0d60..d41337f0 100644
--- a/couchpotato/core/downloaders/transmission/main.py
+++ b/couchpotato/core/downloaders/transmission/main.py
@@ -1,7 +1,7 @@
from base64 import b64encode
from couchpotato.core.downloaders.base import Downloader, ReleaseDownloadList
from couchpotato.core.helpers.encoding import isInt, sp
-from couchpotato.core.helpers.variable import tryInt, tryFloat
+from couchpotato.core.helpers.variable import tryInt, tryFloat, cleanHost
from couchpotato.core.logger import CPLog
from datetime import timedelta
import httplib
@@ -21,13 +21,13 @@ class Transmission(Downloader):
def connect(self):
# Load host from config and split out port.
- host = self.conf('host').split(':')
+ host = cleanHost(self.conf('host'), protocol = False).split(':')
if not isInt(host[1]):
log.error('Config properties are not filled in correctly, port is missing.')
return False
if not self.trpc:
- self.trpc = TransmissionRPC(host[0], port = host[1], rpc_url = self.conf('rpc_url'), username = self.conf('username'), password = self.conf('password'))
+ self.trpc = TransmissionRPC(host[0], port = host[1], rpc_url = self.conf('rpc_url').strip('/ '), username = self.conf('username'), password = self.conf('password'))
return self.trpc
diff --git a/couchpotato/core/downloaders/utorrent/main.py b/couchpotato/core/downloaders/utorrent/main.py
index 77cf2f96..89f75ccf 100644
--- a/couchpotato/core/downloaders/utorrent/main.py
+++ b/couchpotato/core/downloaders/utorrent/main.py
@@ -2,7 +2,7 @@ from base64 import b16encode, b32decode
from bencode import bencode as benc, bdecode
from couchpotato.core.downloaders.base import Downloader, ReleaseDownloadList
from couchpotato.core.helpers.encoding import isInt, ss, sp
-from couchpotato.core.helpers.variable import tryInt, tryFloat
+from couchpotato.core.helpers.variable import tryInt, tryFloat, cleanHost
from couchpotato.core.logger import CPLog
from datetime import timedelta
from hashlib import sha1
@@ -37,7 +37,7 @@ class uTorrent(Downloader):
def connect(self):
# Load host from config and split out port.
- host = self.conf('host').split(':')
+ host = cleanHost(self.conf('host'), protocol = False).split(':')
if not isInt(host[1]):
log.error('Config properties are not filled in correctly, port is missing.')
return False
diff --git a/couchpotato/core/helpers/variable.py b/couchpotato/core/helpers/variable.py
index 7146f954..0cfaa571 100644
--- a/couchpotato/core/helpers/variable.py
+++ b/couchpotato/core/helpers/variable.py
@@ -118,12 +118,22 @@ def isLocalIP(ip):
def getExt(filename):
return os.path.splitext(filename)[1][1:]
-def cleanHost(host):
- if not host.startswith(('http://', 'https://')):
- host = 'http://' + host
+def cleanHost(host, protocol = True, ssl = False, username = None, password = None):
- host = host.rstrip('/')
- host += '/'
+ if not '://' in host and protocol:
+ host = 'https://' if ssl else 'http://' + host
+
+ if not protocol:
+ host = host.split('://', 1)[-1]
+
+ if protocol and username and password:
+ login = '%s:%s@' % (username, password)
+ if not login in host:
+ host.replace('://', '://' + login, 1)
+
+ host = host.rstrip('/ ')
+ if protocol:
+ host += '/'
return host
diff --git a/couchpotato/runner.py b/couchpotato/runner.py
index 610fff8b..36d43564 100644
--- a/couchpotato/runner.py
+++ b/couchpotato/runner.py
@@ -168,7 +168,7 @@ def runCouchPotato(options, base_path, args, data_dir = None, log_dir = None, En
logger.addHandler(hdlr)
# To file
- hdlr2 = handlers.RotatingFileHandler(Env.get('log_path'), 'a', 500000, 10)
+ hdlr2 = handlers.RotatingFileHandler(Env.get('log_path'), 'a', 500000, 10, encoding = Env.get('encoding'))
hdlr2.setFormatter(formatter)
logger.addHandler(hdlr2)