From 15342ff73287bb2e23972687cf27161b910e7f31 Mon Sep 17 00:00:00 2001 From: haad Date: Mon, 23 May 2016 12:08:30 +0200 Subject: [PATCH] Make pubsub connect work with js-ipfs and js-ipfs-api, test with both --- src/OrbitDB.js | 75 ++++++++++++++++++++++++++++-------------- test/client.test.js | 31 ++++++++--------- test/counterdb.test.js | 28 +++++++++------- 3 files changed, 82 insertions(+), 52 deletions(-) diff --git a/src/OrbitDB.js b/src/OrbitDB.js index a7d4b34..9210e07 100644 --- a/src/OrbitDB.js +++ b/src/OrbitDB.js @@ -109,33 +109,58 @@ class OrbitDB { _connect(hash, username, password, allowOffline) { if(allowOffline === undefined) allowOffline = false; + const catFromJsIpfsApi = (hash) => { + return new Promise((resolve, reject) => { + if(this._ipfs.cat) { + logger.debug(".cat with js-ipfs-api"); + this._ipfs.cat(hash, (err, res) => { + if(err) return reject(err) + let buf = ''; + res + .on('error', (err) => reject(err)) + .on('data', (data) => buf += data) + .on('end', () => resolve(buf.toString())) + }); + } else { + reject("not using js-ipfs-api"); + } + }); + }; + + const catFromJsIpfs = (hash) => { + return new Promise((resolve, reject) => { + if(this._ipfs.files.cat) { + logger.debug(".cat with js-ipfs"); + this._ipfs.files.cat(hash, (err, res) => { + if(err) return reject(err); + let buf = ''; + res.on('data', (res) => { + res.stream + .on('error', (err) => reject(err)) + .on('data', (data) => buf += data) + .on('end', () => resolve(buf.toString())) + }) + }); + } else { + reject("not using js-ipfs"); + } + }); + }; + const readNetworkInfo = (hash) => { return new Promise((resolve, reject) => { - // js-ipfs-api - this._ipfs.cat(hash, (err, res) => { - if(err) return reject(err) - let buf = ''; - res - .on('error', (err) => reject(err)) - .on('data', (data) => buf += data) - .on('end', () => resolve(buf.toString())) - }); - // js-ipfs - // this._ipfs.files.cat(hash, (err, res) => { - // if(err) return reject(err) - // let buf = ''; - // res.on('data', (res) => { - // res.stream - // .on('error', (err) => reject(err)) - // .on('data', (data) => buf += data) - // .on('end', () => resolve(buf.toString())) - // }) - // }); - // mock - // resolve(JSON.stringify({ - // name: 'localhost dev network', - // publishers: ['localhost:3333'] - // })) + catFromJsIpfsApi(hash).then(resolve) + .catch((e) => { + catFromJsIpfs(hash).then(resolve) + .catch((e) => { + logger.warn(".cat - no api or content found, using mock") + resolve(JSON.stringify({ + name: 'localhost dev network', + publishers: ['localhost:3333'] + })) + }) + + }) }); }; diff --git a/test/client.test.js b/test/client.test.js index a33cee9..8c6099e 100644 --- a/test/client.test.js +++ b/test/client.test.js @@ -21,21 +21,22 @@ const password = ''; let ipfs, ipfsDaemon; const IpfsApis = [ -// { -// // js-ipfs -// start: () => { -// return new Promise((resolve, reject) => { -// const IPFS = require('ipfs') -// const ipfs = new IPFS(); -// ipfs.goOnline((err) => { -// if(err) reject(err) -// resolve(ipfs) -// }); -// }); -// }, -// // stop: () => Promise.resolve() -// stop: () => new Promise((resolve, reject) => ipfs.goOffline(resolve)) -// }, +{ + // js-ipfs + start: () => { + return new Promise((resolve, reject) => { + const IPFS = require('ipfs') + const ipfs = new IPFS(); + // resolve(ipfs); + ipfs.goOnline((err) => { + if(err) reject(err) + resolve(ipfs) + }); + }); + }, + // stop: () => Promise.resolve() + stop: () => new Promise((resolve, reject) => ipfs.goOffline(resolve)) +}, { // js-ipfs-api via local daemon start: () => { diff --git a/test/counterdb.test.js b/test/counterdb.test.js index 6555f18..d83531c 100644 --- a/test/counterdb.test.js +++ b/test/counterdb.test.js @@ -20,18 +20,22 @@ const ipfsPath = '/tmp/orbittests'; let ipfs, ipfsDaemon; const IpfsApis = [ -// { -// // js-ipfs -// start: () => { -// return new Promise((resolve, reject) => { -// const IPFS = require('ipfs') -// const ipfs = new IPFS(); -// ipfs.goOnline(() => resolve(ipfs)); -// // resolve(ipfs); -// }); -// }, -// stop: () => new Promise((resolve, reject) => ipfs.goOffline(resolve)) -// }, +{ + // js-ipfs + start: () => { + return new Promise((resolve, reject) => { + const IPFS = require('ipfs') + const ipfs = new IPFS(); + // resolve(ipfs); + ipfs.goOnline((err) => { + if(err) reject(err) + resolve(ipfs) + }); + }); + }, + // stop: () => Promise.resolve() + stop: () => new Promise((resolve, reject) => ipfs.goOffline(resolve)) +}, { // js-ipfs-api via local daemon start: () => {