From 2e21dfa08a7f805aa6da5cba0e5acb054d2e17d3 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Sat, 7 Jul 2018 18:29:45 +0300 Subject: [PATCH] move setProviders to EmbarkJS --- js/embark.js | 36 ++++++++++++++++++++++++++++++++++++ lib/modules/storage/index.js | 21 +-------------------- 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/js/embark.js b/js/embark.js index 2db701e18..0fb38fe1d 100644 --- a/js/embark.js +++ b/js/embark.js @@ -1,3 +1,5 @@ +import {detectSeries} from 'async'; + var EmbarkJS = { onReady: function (cb) { if (typeof (__embarkContext) === 'undefined') { @@ -300,6 +302,40 @@ EmbarkJS.Storage.isAvailable = function () { return this.currentStorage.isAvailable(); }; +let __embarkStorage = {}; + +EmbarkJS.Storage.setProviders = async function (dappConnOptions) { + try { + await detectSeries(dappConnOptions, async (dappConn, callback) => { + if(dappConn === '$BZZ' || dappConn.provider === 'swarm'){ + let options = dappConn; + if(dappConn === '$BZZ') options = {"useOnlyGivenProvider": true}; + try{ + await EmbarkJS.Storage.setProvider('swarm', options); + let isAvailable = await EmbarkJS.Storage.isAvailable(); + callback(null, isAvailable); + }catch(err){ + callback(null, false); // catch errors for when bzz object not initialised but config has requested it to be used + } + } + else if(dappConn.provider === 'ipfs') { + // set the provider then check the connection, if true, use that provider, else, check next provider + try{ + await EmbarkJS.Storage.setProvider('ipfs', dappConn); + let isAvailable = await EmbarkJS.Storage.isAvailable(); + callback(null, isAvailable); + } catch(err) { + callback(null, false); // catch but keep looping by not passing err to callback + } + } + }, function(err, result){ + if(!result) throw new Error('Could not connect to a storage provider using any of the dappConnections in the storage config'); + }); + } catch (err) { + throw new Error('Failed to connect to a storage provider: ' + err.message); + } +}; + EmbarkJS.Messages = {}; EmbarkJS.Messages.Providers = {}; diff --git a/lib/modules/storage/index.js b/lib/modules/storage/index.js index 0f9a2f320..d0c110ce7 100644 --- a/lib/modules/storage/index.js +++ b/lib/modules/storage/index.js @@ -127,29 +127,10 @@ class Storage { if(typeof storageProvider.addProviderToEmbarkJS == 'function') storageProvider.addProviderToEmbarkJS(); }); - // add the storage provider code (__embarkStorage) to embarkjs - this.addProviderToEmbarkJS(); - // add the code to call setProviders in embarkjs after embark is ready this.addSetProviders(); } - /** - * Adds the storage provider code (__embarkStorage) to embarkjs - * - * @returns {void} - */ - addProviderToEmbarkJS(){ - // TODO: make this a shouldAdd condition - if (this._storageConfig === {} || !this._storageConfig.dappConnection || !this._storageConfig.dappConnection.length) { - return; - } - - let code = "\n" + fs.readFileSync(utils.joinPath(__dirname, 'embarkjs.js')).toString(); - - this._embark.addCodeToEmbarkJS(code); - } - /** * Adds the code to call setProviders in embarkjs after embark is ready * @@ -157,7 +138,7 @@ class Storage { */ addSetProviders() { - let code = `\n__embarkStorage.setProviders(${JSON.stringify(this._validDappProviders)});`; + let code = `\nEmbarkJS.Storage.setProviders(${JSON.stringify(this._validDappProviders)});`; let shouldInit = (storageConfig) => { return (this._validDappProviders !== undefined && this._validDappProviders.length > 0 && storageConfig.enabled === true); };