diff --git a/couchpotato/__init__.py b/couchpotato/__init__.py
index daa93bcc..9df16122 100644
--- a/couchpotato/__init__.py
+++ b/couchpotato/__init__.py
@@ -40,6 +40,8 @@ class WebHandler(BaseHandler):
return
try:
+ if route == 'robots.txt':
+ self.set_header('Content-Type', 'text/plain')
self.write(views[route]())
except:
log.error("Failed doing web request '%s': %s", (route, traceback.format_exc()))
@@ -60,6 +62,13 @@ def index():
addView('', index)
+# Web view
+def robots():
+ return 'User-agent: * \n' \
+ 'Disallow: /'
+addView('robots.txt', robots)
+
+
# API docs
def apiDocs():
routes = list(api.keys())
diff --git a/couchpotato/api.py b/couchpotato/api.py
index 2ce4312c..3c8275dc 100644
--- a/couchpotato/api.py
+++ b/couchpotato/api.py
@@ -7,7 +7,6 @@ import urllib
from couchpotato.core.helpers.request import getParams
from couchpotato.core.logger import CPLog
-from tornado.ioloop import IOLoop
from tornado.web import RequestHandler, asynchronous
@@ -34,7 +33,7 @@ def run_async(func):
def run_handler(route, kwargs, callback = None):
try:
res = api[route](**kwargs)
- IOLoop.current().add_callback(callback, res, route)
+ callback(res, route)
except:
log.error('Failed doing api request "%s": %s', (route, traceback.format_exc()))
callback({'success': False, 'error': 'Failed returning results'}, route)
@@ -84,10 +83,11 @@ def addNonBlockApiView(route, func_tuple, docs = None, **kwargs):
# Blocking API handler
class ApiHandler(RequestHandler):
+ route = None
@asynchronous
def get(self, route, *args, **kwargs):
- route = route.strip('/')
+ self.route = route = route.strip('/')
if not api.get(route):
self.write('API call doesn\'t seem to exist')
self.finish()
@@ -124,7 +124,7 @@ class ApiHandler(RequestHandler):
except:
log.error('Failed write error "%s": %s', (route, traceback.format_exc()))
- api_locks[route].release()
+ self.unlock()
post = get
@@ -151,7 +151,11 @@ class ApiHandler(RequestHandler):
try: self.finish({'success': False, 'error': 'Failed returning results'})
except: pass
- api_locks[route].release()
+ self.unlock()
+
+ def unlock(self):
+ try: api_locks[self.route].release()
+ except: pass
def addApiView(route, func, static = False, docs = None, **kwargs):
diff --git a/couchpotato/core/media/_base/providers/torrent/sceneaccess.py b/couchpotato/core/media/_base/providers/torrent/sceneaccess.py
index e172f6ad..17c98915 100644
--- a/couchpotato/core/media/_base/providers/torrent/sceneaccess.py
+++ b/couchpotato/core/media/_base/providers/torrent/sceneaccess.py
@@ -42,6 +42,7 @@ class Base(TorrentProvider):
link = result.find('td', attrs = {'class': 'ttr_name'}).find('a')
url = result.find('td', attrs = {'class': 'td_dl'}).find('a')
+ seeders = result.find('td', attrs = {'class': 'ttr_seeders'}).find('a')
leechers = result.find('td', attrs = {'class': 'ttr_leechers'}).find('a')
torrent_id = link['href'].replace('details?id=', '')
@@ -51,7 +52,7 @@ class Base(TorrentProvider):
'url': self.urls['download'] % url['href'],
'detail_url': self.urls['detail'] % torrent_id,
'size': self.parseSize(result.find('td', attrs = {'class': 'ttr_size'}).contents[0]),
- 'seeders': tryInt(result.find('td', attrs = {'class': 'ttr_seeders'}).find('a').string),
+ 'seeders': tryInt(seeders.string) if seeders else 0,
'leechers': tryInt(leechers.string) if leechers else 0,
'get_more_info': self.getMoreInfo,
})
diff --git a/couchpotato/core/media/movie/searcher.py b/couchpotato/core/media/movie/searcher.py
index 11aa975d..6d3ee836 100755
--- a/couchpotato/core/media/movie/searcher.py
+++ b/couchpotato/core/media/movie/searcher.py
@@ -394,8 +394,9 @@ class MovieSearcher(SearcherBase, MovieTypeBase):
log.info('Trying next release for: %s', getTitle(media))
self.single(media, manual = manual, force_download = force_download)
- return True
-
+ return True
+
+ return False
except:
log.error('Failed searching for next release: %s', traceback.format_exc())
return False
diff --git a/couchpotato/core/notifications/core/main.py b/couchpotato/core/notifications/core/main.py
index fa8e9a7e..4055c413 100644
--- a/couchpotato/core/notifications/core/main.py
+++ b/couchpotato/core/notifications/core/main.py
@@ -110,11 +110,11 @@ class CoreNotifier(Notification):
if limit_offset:
splt = splitString(limit_offset)
- limit = splt[0]
- offset = 0 if len(splt) is 1 else splt[1]
- results = db.get_many('notification', limit = limit, offset = offset, with_doc = True)
+ limit = tryInt(splt[0])
+ offset = tryInt(0 if len(splt) is 1 else splt[1])
+ results = db.all('notification', limit = limit, offset = offset, with_doc = True)
else:
- results = db.get_many('notification', limit = 200, with_doc = True)
+ results = db.all('notification', limit = 200, with_doc = True)
notifications = []
for n in results:
diff --git a/couchpotato/templates/login.html b/couchpotato/templates/login.html
index 61c12dcc..5a922f9b 100644
--- a/couchpotato/templates/login.html
+++ b/couchpotato/templates/login.html
@@ -6,6 +6,7 @@
+
{% for url in fireEvent('clientscript.get_styles', location = 'front', single = True) %}
{% end %}