/* * Copyright (c) 2014 * * This file is licensed under the Affero General Public License version 3 * or later. * * See the COPYING-README file. * */ (function() { OC.Update = { _started : false, /** * Start the update process. * * @param $el progress list element */ start: function($el, options) { if (this._started) { return; } var hasWarnings = false; this.$el = $el; this._started = true; var self = this; $(window).on('beforeunload.inprogress', function () { return t('core', 'The update is in progress, leaving this page might interrupt the process in some environments.'); }); $('#update-progress-title').html(t( 'core', 'Update to {version}', { version: options.version }) ); var updateEventSource = new OC.EventSource(OC.webroot+'/core/ajax/update.php'); updateEventSource.listen('success', function(message) { self.setMessage(message); }); updateEventSource.listen('notice', function(message) { self.setPermanentMessage(message); hasWarnings = true; }); updateEventSource.listen('error', function(message) { $('#update-progress-message').hide(); $('#update-progress-icon') .addClass('icon-error-white') .removeClass('icon-loading-dark'); message = message || t('core', 'An error occurred.'); $(window).off('beforeunload.inprogress'); self.setErrorMessage(message); message = t('core', 'Please reload the page.'); $('
').append(''+message+'').appendTo($el); updateEventSource.close(); }); updateEventSource.listen('failure', function(message) { $(window).off('beforeunload.inprogress'); $('#update-progress-message').hide(); $('#update-progress-icon') .addClass('icon-error-white') .removeClass('icon-loading-dark'); self.setErrorMessage(message); var updateUnsuccessful = $('
'); if(message === 'Exception: Updates between multiple major versions and downgrades are unsupported.') { updateUnsuccessful.append(t('core', 'The update was unsuccessful. For more information check our forum post covering this issue.', {'url': 'https://help.nextcloud.com/t/updates-between-multiple-major-versions-are-unsupported/7094'})); } else { updateUnsuccessful.append(t('core', 'The update was unsuccessful. ' + 'Please report this issue to the ' + 'Nextcloud community.')); } updateUnsuccessful.appendTo($el); }); updateEventSource.listen('done', function() { $(window).off('beforeunload.inprogress'); $('#update-progress-message').hide(); $('#update-progress-icon') .addClass('icon-checkmark-white') .removeClass('icon-loading-dark'); if (hasWarnings) { $el.find('.update-show-detailed').before( $('').on('click', function() { window.location.reload(); }) ); } else { // FIXME: use product name $el.find('.update-show-detailed').before( $('
') ); for(var i = 0; i <= 4; i++){ self.updateCountdown(i, 4); } setTimeout(function () { OC.redirect(window.location.href); }, 3000); } }); }, updateCountdown: function (i, total) { setTimeout(function(){ $("#redirect-countdown").text(n('core', 'The update was successful. Redirecting you to Nextcloud in %n second.', 'The update was successful. Redirecting you to Nextcloud in %n seconds.', i)); }, (total - i) * 1000); }, setMessage: function(message) { $('#update-progress-message').html(message); $('#update-progress-detailed') .append('' + message + '
'); }, setPermanentMessage: function(message) { $('#update-progress-message').html(message); $('#update-progress-message-warnings') .show() .append($('' + message + '
'); }, setErrorMessage: function (message) { $('#update-progress-message-error') .show() .html(message); $('#update-progress-detailed') .append('' + message + '
'); } }; })(); $(document).ready(function() { $('.updateButton').on('click', function() { var $updateEl = $('.update'); var $progressEl = $('.update-progress'); $progressEl.removeClass('hidden'); $('.updateOverview').addClass('hidden'); $('#update-progress-message-error').hide(); $('#update-progress-message-warnings').hide(); OC.Update.start($progressEl, { productName: $updateEl.attr('data-productname'), version: $updateEl.attr('data-version') }); return false; }); $('.update-show-detailed').on('click', function() { $('#update-progress-detailed').toggleClass('hidden'); return false; }); });