From d08068d00ce62c83317a4d99b592932c0c3fa656 Mon Sep 17 00:00:00 2001 From: Kfir Hadas <sharkykh@gmail.com> Date: Sun, 6 Aug 2017 03:04:38 +0300 Subject: [PATCH] Refactor fetching remote branches (/config/general/) (#3945) * Quick fix for Mako error on /config/general/ when fetching remote branches from an unavailable repository on Github * Move remote branch fetching to webserve.py / core.js * Update minified core.js * Fix issues --- gui/slick/js/core.js | 21 +++++++++++++++++++ gui/slick/js/core.min.js | Bin 87924 -> 88414 bytes gui/slick/views/config_general.mako | 31 +++++----------------------- sickbeard/webserve.py | 24 +++++++++++++++++++++ 4 files changed, 50 insertions(+), 26 deletions(-) diff --git a/gui/slick/js/core.js b/gui/slick/js/core.js index dcbad8e10..3735014e0 100644 --- a/gui/slick/js/core.js +++ b/gui/slick/js/core.js @@ -429,6 +429,27 @@ var SICKRAGE = { $('#log_dir').fileBrowser({title: _('Select log file folder location')}); $('#sickrage_background_path').fileBrowser({title: _('Select Background Image'), key: 'sickrage_background_path', includeFiles: 1, fileTypes: ['images']}); $('#custom_css_path').fileBrowser({title: _('Select CSS file'), key: 'custom_css_path', includeFiles: 1, fileTypes: ['css']}); + + // List remote branches available for checkout + const branchVersion = $('#branchVersion'); + const branchVersionLabel = $('#branchVersionLabel'); + const branchCheckout = $('#branchCheckout'); + $.getJSON(srRoot + '/home/fetchRemoteBranches', function(branches) { + if (branches.length) { + const baseOptionElem = $('<option></option>'); + let optionElem = null; + for (let i = 0; i < branches.length; i++) { + optionElem = baseOptionElem.clone().text(branches[i].name).attr('value', branches[i].name); + optionElem.prop('selected', Boolean(branches[i].current)); + optionElem.appendTo(branchVersion); + } + branchCheckout.prop('disabled', false); + branchVersionLabel.html(_('select branch to use (restart required)')); + } else { + branchCheckout.prop('disabled', true); + branchVersionLabel.html(_('error: No branches found.')).css({color: '#FF0000'}); + } + }); }, backupRestore: function() { $('#Backup').on('click', function() { diff --git a/gui/slick/js/core.min.js b/gui/slick/js/core.min.js index b6380bcb441386ac99132955a5d5a3c969154d47..d5f0c577c8bccc4b411bc2b8c5afb9d949d0841b 100644 GIT binary patch delta 463 zcmeyej`iLq)(x9f{H>Go^NLFpN^Dg$l$4W-67!NX!cvQhGxPJ5G<8xjMST*JQgf6v zb@Gv<oHJ6Bv-3+!lr*iUACzVko@{WNwLUGiBsn7}H8;N`)d_5DYO#_|T4`Q#NoIbY zMxJJMW|~HxUQTLWdP#<6HN+LgAVY2P3qVTjZ1kZFB~9y`)DneE+q}}89P70FA`K8X z)z-i|)dpsQb*i?urbec1v0idceqO4EW`bTxYDI}gUUX`#US48us-|9INlB50Qdwe7 zX{wSALR?d?peVmUL#a45CpEbwHAP9sDL+3aH8BsOH@UQ^C^fG{Q&T5XFR`E?H7_M3 zU!z3RI)8GZnTU-}s$ND(ZjMGgOuqso2o*~56-tX!6*P)ci%SxVN)(Dx3rjPLQd2aQ zG&O5ebBa?H@+UW1iP|Fcrxq3E7g;Iz<wK1~Emla&FU?EQQ_|GbOD-<fs7}t$$uF`} YQg(AQFfcGss?}`Xpt5~~3gZzY07^TbZU6uP delta 18 acmcb&iS^4m)(x9fn&+r(pQFZj$Or&gTL^Xl diff --git a/gui/slick/views/config_general.mako b/gui/slick/views/config_general.mako index 18f53c0da..0da50de5b 100644 --- a/gui/slick/views/config_general.mako +++ b/gui/slick/views/config_general.mako @@ -2,6 +2,7 @@ <%! import os import datetime + import sickbeard from sickbeard.common import SKIPPED, ARCHIVED, IGNORED, statusStrings, cpu_presets from sickbeard.sbdatetime import sbdatetime, date_presets, time_presets @@ -1085,36 +1086,14 @@ <div class="col-lg-9 col-md-8 col-sm-7 col-xs-12 component-desc"> <div class="row"> <div class="col-md-12"> - <select id="branchVersion" class="form-control form-control-inline input-sm pull-left" title="Branch Version"> - <% gh_branch = sickbeard.versionCheckScheduler.action.list_remote_branches() %> - <% gh_credentials = (sickbeard.GIT_AUTH_TYPE == 0 and sickbeard.GIT_USERNAME and sickbeard.GIT_PASSWORD) \ - or (sickbeard.GIT_AUTH_TYPE == 1 and sickbeard.GIT_TOKEN) %> - % if gh_branch: - % for cur_branch in gh_branch: - % if gh_credentials and sickbeard.DEVELOPER == 1: - <option value="${cur_branch}" ${('', 'selected="selected"')[sickbeard.BRANCH == cur_branch]}>${cur_branch}</option> - % elif gh_credentials and cur_branch in ['master', 'develop']: - <option value="${cur_branch}" ${('', 'selected="selected"')[sickbeard.BRANCH == cur_branch]}>${cur_branch}</option> - % elif cur_branch == 'master': - <option value="${cur_branch}" ${('', 'selected="selected"')[sickbeard.BRANCH == cur_branch]}>${cur_branch}</option> - % endif - % endfor - % endif - </select> - % if not gh_branch: - <input class="btn btn-inline" style="margin-left: 6px;" type="button" id="branchCheckout" value="Checkout Branch" disabled> - % else: - <input class="btn btn-inline" style="margin-left: 6px;" type="button" id="branchCheckout" value="Checkout Branch"> - % endif + <select id="branchVersion" class="form-control form-control-inline input-sm pull-left" title="Branch Version"></select> + <input class="btn btn-inline" style="margin-left: 6px;" type="button" id="branchCheckout" value="Checkout Branch" disabled> </div> </div> <div class="row"> <div class="col-md-12"> - % if not gh_branch: - <div class="clear-left" style="color:#FF0000"><label>${_('error: No branches found.')}</label></div> - % else: - <div class="clear-left"><label>${_('select branch to use (restart required)')}</label></div> - % endif + <% loading_spinner = static_url('images/loading16' + ('', '-dark')[sickbeard.THEME_NAME == 'dark'] + '.gif') %> + <div class="clear-left"><label id="branchVersionLabel"><img src="${loading_spinner}" height="16" width="16" /> Loading...</label></div> </div> </div> </div> diff --git a/sickbeard/webserve.py b/sickbeard/webserve.py index da9227f0a..7a89584ee 100644 --- a/sickbeard/webserve.py +++ b/sickbeard/webserve.py @@ -36,6 +36,7 @@ import adba import markdown2 import six from dateutil import tz +from github.GithubException import GithubException from libtrakt import TraktAPI from libtrakt.exceptions import traktException from mako.exceptions import RichTraceback @@ -1301,6 +1302,29 @@ class Home(WebRoot): else: return self.redirect('/' + sickbeard.DEFAULT_PAGE + '/') + @staticmethod + def fetchRemoteBranches(): + response = [] + try: + gh_branches = sickbeard.versionCheckScheduler.action.list_remote_branches() + except GithubException: + gh_branches = None + + if gh_branches: + gh_credentials = (sickbeard.GIT_AUTH_TYPE == 0 and sickbeard.GIT_USERNAME and sickbeard.GIT_PASSWORD or + sickbeard.GIT_AUTH_TYPE == 1 and sickbeard.GIT_TOKEN) + for cur_branch in gh_branches: + branch_obj = {'name': cur_branch} + if cur_branch == sickbeard.BRANCH: + branch_obj['current'] = True + + if (gh_credentials and sickbeard.DEVELOPER == 1 or + gh_credentials and cur_branch in ['master', 'develop'] or + cur_branch == 'master'): + response.append(branch_obj) + + return json.dumps(response) + def branchCheckout(self, branch): if sickbeard.BRANCH != branch: sickbeard.BRANCH = branch -- GitLab