Fixed redirects and blank pages ... FINALY!

This commit is contained in:
echel0n 2014-06-29 18:54:41 -07:00
parent b3d46f77e9
commit 6ce68e3d97

View file

@ -21,7 +21,6 @@ import base64
import inspect import inspect
import traceback import traceback
import urlparse import urlparse
import zipfile
import os.path import os.path
@ -50,7 +49,7 @@ from sickbeard import network_timezones
from sickbeard.providers import newznab, rsstorrent from sickbeard.providers import newznab, rsstorrent
from sickbeard.common import Quality, Overview, statusStrings, qualityPresetStrings, cpu_presets from sickbeard.common import Quality, Overview, statusStrings, qualityPresetStrings, cpu_presets
from sickbeard.common import SNATCHED, SKIPPED, UNAIRED, IGNORED, ARCHIVED, WANTED, FAILED from sickbeard.common import SNATCHED, UNAIRED, IGNORED, ARCHIVED, WANTED, FAILED
from sickbeard.common import SD, HD720p, HD1080p from sickbeard.common import SD, HD720p, HD1080p
from sickbeard.exceptions import ex from sickbeard.exceptions import ex
from sickbeard.scene_exceptions import get_scene_exceptions from sickbeard.scene_exceptions import get_scene_exceptions
@ -66,7 +65,6 @@ from lib.dateutil import tz
from lib.unrar2 import RarFile from lib.unrar2 import RarFile
from lib import subliminal from lib import subliminal
import tornado
from trakt import TraktCall from trakt import TraktCall
try: try:
@ -82,10 +80,7 @@ except ImportError:
from lib import adba from lib import adba
from Cheetah.Template import Template from Cheetah.Template import Template
from tornado.web import RequestHandler, HTTPError, asynchronous from tornado.web import RequestHandler, HTTPError
req_headers = None
def authenticated(handler_class): def authenticated(handler_class):
def wrap_execute(handler_execute): def wrap_execute(handler_execute):
@ -130,18 +125,30 @@ def authenticated(handler_class):
handler_class._execute = wrap_execute(handler_class._execute) handler_class._execute = wrap_execute(handler_class._execute)
return handler_class return handler_class
class HTTPRedirect(Exception):
"""Exception raised when the request should be redirected."""
def __init__(self, url, permanent=False, status=None):
self.url = url
self.permanent = permanent
self.status = status
Exception.__init__(self, url, permanent, status)
def __call__(self):
"""Use this exception as a request.handler (raise self)."""
raise self
def redirect(url, permanent=False, status=None):
url = urlparse.urljoin(sickbeard.WEB_ROOT, url)
raise HTTPRedirect(url, permanent, status)
@authenticated @authenticated
class MainHandler(RequestHandler): class MainHandler(RequestHandler):
def __init__(self, application, request, **kwargs): def __init__(self, application, request, **kwargs):
super(MainHandler, self).__init__(application, request, **kwargs) super(MainHandler, self).__init__(application, request, **kwargs)
global req_headers
sickbeard.REMOTE_IP = self.request.headers.get('X-Forwarded-For', sickbeard.REMOTE_IP = self.request.headers.get('X-Forwarded-For',
self.request.headers.get('X-Real-Ip', self.request.remote_ip)) self.request.headers.get('X-Real-Ip', self.request.remote_ip))
req_headers = self.request.headers
def http_error_401_handler(self): def http_error_401_handler(self):
""" Custom handler for 401 error """ """ Custom handler for 401 error """
return r'''<!DOCTYPE html> return r'''<!DOCTYPE html>
@ -156,15 +163,11 @@ class MainHandler(RequestHandler):
</html> </html>
''' % ('Access denied', 401) ''' % ('Access denied', 401)
def http_error_404_handler(self):
""" Custom handler for 404 error, redirect back to main page """
return self.redirectTo('/home/')
def write_error(self, status_code, **kwargs): def write_error(self, status_code, **kwargs):
if status_code == 401: if status_code == 401:
self.finish(self.http_error_401_handler()) self.finish(self.http_error_401_handler())
elif status_code == 404: elif status_code == 404:
self.redirectTo('/home/') redirect('/home/')
else: else:
logger.log(traceback.format_exc(), logger.DEBUG) logger.log(traceback.format_exc(), logger.DEBUG)
super(MainHandler, self).write_error(status_code, **kwargs) super(MainHandler, self).write_error(status_code, **kwargs)
@ -212,20 +215,17 @@ class MainHandler(RequestHandler):
raise HTTPError(404) raise HTTPError(404)
def redirectTo(self, url):
url = urlparse.urljoin(sickbeard.WEB_ROOT, url)
logger.log(u"Redirecting to: " + url, logger.DEBUG)
self._transforms = []
self.redirect(url)
def get(self, *args, **kwargs): def get(self, *args, **kwargs):
response = self._dispatch() try:
if response: self.write(self._dispatch())
self.write(response) except HTTPRedirect,inst:
self.redirect(inst.url, inst.permanent, inst.status)
def post(self, *args, **kwargs): def post(self, *args, **kwargs):
self._dispatch() try:
self.write(self._dispatch())
except HTTPRedirect, inst:
self.redirect(inst.url, inst.permanent, inst.status)
def robots_txt(self, *args, **kwargs): def robots_txt(self, *args, **kwargs):
""" Keep web crawlers out """ """ Keep web crawlers out """
@ -267,7 +267,7 @@ class MainHandler(RequestHandler):
sickbeard.HOME_LAYOUT = layout sickbeard.HOME_LAYOUT = layout
return self.redirectTo("/home/") redirect("/home/")
def setHistoryLayout(self, layout): def setHistoryLayout(self, layout):
@ -276,13 +276,13 @@ class MainHandler(RequestHandler):
sickbeard.HISTORY_LAYOUT = layout sickbeard.HISTORY_LAYOUT = layout
return self.redirectTo("/history/") redirect("/history/")
def toggleDisplayShowSpecials(self, show): def toggleDisplayShowSpecials(self, show):
sickbeard.DISPLAY_SHOW_SPECIALS = not sickbeard.DISPLAY_SHOW_SPECIALS sickbeard.DISPLAY_SHOW_SPECIALS = not sickbeard.DISPLAY_SHOW_SPECIALS
return self.redirectTo("/home/displayShow?show=" + show) redirect("/home/displayShow?show=" + show)
def setComingEpsLayout(self, layout): def setComingEpsLayout(self, layout):
if layout not in ('poster', 'banner', 'list'): if layout not in ('poster', 'banner', 'list'):
@ -290,13 +290,13 @@ class MainHandler(RequestHandler):
sickbeard.COMING_EPS_LAYOUT = layout sickbeard.COMING_EPS_LAYOUT = layout
return self.redirectTo("/comingEpisodes/") redirect("/comingEpisodes/")
def toggleComingEpsDisplayPaused(self, *args, **kwargs): def toggleComingEpsDisplayPaused(self, *args, **kwargs):
sickbeard.COMING_EPS_DISPLAY_PAUSED = not sickbeard.COMING_EPS_DISPLAY_PAUSED sickbeard.COMING_EPS_DISPLAY_PAUSED = not sickbeard.COMING_EPS_DISPLAY_PAUSED
return self.redirectTo("/comingEpisodes/") redirect("/comingEpisodes/")
def setComingEpsSort(self, sort): def setComingEpsSort(self, sort):
if sort not in ('date', 'network', 'show'): if sort not in ('date', 'network', 'show'):
@ -304,7 +304,7 @@ class MainHandler(RequestHandler):
sickbeard.COMING_EPS_SORT = sort sickbeard.COMING_EPS_SORT = sort
return self.redirectTo("/comingEpisodes/") redirect("/comingEpisodes/")
def comingEpisodes(self, layout="None"): def comingEpisodes(self, layout="None"):
@ -355,7 +355,7 @@ class MainHandler(RequestHandler):
sql_results.sort(sorts[sickbeard.COMING_EPS_SORT]) sql_results.sort(sorts[sickbeard.COMING_EPS_SORT])
t = PageTemplate(file="comingEpisodes.tmpl") t = PageTemplate(headers=self.request.headers, file="comingEpisodes.tmpl")
# paused_item = { 'title': '', 'path': 'toggleComingEpsDisplayPaused' } # paused_item = { 'title': '', 'path': 'toggleComingEpsDisplayPaused' }
# paused_item['title'] = 'Hide Paused' if sickbeard.COMING_EPS_DISPLAY_PAUSED else 'Show Paused' # paused_item['title'] = 'Hide Paused' if sickbeard.COMING_EPS_DISPLAY_PAUSED else 'Show Paused'
paused_item = {'title': 'View Paused:', 'path': {'': ''}} paused_item = {'title': 'View Paused:', 'path': {'': ''}}
@ -455,12 +455,17 @@ class MainHandler(RequestHandler):
return ical return ical
def _genericMessage(self, subject, message):
t = PageTemplate(headers=self.request.headers, file="genericMessage.tmpl")
t.submenu = HomeMenu()
t.subject = subject
t.message = message
return _munge(t)
browser = WebFileBrowser browser = WebFileBrowser
class PageTemplate(Template): class PageTemplate(Template):
def __init__(self, *args, **KWs): def __init__(self, headers, *args, **KWs):
global req_headers
KWs['file'] = os.path.join(sickbeard.PROG_DIR, "gui/" + sickbeard.GUI_NAME + "/interfaces/default/", KWs['file'] = os.path.join(sickbeard.PROG_DIR, "gui/" + sickbeard.GUI_NAME + "/interfaces/default/",
KWs['file']) KWs['file'])
super(PageTemplate, self).__init__(*args, **KWs) super(PageTemplate, self).__init__(*args, **KWs)
@ -471,18 +476,18 @@ class PageTemplate(Template):
self.sbHttpsEnabled = sickbeard.ENABLE_HTTPS self.sbHttpsEnabled = sickbeard.ENABLE_HTTPS
self.sbHandleReverseProxy = sickbeard.HANDLE_REVERSE_PROXY self.sbHandleReverseProxy = sickbeard.HANDLE_REVERSE_PROXY
if req_headers['Host'][0] == '[': if headers['Host'][0] == '[':
self.sbHost = re.match("^\[.*\]", req_headers['Host'], re.X | re.M | re.S).group(0) self.sbHost = re.match("^\[.*\]", headers['Host'], re.X | re.M | re.S).group(0)
else: else:
self.sbHost = re.match("^[^:]+", req_headers['Host'], re.X | re.M | re.S).group(0) self.sbHost = re.match("^[^:]+", headers['Host'], re.X | re.M | re.S).group(0)
if "X-Forwarded-Host" in req_headers: if "X-Forwarded-Host" in headers:
self.sbHost = req_headers['X-Forwarded-Host'] self.sbHost = headers['X-Forwarded-Host']
if "X-Forwarded-Port" in req_headers: if "X-Forwarded-Port" in headers:
sbHttpPort = req_headers['X-Forwarded-Port'] sbHttpPort = headers['X-Forwarded-Port']
self.sbHttpsPort = sbHttpPort self.sbHttpsPort = sbHttpPort
if "X-Forwarded-Proto" in req_headers: if "X-Forwarded-Proto" in headers:
self.sbHttpsEnabled = True if req_headers['X-Forwarded-Proto'] == 'https' else False self.sbHttpsEnabled = True if headers['X-Forwarded-Proto'] == 'https' else False
logPageTitle = 'Logs &amp; Errors' logPageTitle = 'Logs &amp; Errors'
if len(classes.ErrorViewer.errors): if len(classes.ErrorViewer.errors):
@ -509,20 +514,12 @@ class IndexerWebUI(MainHandler):
showDirList = "" showDirList = ""
for curShowDir in self.config['_showDir']: for curShowDir in self.config['_showDir']:
showDirList += "showDir=" + curShowDir + "&" showDirList += "showDir=" + curShowDir + "&"
return self.redirectTo("/home/addShows/addShow?" + showDirList + "seriesList=" + searchList) redirect("/home/addShows/addShow?" + showDirList + "seriesList=" + searchList)
def _munge(string): def _munge(string):
return unicode(string).encode('utf-8', 'xmlcharrefreplace') return unicode(string).encode('utf-8', 'xmlcharrefreplace')
def _genericMessage(subject, message):
t = PageTemplate(file="genericMessage.tmpl")
t.submenu = HomeMenu()
t.subject = subject
t.message = message
return _munge(t)
def _getEpisode(show, season=None, episode=None, absolute=None): def _getEpisode(show, season=None, episode=None, absolute=None):
if show is None: if show is None:
return "Invalid show parameters" return "Invalid show parameters"
@ -567,7 +564,7 @@ def ManageMenu():
class ManageSearches(MainHandler): class ManageSearches(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="manage_manageSearches.tmpl") t = PageTemplate(headers=self.request.headers, file="manage_manageSearches.tmpl")
# t.backlogPI = sickbeard.backlogSearchScheduler.action.getProgressIndicator() # t.backlogPI = sickbeard.backlogSearchScheduler.action.getProgressIndicator()
t.backlogPaused = sickbeard.searchQueueScheduler.action.is_backlog_paused() # @UndefinedVariable t.backlogPaused = sickbeard.searchQueueScheduler.action.is_backlog_paused() # @UndefinedVariable
t.backlogRunning = sickbeard.searchQueueScheduler.action.is_backlog_in_progress() # @UndefinedVariable t.backlogRunning = sickbeard.searchQueueScheduler.action.is_backlog_in_progress() # @UndefinedVariable
@ -586,7 +583,7 @@ class ManageSearches(MainHandler):
logger.log(u"Backlog search forced") logger.log(u"Backlog search forced")
ui.notifications.message('Backlog search started') ui.notifications.message('Backlog search started')
return self.redirectTo("/manage/manageSearches/") redirect("/manage/manageSearches/")
def forceSearch(self, *args, **kwargs): def forceSearch(self, *args, **kwargs):
@ -597,7 +594,7 @@ class ManageSearches(MainHandler):
logger.log(u"Daily search forced") logger.log(u"Daily search forced")
ui.notifications.message('Daily search started') ui.notifications.message('Daily search started')
return self.redirectTo("/manage/manageSearches/") redirect("/manage/manageSearches/")
def forceFindPropers(self, *args, **kwargs): def forceFindPropers(self, *args, **kwargs):
@ -608,7 +605,7 @@ class ManageSearches(MainHandler):
logger.log(u"Find propers search forced") logger.log(u"Find propers search forced")
ui.notifications.message('Find propers search started') ui.notifications.message('Find propers search started')
return self.redirectTo("/manage/manageSearches/") redirect("/manage/manageSearches/")
def pauseBacklog(self, paused=None): def pauseBacklog(self, paused=None):
@ -617,12 +614,12 @@ class ManageSearches(MainHandler):
else: else:
sickbeard.searchQueueScheduler.action.unpause_backlog() # @UndefinedVariable sickbeard.searchQueueScheduler.action.unpause_backlog() # @UndefinedVariable
return self.redirectTo("/manage/manageSearches/") redirect("/manage/manageSearches/")
class Manage(MainHandler): class Manage(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="manage.tmpl") t = PageTemplate(headers=self.request.headers, file="manage.tmpl")
t.submenu = ManageMenu() t.submenu = ManageMenu()
return _munge(t) return _munge(t)
@ -660,7 +657,7 @@ class Manage(MainHandler):
else: else:
status_list = [] status_list = []
t = PageTemplate(file="manage_episodeStatuses.tmpl") t = PageTemplate(headers=self.request.headers, file="manage_episodeStatuses.tmpl")
t.submenu = ManageMenu() t.submenu = ManageMenu()
t.whichStatus = whichStatus t.whichStatus = whichStatus
@ -731,7 +728,7 @@ class Manage(MainHandler):
Home(self.application, self.request).setStatus(cur_indexer_id, '|'.join(to_change[cur_indexer_id]), Home(self.application, self.request).setStatus(cur_indexer_id, '|'.join(to_change[cur_indexer_id]),
newStatus, direct=True) newStatus, direct=True)
return self.redirectTo('/manage/episodeStatuses/') redirect('/manage/episodeStatuses/')
def showSubtitleMissed(self, indexer_id, whichSubs): def showSubtitleMissed(self, indexer_id, whichSubs):
@ -769,7 +766,7 @@ class Manage(MainHandler):
def subtitleMissed(self, whichSubs=None): def subtitleMissed(self, whichSubs=None):
t = PageTemplate(file="manage_subtitleMissed.tmpl") t = PageTemplate(headers=self.request.headers, file="manage_subtitleMissed.tmpl")
t.submenu = ManageMenu() t.submenu = ManageMenu()
t.whichSubs = whichSubs t.whichSubs = whichSubs
@ -839,7 +836,7 @@ class Manage(MainHandler):
show = sickbeard.helpers.findCertainShow(sickbeard.showList, int(cur_indexer_id)) show = sickbeard.helpers.findCertainShow(sickbeard.showList, int(cur_indexer_id))
subtitles = show.getEpisode(int(season), int(episode)).downloadSubtitles() subtitles = show.getEpisode(int(season), int(episode)).downloadSubtitles()
return self.redirectTo('/manage/subtitleMissed/') redirect('/manage/subtitleMissed/')
def backlogShow(self, indexer_id): def backlogShow(self, indexer_id):
@ -849,12 +846,12 @@ class Manage(MainHandler):
if show_obj: if show_obj:
sickbeard.backlogSearchScheduler.action.searchBacklog([show_obj]) # @UndefinedVariable sickbeard.backlogSearchScheduler.action.searchBacklog([show_obj]) # @UndefinedVariable
return self.redirectTo("/manage/backlogOverview/") redirect("/manage/backlogOverview/")
def backlogOverview(self, *args, **kwargs): def backlogOverview(self, *args, **kwargs):
t = PageTemplate(file="manage_backlogOverview.tmpl") t = PageTemplate(headers=self.request.headers, file="manage_backlogOverview.tmpl")
t.submenu = ManageMenu() t.submenu = ManageMenu()
showCounts = {} showCounts = {}
@ -896,11 +893,11 @@ class Manage(MainHandler):
def massEdit(self, toEdit=None): def massEdit(self, toEdit=None):
t = PageTemplate(file="manage_massEdit.tmpl") t = PageTemplate(headers=self.request.headers, file="manage_massEdit.tmpl")
t.submenu = ManageMenu() t.submenu = ManageMenu()
if not toEdit: if not toEdit:
return self.redirectTo("/manage/") redirect("/manage/")
showIDs = toEdit.split("|") showIDs = toEdit.split("|")
showList = [] showList = []
@ -1067,7 +1064,7 @@ class Manage(MainHandler):
ui.notifications.error('%d error%s while saving changes:' % (len(errors), "" if len(errors) == 1 else "s"), ui.notifications.error('%d error%s while saving changes:' % (len(errors), "" if len(errors) == 1 else "s"),
" ".join(errors)) " ".join(errors))
return self.redirectTo("/manage/") redirect("/manage/")
def massUpdate(self, toUpdate=None, toRefresh=None, toRename=None, toDelete=None, toMetadata=None, toSubtitle=None): def massUpdate(self, toUpdate=None, toRefresh=None, toRename=None, toDelete=None, toMetadata=None, toSubtitle=None):
@ -1176,12 +1173,12 @@ class Manage(MainHandler):
ui.notifications.message("The following actions were queued:", ui.notifications.message("The following actions were queued:",
messageDetail) messageDetail)
return self.redirectTo("/manage/") redirect("/manage/")
def manageTorrents(self, *args, **kwargs): def manageTorrents(self, *args, **kwargs):
t = PageTemplate(file="manage_torrents.tmpl") t = PageTemplate(headers=self.request.headers, file="manage_torrents.tmpl")
t.info_download_station = '' t.info_download_station = ''
t.submenu = ManageMenu() t.submenu = ManageMenu()
@ -1220,9 +1217,9 @@ class Manage(MainHandler):
myDB.action('DELETE FROM failed WHERE release = ?', [release]) myDB.action('DELETE FROM failed WHERE release = ?', [release])
if toRemove: if toRemove:
raise self.redirectTo('/manage/failedDownloads/') redirect('/manage/failedDownloads/')
t = PageTemplate(file="manage_failedDownloads.tmpl") t = PageTemplate(headers=self.request.headers, file="manage_failedDownloads.tmpl")
t.failedResults = sqlResults t.failedResults = sqlResults
t.limit = limit t.limit = limit
t.submenu = ManageMenu() t.submenu = ManageMenu()
@ -1290,7 +1287,7 @@ class History(MainHandler):
history['actions'].append(action) history['actions'].append(action)
history['actions'].sort(key=lambda x: x['time'], reverse=True) history['actions'].sort(key=lambda x: x['time'], reverse=True)
t = PageTemplate(file="history.tmpl") t = PageTemplate(headers=self.request.headers, file="history.tmpl")
t.historyResults = sqlResults t.historyResults = sqlResults
t.compactResults = compact t.compactResults = compact
t.limit = limit t.limit = limit
@ -1308,7 +1305,7 @@ class History(MainHandler):
myDB.action("DELETE FROM history WHERE 1=1") myDB.action("DELETE FROM history WHERE 1=1")
ui.notifications.message('History cleared') ui.notifications.message('History cleared')
return self.redirectTo("/history/") redirect("/history/")
def trimHistory(self, *args, **kwargs): def trimHistory(self, *args, **kwargs):
@ -1318,7 +1315,7 @@ class History(MainHandler):
(datetime.datetime.today() - datetime.timedelta(days=30)).strftime(history.dateFormat))) (datetime.datetime.today() - datetime.timedelta(days=30)).strftime(history.dateFormat)))
ui.notifications.message('Removed history entries greater than 30 days old') ui.notifications.message('Removed history entries greater than 30 days old')
return self.redirectTo("/history/") redirect("/history/")
ConfigMenu = [ ConfigMenu = [
@ -1336,7 +1333,7 @@ ConfigMenu = [
class ConfigGeneral(MainHandler): class ConfigGeneral(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="config_general.tmpl") t = PageTemplate(headers=self.request.headers, file="config_general.tmpl")
t.submenu = ConfigMenu t.submenu = ConfigMenu
return _munge(t) return _munge(t)
@ -1481,7 +1478,7 @@ class ConfigGeneral(MainHandler):
class ConfigBackupRestore(MainHandler): class ConfigBackupRestore(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="config_backuprestore.tmpl") t = PageTemplate(headers=self.request.headers, file="config_backuprestore.tmpl")
t.submenu = ConfigMenu t.submenu = ConfigMenu
return _munge(t) return _munge(t)
@ -1530,7 +1527,7 @@ class ConfigBackupRestore(MainHandler):
class ConfigSearch(MainHandler): class ConfigSearch(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="config_search.tmpl") t = PageTemplate(headers=self.request.headers, file="config_search.tmpl")
t.submenu = ConfigMenu t.submenu = ConfigMenu
return _munge(t) return _munge(t)
@ -1609,7 +1606,7 @@ class ConfigSearch(MainHandler):
class ConfigPostProcessing(MainHandler): class ConfigPostProcessing(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="config_postProcessing.tmpl") t = PageTemplate(headers=self.request.headers, file="config_postProcessing.tmpl")
t.submenu = ConfigMenu t.submenu = ConfigMenu
return _munge(t) return _munge(t)
@ -1781,7 +1778,7 @@ class ConfigPostProcessing(MainHandler):
class ConfigProviders(MainHandler): class ConfigProviders(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="config_providers.tmpl") t = PageTemplate(headers=self.request.headers, file="config_providers.tmpl")
t.submenu = ConfigMenu t.submenu = ConfigMenu
return _munge(t) return _munge(t)
@ -2151,7 +2148,7 @@ class ConfigProviders(MainHandler):
class ConfigNotifications(MainHandler): class ConfigNotifications(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="config_notifications.tmpl") t = PageTemplate(headers=self.request.headers, file="config_notifications.tmpl")
t.submenu = ConfigMenu t.submenu = ConfigMenu
return _munge(t) return _munge(t)
@ -2355,7 +2352,7 @@ class ConfigNotifications(MainHandler):
class ConfigSubtitles(MainHandler): class ConfigSubtitles(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="config_subtitles.tmpl") t = PageTemplate(headers=self.request.headers, file="config_subtitles.tmpl")
t.submenu = ConfigMenu t.submenu = ConfigMenu
return _munge(t) return _munge(t)
@ -2413,7 +2410,7 @@ class ConfigSubtitles(MainHandler):
class ConfigAnime(MainHandler): class ConfigAnime(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="config_anime.tmpl") t = PageTemplate(headers=self.request.headers, file="config_anime.tmpl")
t.submenu = ConfigMenu t.submenu = ConfigMenu
return _munge(t) return _munge(t)
@ -2457,7 +2454,7 @@ class ConfigAnime(MainHandler):
class Config(MainHandler): class Config(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="config.tmpl") t = PageTemplate(headers=self.request.headers, file="config.tmpl")
t.submenu = ConfigMenu t.submenu = ConfigMenu
return _munge(t) return _munge(t)
@ -2505,7 +2502,7 @@ def HomeMenu():
class HomePostProcess(MainHandler): class HomePostProcess(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="home_postprocess.tmpl") t = PageTemplate(headers=self.request.headers, file="home_postprocess.tmpl")
t.submenu = HomeMenu() t.submenu = HomeMenu()
return _munge(t) return _munge(t)
@ -2516,7 +2513,7 @@ class HomePostProcess(MainHandler):
if sickbeard.versionCheckScheduler.action.check_for_new_version(force=True): if sickbeard.versionCheckScheduler.action.check_for_new_version(force=True):
logger.log(u"Forcing version check") logger.log(u"Forcing version check")
return self.redirectTo("/home/") redirect("/home/")
def processEpisode(self, dir=None, nzbName=None, jobName=None, quiet=None, process_method=None, force=None, def processEpisode(self, dir=None, nzbName=None, jobName=None, quiet=None, process_method=None, force=None,
is_priority=None, failed="0", type="auto"): is_priority=None, failed="0", type="auto"):
@ -2537,7 +2534,7 @@ class HomePostProcess(MainHandler):
is_priority = False is_priority = False
if not dir: if not dir:
return self.redirectTo("/home/postprocess/") redirect("/home/postprocess/")
else: else:
result = processTV.processDir(dir, nzbName, process_method=process_method, force=force, result = processTV.processDir(dir, nzbName, process_method=process_method, force=force,
is_priority=is_priority, failed=failed, type=type) is_priority=is_priority, failed=failed, type=type)
@ -2545,13 +2542,13 @@ class HomePostProcess(MainHandler):
return result return result
result = result.replace("\n", "<br />\n") result = result.replace("\n", "<br />\n")
return _genericMessage("Postprocessing results", result) return self._genericMessage("Postprocessing results", result)
class NewHomeAddShows(MainHandler): class NewHomeAddShows(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="home_addShows.tmpl") t = PageTemplate(headers=self.request.headers, file="home_addShows.tmpl")
t.submenu = HomeMenu() t.submenu = HomeMenu()
return _munge(t) return _munge(t)
@ -2605,7 +2602,7 @@ class NewHomeAddShows(MainHandler):
def massAddTable(self, rootDir=None): def massAddTable(self, rootDir=None):
t = PageTemplate(file="home_massAddTable.tmpl") t = PageTemplate(headers=self.request.headers, file="home_massAddTable.tmpl")
t.submenu = HomeMenu() t.submenu = HomeMenu()
if not rootDir: if not rootDir:
@ -2691,7 +2688,7 @@ class NewHomeAddShows(MainHandler):
Display the new show page which collects a tvdb id, folder, and extra options and Display the new show page which collects a tvdb id, folder, and extra options and
posts them to addNewShow posts them to addNewShow
""" """
t = PageTemplate(file="home_newShow.tmpl") t = PageTemplate(headers=self.request.headers, file="home_newShow.tmpl")
t.submenu = HomeMenu() t.submenu = HomeMenu()
indexer, show_dir, indexer_id, show_name = self.split_extra_show(show_to_add) indexer, show_dir, indexer_id, show_name = self.split_extra_show(show_to_add)
@ -2734,7 +2731,7 @@ class NewHomeAddShows(MainHandler):
Display the new show page which collects a tvdb id, folder, and extra options and Display the new show page which collects a tvdb id, folder, and extra options and
posts them to addNewShow posts them to addNewShow
""" """
t = PageTemplate(file="home_recommendedShows.tmpl") t = PageTemplate(headers=self.request.headers, file="home_recommendedShows.tmpl")
t.submenu = HomeMenu() t.submenu = HomeMenu()
return _munge(t) return _munge(t)
@ -2778,7 +2775,7 @@ class NewHomeAddShows(MainHandler):
""" """
Prints out the page to add existing shows from a root dir Prints out the page to add existing shows from a root dir
""" """
t = PageTemplate(file="home_addExistingShow.tmpl") t = PageTemplate(headers=self.request.headers, file="home_addExistingShow.tmpl")
t.submenu = HomeMenu() t.submenu = HomeMenu()
return _munge(t) return _munge(t)
@ -2802,7 +2799,7 @@ class NewHomeAddShows(MainHandler):
def finishAddShow(): def finishAddShow():
# if there are no extra shows then go home # if there are no extra shows then go home
if not other_shows: if not other_shows:
return self.redirectTo('/home/') redirect('/home/')
# peel off the next one # peel off the next one
next_show_dir = other_shows[0] next_show_dir = other_shows[0]
@ -2827,7 +2824,7 @@ class NewHomeAddShows(MainHandler):
logger.log("Unable to add show due to show selection. Not anough arguments: %s" % (repr(series_pieces)), logger.log("Unable to add show due to show selection. Not anough arguments: %s" % (repr(series_pieces)),
logger.ERROR) logger.ERROR)
ui.notifications.error("Unknown error. Unable to add show due to problem with show selection.") ui.notifications.error("Unknown error. Unable to add show due to problem with show selection.")
return self.redirectTo('/home/addShows/existingShows/') redirect('/home/addShows/existingShows/')
indexer = int(series_pieces[1]) indexer = int(series_pieces[1])
indexer_id = int(series_pieces[3]) indexer_id = int(series_pieces[3])
show_name = series_pieces[4] show_name = series_pieces[4]
@ -2849,7 +2846,7 @@ class NewHomeAddShows(MainHandler):
# blanket policy - if the dir exists you should have used "add existing show" numbnuts # blanket policy - if the dir exists you should have used "add existing show" numbnuts
if ek.ek(os.path.isdir, show_dir) and not fullShowPath: if ek.ek(os.path.isdir, show_dir) and not fullShowPath:
ui.notifications.error("Unable to add show", "Folder " + show_dir + " exists already") ui.notifications.error("Unable to add show", "Folder " + show_dir + " exists already")
return self.redirectTo('/home/addShows/existingShows/') redirect('/home/addShows/existingShows/')
# don't create show dir if config says not to # don't create show dir if config says not to
if sickbeard.ADD_SHOWS_WO_DIR: if sickbeard.ADD_SHOWS_WO_DIR:
@ -2860,7 +2857,7 @@ class NewHomeAddShows(MainHandler):
logger.log(u"Unable to create the folder " + show_dir + ", can't add the show", logger.ERROR) logger.log(u"Unable to create the folder " + show_dir + ", can't add the show", logger.ERROR)
ui.notifications.error("Unable to add show", ui.notifications.error("Unable to add show",
"Unable to create the folder " + show_dir + ", can't add the show") "Unable to create the folder " + show_dir + ", can't add the show")
return self.redirectTo("/home/") redirect("/home/")
else: else:
helpers.chmodAsParent(show_dir) helpers.chmodAsParent(show_dir)
@ -2965,7 +2962,7 @@ class NewHomeAddShows(MainHandler):
# if we're done then go home # if we're done then go home
if not dirs_only: if not dirs_only:
return self.redirectTo('/home/') redirect('/home/')
# for the remaining shows we need to prompt for each one, so forward this on to the newShow page # for the remaining shows we need to prompt for each one, so forward this on to the newShow page
return self.newShow(dirs_only[0], dirs_only[1:]) return self.newShow(dirs_only[0], dirs_only[1:])
@ -2980,7 +2977,7 @@ ErrorLogsMenu = [
class ErrorLogs(MainHandler): class ErrorLogs(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="errorlogs.tmpl") t = PageTemplate(headers=self.request.headers, file="errorlogs.tmpl")
t.submenu = ErrorLogsMenu t.submenu = ErrorLogsMenu
return _munge(t) return _munge(t)
@ -2988,12 +2985,12 @@ class ErrorLogs(MainHandler):
def clearerrors(self, *args, **kwargs): def clearerrors(self, *args, **kwargs):
classes.ErrorViewer.clear() classes.ErrorViewer.clear()
return self.redirectTo("/errorlogs/") redirect("/errorlogs/")
def viewlog(self, minLevel=logger.MESSAGE, maxLines=500): def viewlog(self, minLevel=logger.MESSAGE, maxLines=500):
t = PageTemplate(file="viewlogs.tmpl") t = PageTemplate(headers=self.request.headers, file="viewlogs.tmpl")
t.submenu = ErrorLogsMenu t.submenu = ErrorLogsMenu
minLevel = int(minLevel) minLevel = int(minLevel)
@ -3065,7 +3062,7 @@ class Home(MainHandler):
def index(self, *args, **kwargs): def index(self, *args, **kwargs):
t = PageTemplate(file="home.tmpl") t = PageTemplate(headers=self.request.headers, file="home.tmpl")
if sickbeard.ANIME_SPLIT_HOME: if sickbeard.ANIME_SPLIT_HOME:
shows = [] shows = []
anime = [] anime = []
@ -3359,21 +3356,21 @@ class Home(MainHandler):
def shutdown(self, pid=None): def shutdown(self, pid=None):
if str(pid) != str(sickbeard.PID): if str(pid) != str(sickbeard.PID):
return self.redirectTo("/home/") redirect("/home/")
threading.Timer(2, sickbeard.invoke_shutdown).start() threading.Timer(2, sickbeard.invoke_shutdown).start()
title = "Shutting down" title = "Shutting down"
message = "SickRage is shutting down..." message = "SickRage is shutting down..."
return _genericMessage(title, message) return self._genericMessage(title, message)
def restart(self, pid=None): def restart(self, pid=None):
if str(pid) != str(sickbeard.PID): if str(pid) != str(sickbeard.PID):
return self.redirectTo("/home/") redirect("/home/")
t = PageTemplate(file="restart.tmpl") t = PageTemplate(headers=self.request.headers, file="restart.tmpl")
t.submenu = HomeMenu() t.submenu = HomeMenu()
# restart # restart
@ -3385,29 +3382,29 @@ class Home(MainHandler):
def update(self, pid=None): def update(self, pid=None):
if str(pid) != str(sickbeard.PID): if str(pid) != str(sickbeard.PID):
return self.redirectTo("/home/") redirect("/home/")
updated = sickbeard.versionCheckScheduler.action.update() # @UndefinedVariable updated = sickbeard.versionCheckScheduler.action.update() # @UndefinedVariable
if updated: if updated:
# do a hard restart # do a hard restart
threading.Timer(2, sickbeard.invoke_restart, [False]).start() threading.Timer(2, sickbeard.invoke_restart, [False]).start()
t = PageTemplate(file="restart_bare.tmpl") t = PageTemplate(headers=self.request.headers, file="restart_bare.tmpl")
return _munge(t) return _munge(t)
else: else:
return _genericMessage("Update Failed", return self._genericMessage("Update Failed",
"Update wasn't successful, not restarting. Check your log for more information.") "Update wasn't successful, not restarting. Check your log for more information.")
def displayShow(self, show=None): def displayShow(self, show=None):
if show is None: if show is None:
return _genericMessage("Error", "Invalid show ID") return self._genericMessage("Error", "Invalid show ID")
else: else:
showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show)) showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show))
if showObj is None: if showObj is None:
return _genericMessage("Error", "Show not in show list") return self._genericMessage("Error", "Show not in show list")
myDB = db.DBConnection() myDB = db.DBConnection()
seasonResults = myDB.select( seasonResults = myDB.select(
@ -3420,7 +3417,7 @@ class Home(MainHandler):
[showObj.indexerid] [showObj.indexerid]
) )
t = PageTemplate(file="displayShow.tmpl") t = PageTemplate(headers=self.request.headers, file="displayShow.tmpl")
t.submenu = [{'title': 'Edit', 'path': 'home/editShow?show=%d' % showObj.indexerid}] t.submenu = [{'title': 'Edit', 'path': 'home/editShow?show=%d' % showObj.indexerid}]
try: try:
@ -3562,7 +3559,7 @@ class Home(MainHandler):
if directCall: if directCall:
return [errString] return [errString]
else: else:
return _genericMessage("Error", errString) return self._genericMessage("Error", errString)
showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show)) showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show))
@ -3571,12 +3568,12 @@ class Home(MainHandler):
if directCall: if directCall:
return [errString] return [errString]
else: else:
return _genericMessage("Error", errString) return self._genericMessage("Error", errString)
showObj.exceptions = scene_exceptions.get_scene_exceptions(showObj.indexerid) showObj.exceptions = scene_exceptions.get_scene_exceptions(showObj.indexerid)
if not location and not anyQualities and not bestQualities and not flatten_folders: if not location and not anyQualities and not bestQualities and not flatten_folders:
t = PageTemplate(file="editShow.tmpl") t = PageTemplate(headers=self.request.headers, file="editShow.tmpl")
t.submenu = HomeMenu() t.submenu = HomeMenu()
bwl = BlackAndWhiteList(showObj.indexerid) bwl = BlackAndWhiteList(showObj.indexerid)
@ -3806,22 +3803,22 @@ class Home(MainHandler):
ui.notifications.error('%d error%s while saving changes:' % (len(errors), "" if len(errors) == 1 else "s"), ui.notifications.error('%d error%s while saving changes:' % (len(errors), "" if len(errors) == 1 else "s"),
'<ul>' + '\n'.join(['<li>%s</li>' % error for error in errors]) + "</ul>") '<ul>' + '\n'.join(['<li>%s</li>' % error for error in errors]) + "</ul>")
return self.redirectTo("/home/displayShow?show=" + show) redirect("/home/displayShow?show=" + show)
def deleteShow(self, show=None): def deleteShow(self, show=None):
if show is None: if show is None:
return _genericMessage("Error", "Invalid show ID") return self._genericMessage("Error", "Invalid show ID")
showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show)) showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show))
if showObj is None: if showObj is None:
return _genericMessage("Error", "Unable to find the specified show") return self._genericMessage("Error", "Unable to find the specified show")
if sickbeard.showQueueScheduler.action.isBeingAdded( if sickbeard.showQueueScheduler.action.isBeingAdded(
showObj) or sickbeard.showQueueScheduler.action.isBeingUpdated(showObj): # @UndefinedVariable showObj) or sickbeard.showQueueScheduler.action.isBeingUpdated(showObj): # @UndefinedVariable
return _genericMessage("Error", "Shows can't be deleted while they're being added or updated.") return self._genericMessage("Error", "Shows can't be deleted while they're being added or updated.")
if sickbeard.USE_TRAKT and sickbeard.TRAKT_SYNC: if sickbeard.USE_TRAKT and sickbeard.TRAKT_SYNC:
# remove show from trakt.tv library # remove show from trakt.tv library
@ -3830,18 +3827,18 @@ class Home(MainHandler):
showObj.deleteShow() showObj.deleteShow()
ui.notifications.message('<b>%s</b> has been deleted' % showObj.name) ui.notifications.message('<b>%s</b> has been deleted' % showObj.name)
return self.redirectTo("/home/") redirect("/home/")
def refreshShow(self, show=None): def refreshShow(self, show=None):
if show is None: if show is None:
return _genericMessage("Error", "Invalid show ID") return self._genericMessage("Error", "Invalid show ID")
showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show)) showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show))
if showObj is None: if showObj is None:
return _genericMessage("Error", "Unable to find the specified show") return self._genericMessage("Error", "Unable to find the specified show")
# force the update from the DB # force the update from the DB
try: try:
@ -3852,18 +3849,18 @@ class Home(MainHandler):
time.sleep(cpu_presets[sickbeard.CPU_PRESET]) time.sleep(cpu_presets[sickbeard.CPU_PRESET])
return self.redirectTo("/home/displayShow?show=" + str(showObj.indexerid)) redirect("/home/displayShow?show=" + str(showObj.indexerid))
def updateShow(self, show=None, force=0): def updateShow(self, show=None, force=0):
if show is None: if show is None:
return _genericMessage("Error", "Invalid show ID") return self._genericMessage("Error", "Invalid show ID")
showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show)) showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show))
if showObj is None: if showObj is None:
return _genericMessage("Error", "Unable to find the specified show") return self._genericMessage("Error", "Unable to find the specified show")
# force the update # force the update
try: try:
@ -3875,25 +3872,25 @@ class Home(MainHandler):
# just give it some time # just give it some time
time.sleep(cpu_presets[sickbeard.CPU_PRESET]) time.sleep(cpu_presets[sickbeard.CPU_PRESET])
return self.redirectTo("/home/displayShow?show=" + str(showObj.indexerid)) redirect("/home/displayShow?show=" + str(showObj.indexerid))
def subtitleShow(self, show=None, force=0): def subtitleShow(self, show=None, force=0):
if show is None: if show is None:
return _genericMessage("Error", "Invalid show ID") return self._genericMessage("Error", "Invalid show ID")
showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show)) showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show))
if showObj is None: if showObj is None:
return _genericMessage("Error", "Unable to find the specified show") return self._genericMessage("Error", "Unable to find the specified show")
# search and download subtitles # search and download subtitles
sickbeard.showQueueScheduler.action.downloadSubtitles(showObj, bool(force)) # @UndefinedVariable sickbeard.showQueueScheduler.action.downloadSubtitles(showObj, bool(force)) # @UndefinedVariable
time.sleep(cpu_presets[sickbeard.CPU_PRESET]) time.sleep(cpu_presets[sickbeard.CPU_PRESET])
return self.redirectTo("/home/displayShow?show=" + str(showObj.indexerid)) redirect("/home/displayShow?show=" + str(showObj.indexerid))
def updateXBMC(self, showName=None): def updateXBMC(self, showName=None):
@ -3909,7 +3906,7 @@ class Home(MainHandler):
ui.notifications.message("Library update command sent to XBMC host(s): " + host) ui.notifications.message("Library update command sent to XBMC host(s): " + host)
else: else:
ui.notifications.error("Unable to contact one or more XBMC host(s): " + host) ui.notifications.error("Unable to contact one or more XBMC host(s): " + host)
return self.redirectTo('/home/') redirect('/home/')
def updatePLEX(self, *args, **kwargs): def updatePLEX(self, *args, **kwargs):
@ -3918,7 +3915,7 @@ class Home(MainHandler):
"Library update command sent to Plex Media Server host: " + sickbeard.PLEX_SERVER_HOST) "Library update command sent to Plex Media Server host: " + sickbeard.PLEX_SERVER_HOST)
else: else:
ui.notifications.error("Unable to contact Plex Media Server host: " + sickbeard.PLEX_SERVER_HOST) ui.notifications.error("Unable to contact Plex Media Server host: " + sickbeard.PLEX_SERVER_HOST)
return self.redirectTo('/home/') redirect('/home/')
def setStatus(self, show=None, eps=None, status=None, direct=False): def setStatus(self, show=None, eps=None, status=None, direct=False):
@ -3929,7 +3926,7 @@ class Home(MainHandler):
ui.notifications.error('Error', errMsg) ui.notifications.error('Error', errMsg)
return json.dumps({'result': 'error'}) return json.dumps({'result': 'error'})
else: else:
return _genericMessage("Error", errMsg) return self._genericMessage("Error", errMsg)
if not statusStrings.has_key(int(status)): if not statusStrings.has_key(int(status)):
errMsg = "Invalid status" errMsg = "Invalid status"
@ -3937,7 +3934,7 @@ class Home(MainHandler):
ui.notifications.error('Error', errMsg) ui.notifications.error('Error', errMsg)
return json.dumps({'result': 'error'}) return json.dumps({'result': 'error'})
else: else:
return _genericMessage("Error", errMsg) return self._genericMessage("Error", errMsg)
showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show)) showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show))
@ -3947,7 +3944,7 @@ class Home(MainHandler):
ui.notifications.error('Error', errMsg) ui.notifications.error('Error', errMsg)
return json.dumps({'result': 'error'}) return json.dumps({'result': 'error'})
else: else:
return _genericMessage("Error", errMsg) return self._genericMessage("Error", errMsg)
segment = {} segment = {}
if eps is not None: if eps is not None:
@ -3962,7 +3959,7 @@ class Home(MainHandler):
epObj = showObj.getEpisode(int(epInfo[0]), int(epInfo[1])) epObj = showObj.getEpisode(int(epInfo[0]), int(epInfo[1]))
if epObj is None: if epObj is None:
return _genericMessage("Error", "Episode couldn't be retrieved") return self._genericMessage("Error", "Episode couldn't be retrieved")
if int(status) in [WANTED, FAILED]: if int(status) in [WANTED, FAILED]:
# figure out what episodes are wanted so we can backlog them # figure out what episodes are wanted so we can backlog them
@ -4032,23 +4029,23 @@ class Home(MainHandler):
if direct: if direct:
return json.dumps({'result': 'success'}) return json.dumps({'result': 'success'})
else: else:
return self.redirectTo("/home/displayShow?show=" + show) redirect("/home/displayShow?show=" + show)
def testRename(self, show=None): def testRename(self, show=None):
if show is None: if show is None:
return _genericMessage("Error", "You must specify a show") return self._genericMessage("Error", "You must specify a show")
showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show)) showObj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show))
if showObj is None: if showObj is None:
return _genericMessage("Error", "Show not in show list") return self._genericMessage("Error", "Show not in show list")
try: try:
show_loc = showObj.location # @UnusedVariable show_loc = showObj.location # @UnusedVariable
except exceptions.ShowDirNotFoundException: except exceptions.ShowDirNotFoundException:
return _genericMessage("Error", "Can't rename episodes when the show dir is missing.") return self._genericMessage("Error", "Can't rename episodes when the show dir is missing.")
ep_obj_rename_list = [] ep_obj_rename_list = []
@ -4073,7 +4070,7 @@ class Home(MainHandler):
# present season DESC episode DESC on screen # present season DESC episode DESC on screen
ep_obj_rename_list.reverse() ep_obj_rename_list.reverse()
t = PageTemplate(file="testRename.tmpl") t = PageTemplate(headers=self.request.headers, file="testRename.tmpl")
t.submenu = [{'title': 'Edit', 'path': 'home/editShow?show=%d' % showObj.indexerid}] t.submenu = [{'title': 'Edit', 'path': 'home/editShow?show=%d' % showObj.indexerid}]
t.ep_obj_list = ep_obj_rename_list t.ep_obj_list = ep_obj_rename_list
t.show = showObj t.show = showObj
@ -4085,21 +4082,21 @@ class Home(MainHandler):
if show is None or eps is None: if show is None or eps is None:
errMsg = "You must specify a show and at least one episode" errMsg = "You must specify a show and at least one episode"
return _genericMessage("Error", errMsg) return self._genericMessage("Error", errMsg)
show_obj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show)) show_obj = sickbeard.helpers.findCertainShow(sickbeard.showList, int(show))
if show_obj is None: if show_obj is None:
errMsg = "Error", "Show not in show list" errMsg = "Error", "Show not in show list"
return _genericMessage("Error", errMsg) return self._genericMessage("Error", errMsg)
try: try:
show_loc = show_obj.location # @UnusedVariable show_loc = show_obj.location # @UnusedVariable
except exceptions.ShowDirNotFoundException: except exceptions.ShowDirNotFoundException:
return _genericMessage("Error", "Can't rename episodes when the show dir is missing.") return self._genericMessage("Error", "Can't rename episodes when the show dir is missing.")
if eps is None: if eps is None:
return self.redirectTo("/home/displayShow?show=" + show) redirect("/home/displayShow?show=" + show)
myDB = db.DBConnection() myDB = db.DBConnection()
for curEp in eps.split('|'): for curEp in eps.split('|'):
@ -4126,7 +4123,7 @@ class Home(MainHandler):
root_ep_obj.rename() root_ep_obj.rename()
return self.redirectTo("/home/displayShow?show=" + show) redirect("/home/displayShow?show=" + show)
def searchEpisode(self, show=None, season=None, episode=None): def searchEpisode(self, show=None, season=None, episode=None):