diff --git a/.build/.bowerrc b/.build/.bowerrc new file mode 100644 index 0000000000000000000000000000000000000000..69fad358018d530235f8e43c483d3ce960616a32 --- /dev/null +++ b/.build/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "bower_components" +} diff --git a/.build/Gruntfile.js b/.build/Gruntfile.js new file mode 100644 index 0000000000000000000000000000000000000000..5ae24b022b7995c50f798f23108b722e70a733c2 --- /dev/null +++ b/.build/Gruntfile.js @@ -0,0 +1,35 @@ +module.exports = function(grunt) { + grunt.initConfig({ + bower_concat: { + all: { + dest: '../gui/slick/js/_bower.js', + // cssDest: 'gui/slick/css/_bower.css', + exclude: [ + // 'jquery', + // 'modernizr' + ], + dependencies: { + // 'underscore': 'jquery', + // 'backbone': 'underscore', + // 'jquery-mousewheel': 'jquery' + }, + bowerOptions: { + relative: false + }, + } + }, + uglify: { + my_target: { + files: { + '../gui/slick/js/_bower.min.js': ['../gui/slick/js/_bower.js'] + } + } + } + }); + + grunt.loadNpmTasks('grunt-bower-concat'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + + grunt.registerTask('default', ['bower_concat', 'uglify']); + +}; diff --git a/.build/bower.json b/.build/bower.json new file mode 100644 index 0000000000000000000000000000000000000000..940c5f26fcfb19964f218d1765f772b598dd4261 --- /dev/null +++ b/.build/bower.json @@ -0,0 +1,23 @@ +{ + "name": "SickRage", + "version": "4.0.72", + "private": true, + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "dependencies": { + "jquery": "~2.1.4", + "bootstrap": "~3.3.5", + "bootstrap-hover-dropdown": "~2.1.3", + "jquery-ui": "~1.11.4", + "tablesorter": "jquery.tablesorter#~2.23.5", + "jquery-form": "~3.46.0", + "jquery-timeago": "~1.4.3", + "jquery-tokeninput": "~1.7.0", + "bootstrap3-typeahead": "~3.1.1" + } +} diff --git a/.build/package.json b/.build/package.json new file mode 100644 index 0000000000000000000000000000000000000000..cada201ee611225dd7d68b3ac51f0db63181c017 --- /dev/null +++ b/.build/package.json @@ -0,0 +1,18 @@ +{ + "name": "sickrage", + "version": "4.0.72", + "private": true, + "dependencies": { + "grunt": "^0.4.5", + "grunt-bower-concat": "^0.5.0", + "grunt-contrib-uglify": "^0.9.2" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/OmgImAlexis/SickRage.git" + }, + "bugs": { + "url": "https://github.com/OmgImAlexis/SickRage/issues" + }, + "homepage": "https://github.com/OmgImAlexis/SickRage#readme" +} diff --git a/.gitignore b/.gitignore index 2db538360d4a7e695c057c5448e2767d07556679..e17cfc889383a407336fd939bdb57adfb7c3d6bd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ # SR User Related # ###################### -cache*/ -Logs/ +/cache/ +/Logs/ +/data/ restore/ backup*/ cache.db* @@ -14,11 +15,12 @@ server.key # SR Test Related # ###################### -/tests/Logs/* -/tests/cache/* +/tests/Logs/ +/tests/cache/ /tests/sickbeard.db* /tests/cache.db* /tests/failed.db +/tests/data/ # Compiled source # ###################### @@ -57,3 +59,9 @@ Thumbs.db # Unrar Executable # ###################### lib/unrar2/UnRAR.exe + +# Bower # +###################### +bower_components +node_modules +gui/**/_bower.js diff --git a/gui/slick/js/_bower.min.js b/gui/slick/js/_bower.min.js new file mode 100644 index 0000000000000000000000000000000000000000..91e9e09910f4f92bd16a2013b4b8ff0d744f4093 Binary files /dev/null and b/gui/slick/js/_bower.min.js differ diff --git a/gui/slick/js/script.js b/gui/slick/js/script.js index b56e6bc73e00c80c76fed377fb225cb46b5ea5b2..62b1e0a4a9168c40cf0f16ce92e48cf85b181073 100644 --- a/gui/slick/js/script.js +++ b/gui/slick/js/script.js @@ -3,79 +3,15 @@ var srRoot = getMeta('srRoot'), anonURL = getMeta('anonURL'), top_image_html = '<img src="' + srRoot + '/images/top.gif" width="31" height="11" alt="Jump to top" />'; -function initHeader() { - //settings - var header = $("#header"); - var fadeSpeed = 100, fadeTo = 0.8, topDistance = 20; - var topbarME = function () { - $(header).fadeTo(fadeSpeed, 1); - }, topbarML = function () { - $(header).fadeTo(fadeSpeed, fadeTo); - }; - var inside = false; - //do - $(window).scroll(function () { - position = $(window).scrollTop(); - if (position > topDistance && !inside) { - //add events - topbarML(); - $(header).bind('mouseenter', topbarME); - $(header).bind('mouseleave', topbarML); - inside = true; - } - else if (position < topDistance) { - topbarME(); - $(header).unbind('mouseenter', topbarME); - $(header).unbind('mouseleave', topbarML); - inside = false; - } - }); -} - - -function showMsg(msg, loader, timeout, ms) { - var feedback = $("#ajaxMsg"); - update = $("#updatebar"); - if (update.is(":visible")) { - var height = update.height() + 35; - feedback.css("bottom", height + "px"); - } else { - feedback.removeAttr("style"); - } - feedback.fadeIn(); - var tmpMessage = $("<div class='msg'>" + msg + "</div>"); - var message = loader ? $("<div class='msg'><img src='interfaces/default/images/loader_black.gif' alt='loading' class='loader' style='position: relative;top:10px;margin-top:-15px; margin-left:-10px;'/>" + msg + "</div>") : tmpMessage; - if (loader) feedback.css("padding", "14px 10px"); - $(feedback).prepend(message); - if (timeout) { - setTimeout(function () { - message.fadeOut(function () { - $(this).remove(); - feedback.fadeOut(); - }); - }, ms); - } -} - -function resetFilters(text) { - if ($(".dataTables_filter").length > 0) $(".dataTables_filter input").attr("placeholder", "filter " + text + ""); -} - -function initTabs() { +$(document).ready(function () { $("#config-components").tabs({ activate: function (event, ui) { + var lastOpenedPanel = $(this).data("lastOpenedPanel"), + selected = $(this).tabs('option', 'selected'); - var lastOpenedPanel = $(this).data("lastOpenedPanel"); - var selected = $(this).tabs('option', 'selected'); + if (!lastOpenedPanel) lastOpenedPanel = $(ui.oldPanel); - if (lastOpenedPanel) { - } else { - lastOpenedPanel = $(ui.oldPanel); - } - - if (!$(this).data("topPositionTab")) { - $(this).data("topPositionTab", $(ui.newPanel).position().top); - } + if (!$(this).data("topPositionTab")) $(this).data("topPositionTab", $(ui.newPanel).position().top); //Dont use the builtin fx effects. This will fade in/out both tabs, we dont want that //Fadein the new tab yourself @@ -98,15 +34,9 @@ function initTabs() { //Saving the last tab has been opened $(this).data("lastOpenedPanel", $(ui.newPanel)); - } - }); -} -$(document).ready(function () { - initHeader(); - initTabs(); - $(document).anchor(); + $('.dropdown-toggle').dropdownHover(); if(metaToBool('sickbeard.FUZZY_DATING')){ $.timeago.settings.allowFuture = true; diff --git a/gui/slick/views/apiBuilder.mako b/gui/slick/views/apiBuilder.mako index 9e5a6bdf7203805fce643c889fe4bd7ff211894e..8f91c4c768a3163f24a627acfc8d02e3603af422 100644 --- a/gui/slick/views/apiBuilder.mako +++ b/gui/slick/views/apiBuilder.mako @@ -166,9 +166,7 @@ var commands = ${sorted(commands)}; var episodes = ${episodes}; </script> -<script type="text/javascript" src="${srRoot}/js/lib/jquery-1.11.2.min.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/lib/bootstrap.min.js?${sbPID}"></script> -<script type="text/javascript" src="${srRoot}/js/lib/bootstrap3-typeahead.min.js?${sbPID}"></script> +<script type="text/javascript" src="${srRoot}/js/_bower.min.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/apibuilder.js?${sbPID}"></script> </body> </html> diff --git a/gui/slick/views/config_general.mako b/gui/slick/views/config_general.mako index e1b10e200a59a3c02d9b5488b3b57f7a8837dfaf..bc4681f545cc9eb6d9eb0689a5a15fcbdb83829e 100644 --- a/gui/slick/views/config_general.mako +++ b/gui/slick/views/config_general.mako @@ -611,7 +611,7 @@ </span> </label> </div> - + <div class="field-pair"> <label for="skip_removed_files"> <span class="component-title">Skip Remove Detection</span> @@ -619,11 +619,11 @@ <input type="checkbox" name="skip_removed_files" id="skip_removed_files" ${('', 'checked="checked"')[bool(sickbeard.SKIP_REMOVED_FILES)]}/> <p>Skip detection of removed files. If disable it will set default deleted status</p> </span> - <div class="clear-left"> + <div class="clear-left"> <span class="component-desc"><b>NOTE:</b> This may mean SickRage misses renames as well</span> - </div> + </div> </div> - + <div class="field-pair"> <label for="ep_default_deleted_status"> <span class="component-title">Default deleted episode status:</span> @@ -643,7 +643,7 @@ <input type="hidden" name="ep_default_deleted_status" value="${sickbeard.EP_DEFAULT_DELETED_STATUS}" /> % endif <span>Define the status to be set for media file that has been deleted.</span> - <div class="clear-left"> + <div class="clear-left"> <p> <b>NOTE:</b> Archived option will keep previous downloaded quality</p> <p>Example: Downloaded (1080p WEB-DL) ==> Archived (1080p WEB-DL)</p> </div> diff --git a/gui/slick/views/config_subtitles.mako b/gui/slick/views/config_subtitles.mako index 98d9bb97ce0bc576a566fe22232b460f1232d55a..8711862e4d7852290051a9770d950fb378b64b78 100644 --- a/gui/slick/views/config_subtitles.mako +++ b/gui/slick/views/config_subtitles.mako @@ -7,7 +7,6 @@ <%block name="scripts"> <script type="text/javascript" src="${srRoot}/js/configSubtitles.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/config.js"></script> -<script type="text/javascript" src="${srRoot}/js/lib/jquery.tokeninput.js"></script> <script> $(document).ready(function() { $("#subtitles_languages").tokenInput([${','.join("{\"id\": \"" + lang.opensubtitles + "\", name: \"" + lang.name + "\"}" for lang in subtitles.subtitleLanguageFilter())}], { diff --git a/gui/slick/views/editShow.mako b/gui/slick/views/editShow.mako index 411e84642ae9fefb25f3eeda8bcc5a272b0f0ea2..68fdc8f5e4d33ad465e8e2a280d738ce193bea51 100644 --- a/gui/slick/views/editShow.mako +++ b/gui/slick/views/editShow.mako @@ -65,6 +65,11 @@ This will <b>affect the episode show search</b> on nzb and torrent provider.<br <%include file="/inc_qualityChooser.mako"/> <br /> +<b>Archive on first match:</b> +<input type="checkbox" name="archive_firstmatch" ${('', 'checked="checked"')[show.archive_firstmatch == 1]} /><br> +(check this to have the episode archived after the first best match is found from your archive quality list)</br> +<br /> + <b>Default Episode Status:</b><br /> (this will set the status for future episodes)<br /> <select name="defaultEpStatus" id="defaultEpStatusSelect" class="form-control form-control-inline input-sm"> @@ -115,13 +120,6 @@ This will <b>affect the episode show search</b> on nzb and torrent provider.<br (check this if you wish to use the DVD order instead of the Airing order. A "Force Full Update" is necessary, and if you have existing episodes you need to move them) <br/><br/> -% if anyQualities + bestQualities: -<b>Archive on first match:</b> -<input type="checkbox" name="archive_firstmatch" ${('', 'checked="checked"')[show.archive_firstmatch == 1]} /><br> -(check this to have the episode archived after the first best match is found from your archive quality list)</br> -<br /> -% endif - <b>Ignored Words:</b></br> <input type="text" name="rls_ignore_words" id="rls_ignore_words" value="${show.rls_ignore_words}" class="form-control form-control-inline input-sm input350" /><br /> Results with one or more word from this list will be ignored<br /> diff --git a/gui/slick/views/layouts/main.mako b/gui/slick/views/layouts/main.mako index 190e8176ffa5f56f00042af04e224a294798875c..b1843c5a0371e910cd7217491ca84410f2a81f2f 100644 --- a/gui/slick/views/layouts/main.mako +++ b/gui/slick/views/layouts/main.mako @@ -339,26 +339,20 @@ </div> </div> </footer> - <script type="text/javascript" src="${srRoot}/js/lib/jquery-2.1.4.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/bootstrap.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/bootstrap-hover-dropdown.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/bootstrap-anchor.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery-ui-1.10.4.custom.min.js?${sbPID}"></script> + <script type="text/javascript" src="${srRoot}/js/_bower.min.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookie.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/lib/jquery.cookiejar.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/lib/jquery.json-2.2.min.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/lib/jquery.selectboxes.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter-2.17.7.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widgets-2.17.7.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.qtip-2.2.1.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/pnotify.custom.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.form-3.35.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.ui.touch-punch-0.2.2.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/isotope.pkgd.min.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.confirm.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/jquery.timeago.js?${sbPID}"></script> - <script type="text/javascript" src="${srRoot}/js/lib/formwizard.js?${sbPID}"></script> + <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower --> + <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widgets-2.17.7.min.js?${sbPID}"></script><!-- Can't be added to bower --> + <script type="text/javascript" src="${srRoot}/js/lib/jquery.tablesorter.widget-columnSelector-2.17.7.js?${sbPID}"></script><!-- Can't be added to bower --> + <script type="text/javascript" src="${srRoot}/js/lib/jquery.qtip-2.2.1.min.js?${sbPID}"></script><!-- Can't be added to bower --> + <script type="text/javascript" src="${srRoot}/js/lib/jquery.ui.touch-punch-0.2.2.min.js?${sbPID}"></script><!-- Can't be added to bower --> + <script type="text/javascript" src="${srRoot}/js/lib/isotope.pkgd.min.js?${sbPID}"></script><!-- Can't be added to bower --> + <script type="text/javascript" src="${srRoot}/js/lib/jquery.confirm.js?${sbPID}"></script><!-- Can't be added to bower --> + <script type="text/javascript" src="${srRoot}/js/lib/formwizard.js?${sbPID}"></script><!-- Can't be added to bower --> + <script type="text/javascript" src="${srRoot}/js/lib/pnotify.custom.min.js?${sbPID}"></script><!-- Needs to be removed --> <script type="text/javascript" src="${srRoot}/js/new/parsers.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/new/meta.js?${sbPID}"></script> <script type="text/javascript" src="${srRoot}/js/script.js?${sbPID}"></script> diff --git a/sickbeard/__init__.py b/sickbeard/__init__.py index f1ceb705ccdb9ec014926791c76ac449f57ef03d..33c2f5c54ad645ac973621d214f2d51ada12ce26 100644 --- a/sickbeard/__init__.py +++ b/sickbeard/__init__.py @@ -728,14 +728,19 @@ def initialize(consoleLogging=True): restoreCache(os.path.join(restoreDir, 'cache'), CACHE_DIR) except Exception as e: - logger.log(u"Restore: restoring cache failed: {0}".format(str(e)), logger.ERROR) + logger.log(u"Restore: restoring cache failed: {0}".format(ex(e)), logger.ERROR) finally: if os.path.exists(os.path.join(DATA_DIR, 'restore')): try: shutil.rmtree(os.path.join(DATA_DIR, 'restore')) - shutil.rmtree(os.path.join(CACHE_DIR, 'mako')) except Exception as e: - logger.log(u"Restore: Unable to remove the restore directory: {0}".format(str(e)), logger.ERROR) + logger.log(u"Restore: Unable to remove the restore directory: {0}".format(ex(e)), logger.ERROR) + + for cleanupDir in ['mako', 'sessions', 'indexers']: + try: + shutil.rmtree(os.path.join(CACHE_DIR, cleanupDir)) + except Exception as e: + logger.log(u"Restore: Unable to remove the cache/{0} directory: {1}".format(cleanupDir, ex(e)), logger.WARNING) GUI_NAME = check_setting_str(CFG, 'GUI', 'gui_name', 'slick') diff --git a/sickbeard/common.py b/sickbeard/common.py index a535d872752bd851a12b0ff8cf8ddd183b60f7a3..ac2b008fdea82e79473662c3ed8b8ddd641f5a4d 100644 --- a/sickbeard/common.py +++ b/sickbeard/common.py @@ -265,7 +265,7 @@ class Quality: return ret - if checkName([r"([sp]d.?tv|hd.?tv|dsr|tv(rip|mux)).(xvid|x26[45]|h.?26[45])"], all) and not checkName([r"(720|1080)[pi]"], all) and\ + if checkName([r"([sp]d.?tv|hd.?tv|dsr|tv(rip|mux)|satrip).(xvid|x26[45]|h.?26[45])"], all) and not checkName([r"(720|1080)[pi]"], all) and\ not checkName([r"hr.ws.pdtv.x26[45]"], any): ret = Quality.SDTV elif checkName([r"web.?dl|web(rip|mux)", r"xvid|x26[45]|h.?26[45]"], all) and not checkName([r"(720|1080)[pi]"], all): diff --git a/sickbeard/helpers.py b/sickbeard/helpers.py index b60ddf5486bcfa39629119a3b91ca106eba219b8..56480802e0e4dd1f9260c0c203c8f8652941752f 100644 --- a/sickbeard/helpers.py +++ b/sickbeard/helpers.py @@ -142,6 +142,7 @@ def remove_non_release_groups(name): r'\[eztv\]$': 'searchre', r'\[ettv\]$': 'searchre', r'\[vtv\]$': 'searchre', + r'\[EtHD\]$': 'searchre', r'\[GloDLS\]$': 'searchre', r'\[silv4\]$': 'searchre', r'\[Seedbox\]$': 'searchre', diff --git a/sickbeard/logger.py b/sickbeard/logger.py index 58bee81604a2031c3d2ef0f27bae741f3ce2f33b..7f40c20ab621cb3cd54923e45dee7514335784e4 100644 --- a/sickbeard/logger.py +++ b/sickbeard/logger.py @@ -27,6 +27,7 @@ import logging.handlers import threading import platform import locale +import traceback import sickbeard from sickbeard import classes @@ -164,10 +165,13 @@ class Logger(object): sys.exit(1) def submit_errors(self): + + submitter_result = u'' + issue_id = None # pylint: disable=R0912,R0914,R0915 if not (sickbeard.GIT_USERNAME and sickbeard.GIT_PASSWORD and sickbeard.DEBUG and len(classes.ErrorViewer.errors) > 0): - self.log('Please set your GitHub username and password in the config and enable debug. Unable to submit issue ticket to GitHub!') - return + submitter_result = u'Please set your GitHub username and password in the config and enable debug. Unable to submit issue ticket to GitHub!' + return submitter_result, issue_id try: from sickbeard.versionChecker import CheckVersion @@ -175,15 +179,16 @@ class Logger(object): checkversion.check_for_new_version() commits_behind = checkversion.updater.get_num_commits_behind() except Exception: - self.log('Could not check if your SickRage is updated, unable to submit issue ticket to GitHub!') - return + submitter_result = u'Could not check if your SickRage is updated, unable to submit issue ticket to GitHub!' + return submitter_result, issue_id if commits_behind is None or commits_behind > 0: - self.log('Please update SickRage, unable to submit issue ticket to GitHub with an outdated version!') - return + submitter_result = u'Please update SickRage, unable to submit issue ticket to GitHub with an outdated version!' + return submitter_result, issue_id if self.submitter_running: - return 'RUNNING' + submitter_result = u'Issue submitter is running, please wait for it to complete' + return submitter_result, issue_id self.submitter_running = True @@ -261,32 +266,39 @@ class Logger(object): reports = gh.get_organization(gh_org).get_repo(gh_repo).get_issues(state="all") issue_found = False - issue_id = 0 for report in reports: if title_Error == report.title: - comment = report.create_comment(message) - if comment: - issue_id = report.number - self.log('Commented on existing issue #%s successfully!' % issue_id) - issue_found = True + issue_id = report.number + if not report.locked: + if report.create_comment(message): + submitter_result = u'Commented on existing issue #%s successfully!' % issue_id + else: + submitter_result = u'Failed to comment on found issue #%s!' % issue_id + else: + submitter_result = u'Issue #%s is locked, check github to find info about the error.' % issue_id + + issue_found = True break if not issue_found: issue = gh.get_organization(gh_org).get_repo(gh_repo).create_issue(title_Error, message) if issue: issue_id = issue.number - self.log('Your issue ticket #%s was submitted successfully!' % issue_id) + submitter_result = u'Your issue ticket #%s was submitted successfully!' % issue_id + else: + submitter_result = u'Failed to create a new issue!' - # clear error from error list - classes.ErrorViewer.errors.remove(curError) + if issue_id: + # clear error from error list + classes.ErrorViewer.errors.remove(curError) - self.submitter_running = False - return issue_id except Exception as e: - self.log(ex(e), ERROR) - - self.submitter_running = False - + self.log(traceback.format_exc(), ERROR) + submitter_result = u'Exception generated in issue submitter, please check the log' + issue_id = None + finally: + self.submitter_running = False + return submitter_result, issue_id # pylint: disable=R0903 class Wrapper(object): diff --git a/sickbeard/providers/t411.py b/sickbeard/providers/t411.py index acf9677a0538207ef6719d34d30bac9d14d72bad..a4c7a8787c5c044c6777abc259dabafdc75855ad 100644 --- a/sickbeard/providers/t411.py +++ b/sickbeard/providers/t411.py @@ -172,7 +172,7 @@ class T411Provider(generic.TorrentProvider): if not torrents: logger.log(u"The Data returned from " + self.name + " do not contains any torrent", - logger.WARNING) + logger.DEBUG) continue for torrent in torrents: diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index b7bf5bf0622ec076856e256a29d6d2783ae02323..c5434f2dfb0acbb95a5f392bfbd15a43ddd268fa 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -4909,7 +4909,7 @@ class ErrorLogs(WebRoot): else: classes.ErrorViewer.clear() - return self.redirect("/errorlogs/") + return self.redirect("/errorlogs/viewlog/") def viewlog(self, minLevel=logger.INFO, logFilter="<NONE>",logSearch=None, maxLines=500): @@ -5004,10 +5004,8 @@ class ErrorLogs(WebRoot): ui.notifications.error("Missing information", "Please set your GitHub username and password in the config.") logger.log(u'Please set your GitHub username and password in the config, unable to submit issue ticket to GitHub!') else: - issue_id = logger.submit_errors() - if issue_id == 'RUNNING': - ui.notifications.message('Issue submitter is running, please wait for it to complete') - elif issue_id: - ui.notifications.message('Your issue ticket #%s was submitted successfully!' % issue_id) + submitter_result, issue_id = logger.submit_errors() + logger.log(submitter_result, (logger.INFO, logger.WARNING)[issue_id is None]) + ui.notifications.message(submitter_result) return self.redirect("/errorlogs/")