From 407b4322276018112a3342c0255174ec68eece64 Mon Sep 17 00:00:00 2001 From: Julian Descottes Date: Tue, 17 Oct 2017 02:09:28 +0200 Subject: [PATCH] Show error message if BackupDatabase promise rejected --- .../dialogs/backups/steps/SelectSession.js | 47 +++++++++------- .../dialogs/backups/steps/SessionDetails.js | 55 +++++++++++-------- 2 files changed, 58 insertions(+), 44 deletions(-) diff --git a/src/js/controller/dialogs/backups/steps/SelectSession.js b/src/js/controller/dialogs/backups/steps/SelectSession.js index 0c1b5b97..c7e56853 100644 --- a/src/js/controller/dialogs/backups/steps/SelectSession.js +++ b/src/js/controller/dialogs/backups/steps/SelectSession.js @@ -39,31 +39,36 @@ ns.SelectSession.prototype.update = function () { pskl.app.backupService.list().then(function (sessions) { - var html = ''; - if (sessions.length === 0) { - html = pskl.utils.Template.get('session-list-empty'); - } else { - var sessionItemTemplate = pskl.utils.Template.get('session-list-item'); - var html = ''; - sessions.forEach(function (session) { - if (session.id === pskl.app.sessionId) { - // Do not show backups for the current session. - return; - } - var view = { - id: session.id, - name: session.name, - description: session.description ? '- ' + session.description : '', - date: pskl.utils.DateUtils.format(session.endDate, 'the {{Y}}/{{M}}/{{D}} at {{H}}:{{m}}'), - count: session.count === 1 ? '1 snapshot' : session.count + ' snapshots' - }; - html += pskl.utils.Template.replace(sessionItemTemplate, view); - }); - } + var html = this.getMarkupForSessions_(sessions); + this.container.querySelector('.session-list').innerHTML = html; + }.bind(this)).catch(function () { + var html = pskl.utils.Template.get('session-list-error'); this.container.querySelector('.session-list').innerHTML = html; }.bind(this)); }; + ns.SelectSession.prototype.getMarkupForSessions_ = function (sessions) { + if (sessions.length === 0) { + return pskl.utils.Template.get('session-list-empty'); + } + + var sessionItemTemplate = pskl.utils.Template.get('session-list-item'); + return sessions.reduce(function (previous, session) { + if (session.id === pskl.app.sessionId) { + // Do not show backups for the current session. + return previous; + } + var view = { + id: session.id, + name: session.name, + description: session.description ? '- ' + session.description : '', + date: pskl.utils.DateUtils.format(session.endDate, 'the {{Y}}/{{M}}/{{D}} at {{H}}:{{m}}'), + count: session.count === 1 ? '1 snapshot' : session.count + ' snapshots' + }; + return previous + pskl.utils.Template.replace(sessionItemTemplate, view); + }, ''); + }; + ns.SelectSession.prototype.destroy = function () { pskl.utils.Event.removeAllEventListeners(this); }; diff --git a/src/js/controller/dialogs/backups/steps/SessionDetails.js b/src/js/controller/dialogs/backups/steps/SessionDetails.js index 8fff179e..2a74d943 100644 --- a/src/js/controller/dialogs/backups/steps/SessionDetails.js +++ b/src/js/controller/dialogs/backups/steps/SessionDetails.js @@ -27,33 +27,42 @@ ns.SessionDetails.prototype.onShow = function () { var sessionId = this.backupsController.backupsData.selectedSession; pskl.app.backupService.getSnapshotsBySessionId(sessionId).then(function (snapshots) { - var html = ''; - if (snapshots.length === 0) { - // This should normally never happen, all sessions have at least one snapshot and snapshots - // can not be individually deleted. - console.warn('Could not retrieve snapshots for a session'); - html = pskl.utils.Template.get('snapshot-list-empty'); - } else { - var sessionItemTemplate = pskl.utils.Template.get('snapshot-list-item'); - var html = ''; - snapshots.forEach(function (snapshot) { - var view = { - id: snapshot.id, - name: snapshot.name, - description: snapshot.description ? '- ' + snapshot.description : '', - date: pskl.utils.DateUtils.format(snapshot.date, 'the {{Y}}/{{M}}/{{D}} at {{H}}:{{m}}'), - frames: snapshot.frames === 1 ? '1 frame' : snapshot.frames + ' frames', - resolution: pskl.utils.StringUtils.formatSize(snapshot.width, snapshot.height), - fps: snapshot.fps - }; - html += pskl.utils.Template.replace(sessionItemTemplate, view); - this.updateSnapshotPreview_(snapshot); - }.bind(this)); - } + var html = this.getMarkupForSnapshots_(snapshots); + this.container.querySelector('.snapshot-list').innerHTML = html; + + // Load the image of the first frame for each sprite and update the list. + snapshots.forEach(function (snapshot) { + this.updateSnapshotPreview_(snapshot); + }.bind(this)); + }.bind(this)).catch(function () { + var html = pskl.utils.Template.get('snapshot-list-error'); this.container.querySelector('.snapshot-list').innerHTML = html; }.bind(this)); }; + ns.SessionDetails.prototype.getMarkupForSnapshots_ = function (snapshots) { + if (snapshots.length === 0) { + // This should normally never happen, all sessions have at least one snapshot and snapshots + // can not be individually deleted. + console.warn('Could not retrieve snapshots for a session'); + return pskl.utils.Template.get('snapshot-list-empty'); + } + + var sessionItemTemplate = pskl.utils.Template.get('snapshot-list-item'); + return snapshots.reduce(function (previous, snapshot) { + var view = { + id: snapshot.id, + name: snapshot.name, + description: snapshot.description ? '- ' + snapshot.description : '', + date: pskl.utils.DateUtils.format(snapshot.date, 'the {{Y}}/{{M}}/{{D}} at {{H}}:{{m}}'), + frames: snapshot.frames === 1 ? '1 frame' : snapshot.frames + ' frames', + resolution: pskl.utils.StringUtils.formatSize(snapshot.width, snapshot.height), + fps: snapshot.fps + }; + return previous + pskl.utils.Template.replace(sessionItemTemplate, view); + }, ''); + }; + ns.SessionDetails.prototype.updateSnapshotPreview_ = function (snapshot) { pskl.utils.serialization.Deserializer.deserialize( JSON.parse(snapshot.serialized),