mirror of
				https://github.com/janeczku/calibre-web
				synced 2025-10-30 14:53:01 +00:00 
			
		
		
		
	More robust handling while checking for new updates
This commit is contained in:
		| @@ -104,6 +104,7 @@ $(function() { | |||||||
|         var $this = $(this); |         var $this = $(this); | ||||||
|         var buttonText = $this.html(); |         var buttonText = $this.html(); | ||||||
|         $this.html("..."); |         $this.html("..."); | ||||||
|  |         $("#update_error").addClass("hidden") | ||||||
|         $.ajax({ |         $.ajax({ | ||||||
|             dataType: "json", |             dataType: "json", | ||||||
|             url: window.location.pathname + "/../../get_update_status", |             url: window.location.pathname + "/../../get_update_status", | ||||||
| @@ -116,6 +117,11 @@ $(function() { | |||||||
|                         .removeClass("hidden") |                         .removeClass("hidden") | ||||||
|                         .find("span").html(data.commit); |                         .find("span").html(data.commit); | ||||||
|                 } |                 } | ||||||
|  |                 if (data.error.length != 0) { | ||||||
|  |                     $("#update_error") | ||||||
|  |                         .removeClass("hidden") | ||||||
|  |                         .find("span").html(data.error); | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         }); |         }); | ||||||
|     }); |     }); | ||||||
|   | |||||||
| @@ -93,6 +93,7 @@ | |||||||
|   <h2>{{_('Administration')}}</h2> |   <h2>{{_('Administration')}}</h2> | ||||||
|     <div>{{_('Current commit timestamp')}}: <span>{{commit}} </span></div> |     <div>{{_('Current commit timestamp')}}: <span>{{commit}} </span></div> | ||||||
|     <div class="hidden" id="update_info">{{_('Newest commit timestamp')}}: <span></span></div> |     <div class="hidden" id="update_info">{{_('Newest commit timestamp')}}: <span></span></div> | ||||||
|  |     <div class="hidden" id="update_error"> <span>{{update_error}}</span></div> | ||||||
|     <p></p> |     <p></p> | ||||||
|     <div class="btn btn-default" id="restart_database">{{_('Reconnect to Calibre DB')}}</div> |     <div class="btn btn-default" id="restart_database">{{_('Reconnect to Calibre DB')}}</div> | ||||||
|     <div class="btn btn-default" data-toggle="modal" data-target="#RestartDialog">{{_('Restart Calibre-Web')}}</div> |     <div class="btn btn-default" data-toggle="modal" data-target="#RestartDialog">{{_('Restart Calibre-Web')}}</div> | ||||||
|   | |||||||
							
								
								
									
										59
									
								
								cps/web.py
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								cps/web.py
									
									
									
									
									
								
							| @@ -1082,23 +1082,58 @@ def get_matching_tags(): | |||||||
| @app.route("/get_update_status", methods=['GET']) | @app.route("/get_update_status", methods=['GET']) | ||||||
| @login_required_if_no_ano | @login_required_if_no_ano | ||||||
| def get_update_status(): | def get_update_status(): | ||||||
|     status = {} |     status = { | ||||||
|  |         'status': False | ||||||
|  |     } | ||||||
|  |     repository_url = 'https://api.github.com/repos/janeczku/calibre-web' | ||||||
|     tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone) |     tz = datetime.timedelta(seconds=time.timezone if (time.localtime().tm_isdst == 0) else time.altzone) | ||||||
|  |  | ||||||
|     if request.method == "GET": |     if request.method == "GET": | ||||||
|         # should be automatically replaced by git with current commit hash |         # should be automatically replaced by git with current commit hash | ||||||
|         commit_id = '$Format:%H$' |         current_commit_id = '$Format:%H$' | ||||||
|         # ToDo: Handle server not reachable -> ValueError: |  | ||||||
|         commit = requests.get('https://api.github.com/repos/janeczku/calibre-web/git/refs/heads/master').json() |         try: | ||||||
|         if "object" in commit and commit['object']['sha'] != commit_id: |             r = requests.get(repository_url + '/git/refs/heads/master') | ||||||
|  |             r.raise_for_status() | ||||||
|  |             commit = r.json() | ||||||
|  |         except requests.exceptions.HTTPError as ex: | ||||||
|  |             status['error'] = _(u'HTTP Error') + ' ' + str(ex) | ||||||
|  |         except requests.exceptions.ConnectionError: | ||||||
|  |             status['error'] = _(u'Connection error') | ||||||
|  |         except requests.exceptions.Timeout: | ||||||
|  |             status['error'] = _(u'Timeout while establishing connection') | ||||||
|  |         except requests.exceptions.RequestException: | ||||||
|  |             status['error'] = _(u'General error') | ||||||
|  |  | ||||||
|  |         if 'error' in status: | ||||||
|  |             return json.dumps(status) | ||||||
|  |  | ||||||
|  |         if 'object' in commit and commit['object']['sha'] != current_commit_id: | ||||||
|  |             # a new update is available | ||||||
|  |             try: | ||||||
|  |                 r = requests.get(repository_url + '/git/commits/' + commit['object']['sha']) | ||||||
|  |                 r.raise_for_status() | ||||||
|  |                 update_data = r.json() | ||||||
|  |             except requests.exceptions.HTTPError as ex: | ||||||
|  |                 status['error'] = _(u'HTTP Error') + ' ' + str(ex) | ||||||
|  |             except requests.exceptions.ConnectionError: | ||||||
|  |                 status['error'] = _(u'Connection error') | ||||||
|  |             except requests.exceptions.Timeout: | ||||||
|  |                 status['error'] = _(u'Timeout while establishing connection') | ||||||
|  |             except requests.exceptions.RequestException: | ||||||
|  |                 status['error'] = _(u'General error') | ||||||
|  |  | ||||||
|  |             if 'error' in status: | ||||||
|  |                 return json.dumps(status) | ||||||
|  |  | ||||||
|  |             if 'committer' in update_data: | ||||||
|                 status['status'] = True |                 status['status'] = True | ||||||
|             commitdate = requests.get('https://api.github.com/repos/janeczku/calibre-web/git/commits/'+commit['object']['sha']).json() |                 new_commit_date = datetime.datetime.strptime( | ||||||
|             if "committer" in commitdate: |                     update_data['committer']['date'], '%Y-%m-%dT%H:%M:%SZ') - tz | ||||||
|                 form_date=datetime.datetime.strptime(commitdate['committer']['date'],"%Y-%m-%dT%H:%M:%SZ") - tz |                 status['commit'] = format_datetime(new_commit_date, format='short', locale=get_locale()) | ||||||
|                 status['commit'] = format_datetime(form_date, format='short', locale=get_locale()) |  | ||||||
|             else: |             else: | ||||||
|                 status['commit'] = u'Unknown' |                 status['error'] = _(u'Could not fetch update information') | ||||||
|         else: |  | ||||||
|             status['status'] = False |  | ||||||
|     return json.dumps(status) |     return json.dumps(status) | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Virgil Grigoras
					Virgil Grigoras