You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

update.js 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. /*
  2. * Copyright (c) 2014
  3. *
  4. * This file is licensed under the Affero General Public License version 3
  5. * or later.
  6. *
  7. * See the COPYING-README file.
  8. *
  9. */
  10. (function() {
  11. OC.Update = {
  12. _started : false,
  13. /**
  14. * Start the upgrade process.
  15. *
  16. * @param $el progress list element
  17. */
  18. start: function($el, options) {
  19. if (this._started) {
  20. return;
  21. }
  22. var hasWarnings = false;
  23. this.$el = $el;
  24. this._started = true;
  25. var self = this;
  26. $(window).on('beforeunload.inprogress', function () {
  27. return t('core', 'The upgrade is in progress, leaving this page might interrupt the process in some environments.');
  28. });
  29. $('#update-progress-title').html(t(
  30. 'core',
  31. 'Updating to {version}', {
  32. version: options.version
  33. })
  34. );
  35. var updateEventSource = new OC.EventSource(OC.webroot+'/core/ajax/update.php');
  36. updateEventSource.listen('success', function(message) {
  37. self.setMessage(message);
  38. });
  39. updateEventSource.listen('notice', function(message) {
  40. self.setPermanentMessage(message);
  41. hasWarnings = true;
  42. });
  43. updateEventSource.listen('error', function(message) {
  44. $('#update-progress-message').hide();
  45. $('#update-progress-icon')
  46. .addClass('icon-error-white')
  47. .removeClass('icon-loading-dark');
  48. message = message || t('core', 'An error occurred.');
  49. $(window).off('beforeunload.inprogress');
  50. self.setErrorMessage(message);
  51. message = t('core', 'Please reload the page.');
  52. $('<span>').addClass('error').append('<a href=".">'+message+'</a><br />').appendTo($el);
  53. updateEventSource.close();
  54. });
  55. updateEventSource.listen('failure', function(message) {
  56. $(window).off('beforeunload.inprogress');
  57. $('#update-progress-message').hide();
  58. $('#update-progress-icon')
  59. .addClass('icon-error-white')
  60. .removeClass('icon-loading-dark');
  61. self.setErrorMessage(message);
  62. var span = $('<span>')
  63. .addClass('bold');
  64. if(message === 'Exception: Updates between multiple major versions and downgrades are unsupported.') {
  65. span.append(t('core', 'The update was unsuccessful. For more information <a href="{url}">check our forum post</a> covering this issue.', {'url': 'https://forum.owncloud.org/viewtopic.php?f=17&t=32087'}));
  66. } else {
  67. span.append(t('core', 'The update was unsuccessful. ' +
  68. 'Please report this issue to the ' +
  69. '<a href="https://github.com/owncloud/core/issues" target="_blank">ownCloud community</a>.'));
  70. }
  71. span.appendTo($el);
  72. });
  73. updateEventSource.listen('done', function() {
  74. $(window).off('beforeunload.inprogress');
  75. $('#update-progress-message').hide();
  76. $('#update-progress-icon')
  77. .addClass('icon-checkmark-white')
  78. .removeClass('icon-loading-dark');
  79. if (hasWarnings) {
  80. $el.find('.update-show-detailed').before(
  81. $('<span>')
  82. .append('<br />')
  83. .append(t('core', 'The update was successful. There were warnings.'))
  84. );
  85. var message = t('core', 'Please reload the page.');
  86. $('<span>').append(message).append('<br />').appendTo($el);
  87. } else {
  88. // FIXME: use product name
  89. $('<span>')
  90. .append(t('core', 'The update was successful. Redirecting you to ownCloud now.'))
  91. .appendTo($el);
  92. setTimeout(function () {
  93. OC.redirect(OC.webroot + '/');
  94. }, 3000);
  95. }
  96. });
  97. },
  98. setMessage: function(message) {
  99. $('#update-progress-message').html(message);
  100. $('#update-progress-detailed')
  101. .append($('<span>'))
  102. .append(message)
  103. .append($('<br>'));
  104. },
  105. setPermanentMessage: function(message) {
  106. $('#update-progress-message').html(message);
  107. $('#update-progress-message-warnings')
  108. .show()
  109. .append($('<ul>').append(message));
  110. $('#update-progress-detailed')
  111. .append($('<span>'))
  112. .append(message)
  113. .append($('<br>'));
  114. },
  115. setErrorMessage: function (message) {
  116. $('#update-progress-message-error')
  117. .show()
  118. .html(message);
  119. $('#update-progress-detailed')
  120. .append($('<span>'))
  121. .append(message)
  122. .append($('<br>'));
  123. }
  124. };
  125. })();
  126. $(document).ready(function() {
  127. $('.updateButton').on('click', function() {
  128. var $updateEl = $('.update');
  129. var $progressEl = $('.update-progress');
  130. $progressEl.removeClass('hidden');
  131. $('.updateOverview').addClass('hidden');
  132. $('#update-progress-message-error').hide();
  133. $('#update-progress-message-warnings').hide();
  134. OC.Update.start($progressEl, {
  135. productName: $updateEl.attr('data-productname'),
  136. version: $updateEl.attr('data-version')
  137. });
  138. return false;
  139. });
  140. $('.update-show-detailed').on('click', function() {
  141. $('#update-progress-detailed').toggleClass('hidden');
  142. return false;
  143. });
  144. });