backup now

This commit is contained in:
antelle 2016-08-20 11:01:33 +03:00
parent 314af31951
commit 65606a827d
4 changed files with 53 additions and 1 deletions

View File

@ -15,6 +15,7 @@ var Backbone = require('backbone'),
IdGenerator = require('../util/id-generator'),
Logger = require('../util/logger'),
FeatureDetector = require('../util/feature-detector'),
Format = require('../util/format'),
AutoType = require('../auto-type');
require('../mixins/protected-value-ex');
@ -771,6 +772,25 @@ var AppModel = Backbone.Model.extend({
fileInfo.set('backup', backup);
}
this.fileInfos.save();
},
backupFile: function(file, data, callback) {
let opts = file.get('opts');
let backup = file.get('backup');
let logger = new Logger('sync', file.get('name'));
if (!backup || !backup.storage || !backup.path) {
return callback('Invalid backup settings');
}
let path = backup.path.replace('{date}', Format.dtStrFs(new Date()));
logger.info('Backup file to', backup.storage, path);
Storage[backup.storage].save(path, opts, data, (err) => {
if (err) {
logger.error('Backup error', err);
} else {
logger.info('Backup complete');
}
callback(err);
});
}
});

View File

@ -25,6 +25,11 @@ var Format = {
},
capFirst: function(str) {
return str[0].toUpperCase() + str.substr(1);
},
dtStrFs: function(dt) {
return dt ? dt.getFullYear() + '-' + this.pad(dt.getMonth() + 1, 2) + '-' + this.pad(dt.getDate(), 2) + 'T' +
this.pad(dt.getHours(), 2) + '-' + this.pad(dt.getMinutes(), 2) + '-' + this.pad(dt.getSeconds(), 2)
: '';
}
};

View File

@ -401,6 +401,9 @@ var Locale = {
setFileBackupPath: 'Backup path',
setFileBackupTime: 'Make backups',
setFileBackupNow: 'Backup now',
setFileBackupNowWorking: 'Working...',
setFileBackupError: 'Backup error',
setFileBackupErrorDescription: 'Error writing backup file',
setFileBackupOnSave: 'Every time I save the file',
setFileBackupDaily: 'Daily',
setFileBackupWeekly: 'Weekly',

View File

@ -171,6 +171,9 @@ var SettingsFileView = Backbone.View.extend({
});
} else {
this.model.getData(data => {
if (!data) {
return;
}
if (Launcher) {
Launcher.getSaveFileName(fileName, path => {
if (path) {
@ -422,7 +425,28 @@ var SettingsFileView = Backbone.View.extend({
},
backupFile: function() {
Alerts.notImplemented();
if (this.backupInProgress) {
return;
}
let backupButton = this.$el.find('.settings__file-button-backup');
backupButton.text(Locale.setFileBackupNowWorking);
this.model.getData(data => {
if (!data) {
this.backupInProgress = false;
backupButton.text(Locale.setFileBackupNow);
return;
}
this.appModel.backupFile(this.model, data, (err) => {
this.backupInProgress = false;
backupButton.text(Locale.setFileBackupNow);
if (err) {
Alerts.error({
title: Locale.setFileBackupError,
body: Locale.setFileBackupErrorDescription + '<pre class="modal__pre">' + _.escape(err.toString()) + '</pre>'
});
}
});
});
},
changeTrash: function(e) {