diff --git a/app/assets/javascripts/admin/components/admin-backups-logs.js.es6 b/app/assets/javascripts/admin/components/admin-backups-logs.js.es6 index c2f9df52059..9c92228b8cb 100644 --- a/app/assets/javascripts/admin/components/admin-backups-logs.js.es6 +++ b/app/assets/javascripts/admin/components/admin-backups-logs.js.es6 @@ -2,6 +2,7 @@ import debounce from "discourse/lib/debounce"; import { renderSpinner } from "discourse/helpers/loading-spinner"; import { escapeExpression } from "discourse/lib/utilities"; import { bufferedRender } from "discourse-common/lib/buffered-render"; +import { observes, on } from "ember-addons/ember-computed-decorators"; export default Ember.Component.extend( bufferedRender({ @@ -21,30 +22,38 @@ export default Ember.Component.extend( $div.scrollTop = $div.scrollHeight; }, - _updateFormattedLogs: debounce(function() { - const logs = this.get("logs"); - if (logs.length === 0) { + @on("init") + @observes("logs.[]") + _resetFormattedLogs() { + if (this.get("logs").length === 0) { this._reset(); // reset the cached logs whenever the model is reset - } else { - // do the log formatting only once for HELLish performance - let formattedLogs = this.get("formattedLogs"); - for (let i = this.get("index"), length = logs.length; i < length; i++) { - const date = logs[i].get("timestamp"), - message = escapeExpression(logs[i].get("message")); - formattedLogs += "[" + date + "] " + message + "\n"; - } - // update the formatted logs & cache index - this.setProperties({ - formattedLogs: formattedLogs, - index: logs.length - }); - // force rerender this.rerenderBuffer(); } + }, + + @on("init") + @observes("logs.[]") + _updateFormattedLogs: debounce(function() { + const logs = this.get("logs"); + if (logs.length === 0) return; + + // do the log formatting only once for HELLish performance + let formattedLogs = this.get("formattedLogs"); + for (let i = this.get("index"), length = logs.length; i < length; i++) { + const date = logs[i].get("timestamp"), + message = escapeExpression(logs[i].get("message")); + formattedLogs += "[" + date + "] " + message + "\n"; + } + // update the formatted logs & cache index + this.setProperties({ + formattedLogs: formattedLogs, + index: logs.length + }); + // force rerender + this.rerenderBuffer(); + Ember.run.scheduleOnce("afterRender", this, this._scrollDown); - }, 150) - .observes("logs.[]") - .on("init"), + }, 150), buildBuffer(buffer) { const formattedLogs = this.get("formattedLogs"); diff --git a/app/assets/javascripts/admin/controllers/modals/admin-start-backup.js.es6 b/app/assets/javascripts/admin/controllers/modals/admin-start-backup.js.es6 index 18237198ba2..7bd96b326a4 100644 --- a/app/assets/javascripts/admin/controllers/modals/admin-start-backup.js.es6 +++ b/app/assets/javascripts/admin/controllers/modals/admin-start-backup.js.es6 @@ -1,24 +1,17 @@ import ModalFunctionality from "discourse/mixins/modal-functionality"; -import Backup from "admin/models/backup"; export default Ember.Controller.extend(ModalFunctionality, { adminBackupsLogs: Ember.inject.controller(), - _startBackup(withUploads) { - this.currentUser.set("hideReadOnlyAlert", true); - Backup.start(withUploads).then(() => { - this.get("adminBackupsLogs.logs").clear(); - this.send("backupStarted"); - }); - }, - actions: { - startBackup() { - this._startBackup(); + startBackupWithUploads() { + this.send("closeModal"); + this.send("startBackup", true); }, - startBackupWithoutUpload() { - this._startBackup(false); + startBackupWithoutUploads() { + this.send("closeModal"); + this.send("startBackup", false); }, cancel() { diff --git a/app/assets/javascripts/admin/routes/admin-backups.js.es6 b/app/assets/javascripts/admin/routes/admin-backups.js.es6 index 2d9f185cca5..a0b9342c619 100644 --- a/app/assets/javascripts/admin/routes/admin-backups.js.es6 +++ b/app/assets/javascripts/admin/routes/admin-backups.js.es6 @@ -10,6 +10,7 @@ export default Discourse.Route.extend({ activate() { this.messageBus.subscribe(LOG_CHANNEL, log => { if (log.message === "[STARTED]") { + Discourse.User.currentProp("hideReadOnlyAlert", true); this.controllerFor("adminBackups").set( "model.isOperationRunning", true @@ -62,15 +63,14 @@ export default Discourse.Route.extend({ }, actions: { - startBackup() { + showStartBackupModal() { showModal("admin-start-backup", { admin: true }); this.controllerFor("modal").set("modalClass", "start-backup-modal"); }, - backupStarted() { - this.controllerFor("adminBackups").set("isOperationRunning", true); + startBackup(withUploads) { this.transitionTo("admin.backups.logs"); - this.send("closeModal"); + Backup.start(withUploads); }, destroyBackup(backup) { @@ -100,17 +100,8 @@ export default Discourse.Route.extend({ I18n.t("yes_value"), function(confirmed) { if (confirmed) { - Discourse.User.currentProp("hideReadOnlyAlert", true); - backup.restore().then(function() { - self - .controllerFor("adminBackupsLogs") - .get("logs") - .clear(); - self - .controllerFor("adminBackups") - .set("model.isOperationRunning", true); - self.transitionTo("admin.backups.logs"); - }); + self.transitionTo("admin.backups.logs"); + backup.restore(); } } ); diff --git a/app/assets/javascripts/admin/templates/backups.hbs b/app/assets/javascripts/admin/templates/backups.hbs index 2dcd6e02ba1..fe7861839f1 100644 --- a/app/assets/javascripts/admin/templates/backups.hbs +++ b/app/assets/javascripts/admin/templates/backups.hbs @@ -21,7 +21,7 @@ label="admin.backups.operations.cancel.label" icon="times"}} {{else}} - {{d-button action="startBackup" + {{d-button action="showStartBackupModal" class="btn-primary" title="admin.backups.operations.backup.title" label="admin.backups.operations.backup.label" diff --git a/app/assets/javascripts/admin/templates/modal/admin-start-backup.hbs b/app/assets/javascripts/admin/templates/modal/admin-start-backup.hbs index 250931599b9..0990760888a 100644 --- a/app/assets/javascripts/admin/templates/modal/admin-start-backup.hbs +++ b/app/assets/javascripts/admin/templates/modal/admin-start-backup.hbs @@ -1,5 +1,5 @@ {{#d-modal-body title="admin.backups.operations.backup.confirm"}} - - + + {{/d-modal-body}}