| | |
| | | callback(e || new Error('failed request')); |
| | | }); |
| | | }, |
| | | // Fetching local and remote files |
| | | // Local file access |
| | | loadLocalEntry: function(path, callback) { |
| | | var stat, node; |
| | | |
| | |
| | | return callback(new Error('node type not supported')); |
| | | } |
| | | }, |
| | | loadRemoteEntry: function(mount, pathinfo, callback) { |
| | | if (pathinfo.type == 'file') { |
| | | mount.opts.provider.read(mount.opts.cloud, pathinfo.url, |
| | | function(data) { |
| | | callback(null, { contents: data, timestamp: pathinfo.timestamp, mode: CLOUDFS._FILE_MODE }); |
| | | }, |
| | | function(e) { |
| | | callback(e); |
| | | }); |
| | | } else { |
| | | callback(null, { timestamp: pathinfo.timestamp, mode: CLOUDFS._DIR_MODE }); |
| | | } |
| | | }, |
| | | // storing local and remote files |
| | | storeLocalEntry: function(path, entry, callback) { |
| | | try { |
| | | if (FS.isDir(entry.mode)) { |
| | | try { |
| | | FS.mkdir(path, entry.mode); |
| | | } catch(e) { |
| | | // ignore existing dirs |
| | | } |
| | | } else if (FS.isFile(entry.mode)) { |
| | | FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true }); |
| | | } else { |
| | | return callback(new Error('node type not supported')); |
| | | } |
| | | |
| | | FS.utime(path, entry.timestamp, entry.timestamp); |
| | | } catch (e) { |
| | | return callback(e); |
| | | try { |
| | | if (FS.isDir(entry.mode)) { |
| | | try { |
| | | FS.mkdir(path, entry.mode); |
| | | } catch(e) { |
| | | // ignore existing dirs |
| | | } |
| | | } else if (FS.isFile(entry.mode)) { |
| | | FS.writeFile(path, entry.contents, { encoding: 'binary', canOwn: true }); |
| | | } else { |
| | | return callback(new Error('node type not supported')); |
| | | } |
| | | |
| | | callback(null); |
| | | FS.utime(path, entry.timestamp, entry.timestamp); |
| | | } catch (e) { |
| | | return callback(e); |
| | | } |
| | | |
| | | callback(null); |
| | | }, |
| | | storeRemoteEntry: function(mount, pathinfo, entry, callback) { |
| | | if (FS.isFile(entry.mode)) { |
| | | mount.opts.provider.write(mount.opts.cloud, pathinfo, entry.contents, function() { |
| | | callback(null); |
| | | }, |
| | | function(e) { |
| | | callback(e); |
| | | }) |
| | | } |
| | | }, |
| | | // remove local and remote files |
| | | removeLocalEntry: function(path, callback) { |
| | | try { |
| | | var lookup = FS.lookupPath(path); |
| | |
| | | |
| | | callback(null); |
| | | }, |
| | | // Remote file access |
| | | loadRemoteEntry: function(mount, pathinfo, callback) { |
| | | if (pathinfo.type == 'file') { |
| | | mount.opts.provider.read(mount.opts.cloud, pathinfo.url, |
| | | function(data) { |
| | | callback(null, { contents: data, timestamp: pathinfo.timestamp, mode: CLOUDFS._FILE_MODE }); |
| | | }, |
| | | function(e) { |
| | | callback(e); |
| | | }); |
| | | } else { |
| | | callback(null, { timestamp: pathinfo.timestamp, mode: CLOUDFS._DIR_MODE }); |
| | | } |
| | | }, |
| | | storeRemoteEntry: function(mount, pathinfo, entry, callback) { |
| | | if (FS.isFile(entry.mode)) { |
| | | mount.opts.provider.write(mount.opts.cloud, pathinfo, entry.contents, function() { |
| | | callback(null); |
| | | }, |
| | | function(e) { |
| | | callback(e); |
| | | }) |
| | | } |
| | | }, |
| | | removeRemoteEntry: function(mount, pathinfo, callback) { |
| | | if (pathinfo.type == 'file') { |
| | | mount.opts.provider.rm(mount.opts.cloud, pathinfo, function() { |