| | |
| | | var LibraryCLOUDFS = { |
| | | $CLOUDFS__deps: ['$FS', '$MEMFS', '$PATH'], |
| | | $CLOUDFS: { |
| | | applicationToken: '__NOTOKEN__', |
| | | remoteAPIEndpoint: 'http://asmjs.brigadoon.outoforder.cc/cloud', |
| | | |
| | | mount: function(mount) { |
| | | console.log("Mounting", mount); |
| | | var provider = CLOUDFS.fetchProvider(mount); |
| | | if (provider) { |
| | | mount.opts.provider = provider; |
| | | console.log("Mounting", mount); |
| | | } else { |
| | | mount.opts.disabled = true; |
| | | Module.print("WARNING: Cloud provider not available. Disabling Sync"); |
| | | } |
| | | return MEMFS.mount.apply(null, arguments); |
| | | }, |
| | | syncfs: function(mount, populate, callback) { |
| | | window.HB_mount = mount; |
| | | if (mount.opts.disabled) { |
| | | return callback(new Error("Syncing Disabled")); |
| | | } |
| | | |
| | | console.log("Syncing", mount, populate); |
| | | // re-use IDBFS.getLocalSet for now |
| | | CLOUDFS.getLocalSet(mount, function(err, local) { |
| | |
| | | }); |
| | | }); |
| | | }, |
| | | // XHR Utility function |
| | | xhrLoad: function(url, onload, onerror) { |
| | | var xhr = new XMLHttpRequest(); |
| | | xhr.open('GET', url, true); |
| | | xhr.onload = function () { |
| | | if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { |
| | | onload(xhr.response); |
| | | } else { |
| | | onerror(); |
| | | // Utility functions |
| | | fetchProvider: function(mount) { |
| | | if (mount.opts.provider === undefined || window[mount.opts.provider] === undefined) { |
| | | return false; |
| | | } |
| | | }; |
| | | xhr.onerror = onerror; |
| | | xhr.send(null); |
| | | var provider = window[mount.opts.provider]; |
| | | var requiredMethods = ['listFiles', 'downloadFile', 'uploadFile', 'removeFile']; |
| | | var valid = requiredMethods.every(function(method) { |
| | | return (method in provider); |
| | | }); |
| | | if (valid) { |
| | | Module.print('Cloud provider vendor: ' + provider.vendor); |
| | | return provider; |
| | | } else { |
| | | return false; |
| | | } |
| | | }, |
| | | // Getting list of entities |
| | | getLocalSet: function(mount, callback) { |
| | |
| | | return callback(null, { type: 'local', entries: entries }); |
| | | }, |
| | | getRemoteSet: function(mount, callback) { |
| | | var url = CLOUDFS.remoteAPIEndpoint + '/storage/files'; |
| | | CLOUDFS.xhrLoad(url, function(data) { |
| | | mount.opts.provider.listFiles(mount.opts.cloud, function(data) { |
| | | var entries = {}, |
| | | toAbsolute = function(p) { return PATH.join2(mount.mountpoint, p); }; |
| | | json = JSON.parse(data); |