diff --git a/couchpotato/core/_base/updater/main.py b/couchpotato/core/_base/updater/main.py index 0d7b04f6..5d2e7e2e 100644 --- a/couchpotato/core/_base/updater/main.py +++ b/couchpotato/core/_base/updater/main.py @@ -28,7 +28,7 @@ class Updater(Plugin): else: self.updater = SourceUpdater() - fireEvent('schedule.interval', 'updater.check', self.check, hours = 6) + fireEvent('schedule.interval', 'updater.check', self.autoUpdate, hours = 6) addEvent('app.load', self.check) addEvent('updater.info', self.info) @@ -48,17 +48,20 @@ class Updater(Plugin): 'return': {'type': 'see updater.info'} }) + def autoUpdate(self): + if self.check() and self.conf('automatic') and not self.updater.update_failed: + self.updater.doUpdate() + def check(self): if self.isDisabled(): return if self.updater.check(): - if self.conf('automatic') and not self.updater.update_failed: - if self.updater.doUpdate(): - fireEventAsync('app.restart') - else: - if self.conf('notification'): - fireEvent('updater.available', message = 'A new update is available', data = self.updater.info()) + if self.conf('notification') and not self.conf('automatic'): + fireEvent('updater.available', message = 'A new update is available', data = self.updater.info()) + return True + + return False def info(self): return self.updater.info() @@ -67,12 +70,22 @@ class Updater(Plugin): return jsonified(self.updater.info()) def checkView(self): - self.check() - return self.updater.getInfo() + return jsonified({ + 'update_available': self.check(), + 'info': self.updater.info() + }) def doUpdateView(self): + + self.check() + if not self.update_version: + log.error('Trying to update when no update is available.') + success = False + else: + success = self.updater.doUpdate() + return jsonified({ - 'success': self.updater.doUpdate() + 'success': success }) @@ -137,6 +150,7 @@ class GitUpdater(BaseUpdater): self.repo = LocalRepository(Env.get('app_dir'), command = git_command) def doUpdate(self): + try: log.debug('Stashing local changes') self.repo.saveStash() @@ -152,6 +166,8 @@ class GitUpdater(BaseUpdater): version_date = datetime.fromtimestamp(info['update_version']['date']) fireEvent('updater.updated', 'Updated to a new version with hash "%s", this version is from %s' % (info['update_version']['hash'], version_date), data = info) + fireEventAsync('app.restart') + return True except: log.error('Failed updating via GIT: %s' % traceback.format_exc()) @@ -243,6 +259,8 @@ class SourceUpdater(BaseUpdater): # Write update version to file self.createFile(self.version_file, json.dumps(self.update_version)) + fireEventAsync('app.restart') + return True except: log.error('Failed updating: %s' % traceback.format_exc()) diff --git a/couchpotato/core/_base/updater/static/updater.js b/couchpotato/core/_base/updater/static/updater.js index a2660086..fe0a632c 100644 --- a/couchpotato/core/_base/updater/static/updater.js +++ b/couchpotato/core/_base/updater/static/updater.js @@ -16,7 +16,15 @@ var UpdaterBase = new Class({ var self = this; Api.request('updater.check', { - 'onComplete': onComplete || Function.from() + 'onComplete': function(json){ + if(onComplete) + onComplete(json); + + if(json.update_available) + self.doUpdate(); + else + App.unBlockPage() + } }) }, @@ -81,15 +89,19 @@ var UpdaterBase = new Class({ Api.request('updater.update', { 'onComplete': function(json){ if(json.success){ - App.restart('Please wait while CouchPotato is being updated with more awesome stuff.', 'Updating'); - App.checkAvailable.delay(500, App, [1000, function(){ - window.location.reload(); - }]); - if(self.message) - self.message.destroy(); + self.updating(); } } }); + }, + + updating: function(){ + App.blockPage('Please wait while CouchPotato is being updated with more awesome stuff.', 'Updating'); + App.checkAvailable.delay(500, App, [1000, function(){ + window.location.reload(); + }]); + if(self.message) + self.message.destroy(); } }); diff --git a/couchpotato/static/scripts/couchpotato.js b/couchpotato/static/scripts/couchpotato.js index 21cd315b..b983fb5a 100644 --- a/couchpotato/static/scripts/couchpotato.js +++ b/couchpotato/static/scripts/couchpotato.js @@ -24,7 +24,7 @@ var CouchPotato = new Class({ if(window.location.hash) History.handleInitialState(); - + self.openPage(window.location.pathname); History.addEvent('change', self.openPage.bind(self)); @@ -211,10 +211,10 @@ var CouchPotato = new Class({ }]); }, - checkForUpdate: function(func){ + checkForUpdate: function(onComplete){ var self = this; - Updater.check(func) + Updater.check(onComplete) self.blockPage('Please wait. If this takes to long, something must have gone wrong.', 'Checking for updates'); self.checkAvailable(3000); @@ -244,6 +244,8 @@ var CouchPotato = new Class({ blockPage: function(message, title){ var self = this; + self.unBlockPage(); + var body = $(document.body); self.mask = new Element('div.mask').adopt( new Element('div').adopt( @@ -259,9 +261,10 @@ var CouchPotato = new Class({ unBlockPage: function(){ var self = this; - self.mask.get('tween').start('opacity', 0).chain(function(){ - this.element.destroy() - }); + if(self.mask) + self.mask.get('tween').start('opacity', 0).chain(function(){ + this.element.destroy() + }); }, createUrl: function(action, params){ diff --git a/couchpotato/static/scripts/page/about.js b/couchpotato/static/scripts/page/about.js index ad0dd5b9..93687b49 100644 --- a/couchpotato/static/scripts/page/about.js +++ b/couchpotato/static/scripts/page/about.js @@ -48,7 +48,7 @@ var AboutSettingTab = new Class({ 'text': 'Getting version...', 'events': { 'click': App.checkForUpdate.bind(App, function(json){ - self.fillVersion(json) + self.fillVersion(json.info) }), 'mouseenter': function(){ this.set('text', 'Check for updates')