backups ui

This commit is contained in:
antelle 2016-08-16 23:11:54 +03:00
parent 6436b3807a
commit 57b677dcc7
7 changed files with 56 additions and 5 deletions

View File

@ -428,7 +428,8 @@ var AppModel = Backbone.Model.extend({
name: params.name,
storage: params.storage,
path: params.path,
keyFileName: params.keyFileName
keyFileName: params.keyFileName,
backup: fileInfo ? fileInfo.get('backup') : null
});
file.open(params.password, data, params.keyFileData, err => {
if (err) {
@ -582,7 +583,8 @@ var AppModel = Backbone.Model.extend({
editState: null,
rev: null,
syncDate: dt,
openDate: dt
openDate: dt,
backup: file.get('backup')
});
}
file.setSyncProgress();

View File

@ -15,7 +15,8 @@ var FileInfoModel = Backbone.Model.extend({
openDate: null,
keyFileName: null,
keyFileHash: null,
opts: null
opts: null,
backup: null
},
initialize: function(data, options) {

View File

@ -33,7 +33,8 @@ var FileModel = Backbone.Model.extend({
keyChangeForce: -1,
syncing: false,
syncError: null,
syncDate: null
syncDate: null,
backup: null
},
db: null,

View File

@ -396,6 +396,16 @@ var Locale = {
setFileEnableTrash: 'Enable trash',
setFileHistLen: 'History length, keep last records per entry',
setFileHistSize: 'History size, total MB per file',
setFileBackups: 'Backups',
setFileBackupEnable: 'Backup this file',
setFileBackupPath: 'Backup path',
setFileBackupTime: 'Make backups',
setFileBackupNow: 'Backup now',
setFileBackupOnSave: 'Every time I save the file',
setFileBackupDaily: 'Daily',
setFileBackupWeekly: 'Weekly',
setFileBackupMonthly: 'Monthly',
setFileBackupManually: 'Manually',
setFileAdvanced: 'Advanced',
setFileRounds: 'Key encryption rounds',
setFileKeyChangeForce: 'Ask to change key after (days)',

View File

@ -13,6 +13,8 @@ var Backbone = require('backbone'),
kdbxweb = require('kdbxweb'),
FileSaver = require('filesaver');
const DefaultBackupPath = 'Backups/{name}.{date}.bak';
var SettingsFileView = Backbone.View.extend({
template: require('templates/settings/settings-file.hbs'),
@ -31,6 +33,7 @@ var SettingsFileView = Backbone.View.extend({
'blur #settings__file-master-pass': 'blurMasterPass',
'input #settings__file-name': 'changeName',
'input #settings__file-def-user': 'changeDefUser',
'change #settings__file-backup-enabled': 'changeBackupsEnabled',
'change #settings__file-trash': 'changeTrash',
'input #settings__file-hist-len': 'changeHistoryLength',
'input #settings__file-hist-size': 'changeHistorySize',
@ -54,6 +57,7 @@ var SettingsFileView = Backbone.View.extend({
}
});
storageProviders.sort((x, y) => (x.uipos || Infinity) - (y.uipos || Infinity));
let backup = this.model.get('backup');
this.renderTemplate({
cmd: FeatureDetector.actionShortcutSymbol(true),
supportFiles: !!Launcher,
@ -67,6 +71,8 @@ var SettingsFileView = Backbone.View.extend({
password: PasswordGenerator.present(this.model.get('passwordLength')),
defaultUser: this.model.get('defaultUser'),
recycleBinEnabled: this.model.get('recycleBinEnabled'),
backupStorage: backup && backup.storage,
backupPath: backup && backup.path || DefaultBackupPath.replace('{name}', this.model.get('name')),
historyMaxItems: this.model.get('historyMaxItems'),
historyMaxSize: Math.round(this.model.get('historyMaxSize') / 1024 / 1024),
keyEncryptionRounds: this.model.get('keyEncryptionRounds'),
@ -351,6 +357,11 @@ var SettingsFileView = Backbone.View.extend({
this.model.setDefaultUser(value);
},
changeBackupsEnabled: function(e) {
let enabled = e.target.checked;
this.$el.find('.settings__file-backups').toggleClass('hide', !enabled);
},
changeTrash: function(e) {
this.model.setRecycleBinEnabled(e.target.checked);
},

View File

@ -113,7 +113,7 @@ input[type="file"] {
}
select {
margin-bottom: $base-spacing;
margin-bottom: $small-spacing;
max-width: 100%;
-webkit-appearance:none;
-moz-appearance:none;

View File

@ -60,6 +60,32 @@
<label for="settings__file-def-user">{{res 'setFileDefUser'}}:</label>
<input type="text" class="settings__input input-base" id="settings__file-def-user" value="{{defaultUser}}" />
<h2>{{res 'setFileBackups'}}</h2>
<div>
<input type="checkbox" class="settings__input input-base" id="settings__file-backup-enabled" {{#if backupStorage}}checked{{/if}} />
<label for="settings__file-backup-enabled">{{res 'setFileBackupEnable'}}</label>
</div>
<div class="settings__file-backups {{#unless backupStorage}}hide{{/unless}}">
<select class="settings__select input-base" id="settings__file-backup-storage">
{{#if supportFiles}}<option value="file" {{#ifeq backupStorage 'file'}}selected{{/ifeq}}>{{Res 'file'}}</option>{{/if}}
{{#each storageProviders as |prv|}}
<option value="{{prv.name}}" {{#ifeq backupStorage prv.name}}selected{{/ifeq}}>{{res prv.name}}</option>
{{/each}}
</select>
<label for="settings__file-backup-path">{{res 'setFileBackupPath'}}:</label>
<input type="text" class="settings__input input-base" id="settings__file-backup-path" value="{{backupPath}}"
placeholder="{{backupPath}}" />
<label for="settings__file-backup-time">{{res 'setFileBackupTime'}}:</label>
<select class="settings__select input-base" id="settings__file-backup-time">
<option value="0">{{res 'setFileBackupOnSave'}}</option>
<option value="1d">{{res 'setFileBackupDaily'}}</option>
<option value="1w">{{res 'setFileBackupWeekly'}}</option>
<option value="1m">{{res 'setFileBackupMonthly'}}</option>
<option value="-1">{{res 'setFileBackupManually'}}</option>
</select>
<button class="btn-silent settings__file-button-backup">{{res 'setFileBackupNow'}}</button>
</div>
<h2>{{res 'setFileHistory'}}</h2>
<div>
<input type="checkbox" class="settings__input input-base" id="settings__file-trash" {{#if recycleBinEnabled}}checked{{/if}} />