keeweb/app/scripts/storage/storage-dropbox.js

105 lines
3.3 KiB
JavaScript
Raw Normal View History

2015-12-02 21:39:40 +01:00
'use strict';
2015-12-12 09:53:50 +01:00
var DropboxLink = require('../comp/dropbox-link'),
Logger = require('../util/logger');
var logger = new Logger('storage-dropbox');
2015-12-02 21:39:40 +01:00
var StorageDropbox = {
name: 'dropbox',
2016-03-12 12:22:35 +01:00
icon: 'dropbox',
2015-12-02 21:39:40 +01:00
enabled: true,
2016-03-13 17:08:25 +01:00
uipos: 20,
2015-12-02 21:39:40 +01:00
2015-12-12 16:43:43 +01:00
_convertError: function(err) {
if (!err) {
return err;
}
if (err.status === DropboxLink.ERROR_NOT_FOUND) {
err.notFound = true;
}
if (err.status === DropboxLink.ERROR_CONFLICT) {
err.revConflict = true;
}
return err;
},
2016-03-13 17:08:25 +01:00
needShowOpenConfig: function() {
2016-03-13 17:45:55 +01:00
return !DropboxLink.isValidKey();
},
getOpenConfig: function() {
return {
desc: 'dropboxSetupDesc',
fields: [
{id: 'key', title: 'dropboxAppKey', desc: 'dropboxAppKeyDesc', type: 'text', required: true, pattern: '\\w{10,}'}
]
};
},
applyConfig: function(config, callback) {
if (config.key) {
DropboxLink.authenticate(function(err) {
if (!err) {
DropboxLink.setKey(config.key);
}
callback(err);
}, config.key);
}
2016-03-13 17:08:25 +01:00
},
2015-12-12 16:43:43 +01:00
getPathForName: function(fileName) {
return '/' + fileName + '.kdbx';
},
2016-03-12 17:49:52 +01:00
load: function(path, opts, callback) {
2015-12-12 09:53:50 +01:00
logger.debug('Load', path);
var ts = logger.ts();
2015-12-07 20:07:56 +01:00
DropboxLink.openFile(path, function(err, data, stat) {
2015-12-12 09:53:50 +01:00
logger.debug('Loaded', path, stat ? stat.versionTag : null, logger.ts(ts));
2015-12-12 16:43:43 +01:00
err = StorageDropbox._convertError(err);
2015-12-08 20:18:35 +01:00
if (callback) { callback(err, data, stat ? { rev: stat.versionTag } : null); }
2015-12-12 09:53:50 +01:00
}, _.noop);
2015-12-08 20:18:35 +01:00
},
2016-03-12 17:49:52 +01:00
stat: function(path, opts, callback) {
2015-12-12 09:53:50 +01:00
logger.debug('Stat', path);
var ts = logger.ts();
2015-12-08 20:18:35 +01:00
DropboxLink.stat(path, function(err, stat) {
2015-12-13 21:03:29 +01:00
if (stat && stat.isRemoved) {
2015-12-12 16:43:43 +01:00
err = new Error('File removed');
err.notFound = true;
}
2015-12-12 09:53:50 +01:00
logger.debug('Stated', path, stat ? stat.versionTag : null, logger.ts(ts));
2015-12-12 16:43:43 +01:00
err = StorageDropbox._convertError(err);
2015-12-08 20:18:35 +01:00
if (callback) { callback(err, stat ? { rev: stat.versionTag } : null); }
2015-12-12 09:53:50 +01:00
}, _.noop);
2015-12-02 21:39:40 +01:00
},
2016-03-12 17:49:52 +01:00
save: function(path, opts, data, callback, rev) {
2015-12-12 09:53:50 +01:00
logger.debug('Save', path, rev);
var ts = logger.ts();
2015-12-12 16:43:43 +01:00
DropboxLink.saveFile(path, data, rev, function(err, stat) {
2015-12-12 09:53:50 +01:00
logger.debug('Saved', path, logger.ts(ts));
2015-12-11 21:51:16 +01:00
if (!callback) { return; }
2015-12-12 16:43:43 +01:00
err = StorageDropbox._convertError(err);
callback(err, stat ? { rev: stat.versionTag } : null);
2015-12-12 09:53:50 +01:00
}, _.noop);
2016-03-13 17:08:25 +01:00
},
list: function(callback) {
DropboxLink.authenticate(function(err) {
if (err) { return callback(err); }
DropboxLink.getFileList(function(err, files, dirStat, filesStat) {
if (err) { return callback(err); }
var result = filesStat
.filter(function(f) { return !f.isFolder && !f.isRemoved; })
.map(function(f) { return { name: f.name, path: f.path, rev: f.versionTag }; });
callback(null, result);
});
});
2015-12-02 21:39:40 +01:00
}
};
module.exports = StorageDropbox;