GithubHelp home page GithubHelp logo

p2p-file-store's Introduction

p2p-file-store

Filesystem-based blob store that syncs to other fs-based blob stores.

DEPRECATION NOTICE

This module has been broken apart into safe-fs-blob-store and blob-store-replication-stream.

Usage

var MediaStore = require('p2p-file-store')
var fs = require('fs')

var store1 = MediaStore('/tmp/media-one')
var store2 = MediaStore('/tmp/media-two')

var pending = 2

var ws1 = store1.createWriteStream('foo_bar.png', doneWriting)
ws1.end('hello')

var ws2 = store2.createWriteStream('baz_bax.png', doneWriting)
ws2.end('greetings')

function doneWriting () {
  if (--pending === 0) {
    replicate()
  }
}

function replicate () {
  store1.replicateStore(store2, function (err) {
    store2.createReadStream('foo_bar.png').pipe(process.stdout)
  })
}

outputs

hello

API

var MediaStore = require('p2p-file-store')

var store = new MediaStore(dir)

Creates a new file store at the given directory path dir. This directory and any needed subdirectories will be created automatically as needed.

var rs = store.createReadStream(name)

Create a Readable stream of the contents of the file named name.

var ws = store.createWriteStream(name[, cb])

Create a Writable stream that will store the file named name. The callback cb is called when all filesystem operations are completed, or there was an error, with the signature function (err) { ... }.

store.replicateStore(otherStore[, opts][, cb])

Replicate this store with another store. All files in store that is not in otherStore will be transferred to otherStore, and vice-versa.

opts is an object that may have the following properties:

  • opts.progressFn (function) - a function to call with periodic progress events, with signature function (percent) {...}

The callback cb is called on completion or error, with the signature function (err) { ... }.

store.replicateStream([opts])

Returns a Duplex stream that can perform file store replication with another file store duplex stream:

var r1 = store1.replicateStream()
var r2 = store2.replicateStream()

r1.pipe(r2).pipe(r1)

var pending = 2
r1.on('end', done)
r2.on('end', done)

function done () {
  if (--pending === 0) {
    console.log('finished replicating')
  }
}

opts is an object that may have the following properties:

  • opts.progressFn (function) - a function to call with periodic progress events, with signature function (percent) {...}

Install

With npm installed, run

$ npm install p2p-file-store

License

ISC

p2p-file-store's People

Contributors

hackergrrl avatar

Stargazers

Pavel avatar Nate Goldman avatar Seth Vincent avatar Jake Burden avatar Jannis R avatar

Watchers

 avatar  avatar

Forkers

okdistribute

p2p-file-store's Issues

Add WANT replication hooks

The module's replication process works by each side sharing what data they HAVE, and then deciding what subset of each other side's data they WANT. Right now the module is hard-coded to ask for all missing files, but this might not always be what's desired. You could specify callbacks like

var rs = store.createReplicationStream({ wantFilterFn: want })
rs.pipe(out).pipe(rs)

function want (filename, done) {
  if (/.tgz/.test(filename)) {
    done(null, true)
  } else {
    done(null, false)
  }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.