UNPKG

ssb-exporter

Version:

A cli for exporting your scuttlebot history

63 lines (51 loc) 2.19 kB
var fs = require('fs'); var pull = require('pull-stream'); var toPull = require('stream-to-pull-stream'); var sanitize = require("sanitize-filename"); var mlib = require('ssb-msgs'); var ref = require('ssb-ref'); var self = module.exports = { popAndcheckEnd: function(insertedMessages, sbot, cb) { insertedMessages.pop(); if (insertedMessages.length == 0 && cb != null) cb(); }, importFeed: function(exportDir, sbot, cb) { var messages = JSON.parse(fs.readFileSync(exportDir + "/messages.txt")); var userId = messages[0]['value'].author; console.log("importing:", userId); sbot.latestSequence(userId, function (err, seq) { var latestLocalSeq = ""; if (!err) latestLocalSeq = seq.sequence; else if (err && err.message.indexOf('not found') === -1) throw err; console.log("latest seq:" + latestLocalSeq); var insertedMessages = []; messages.forEach(msg => { if (msg['value'].sequence > latestLocalSeq) { console.log("new message with id: " + msg['value'].sequence); insertedMessages.push(msg['value']); sbot.add(msg['value'], function(err) { if (err) throw err; self.popAndcheckEnd(insertedMessages, sbot, cb); }); mlib.indexLinks(msg.value.content, (obj, rel) => { if (ref.type(obj.link) != 'blob') return; insertedMessages.push("blob"); pull( toPull.source(fs.createReadStream(exportDir + "/" + sanitize(obj.link))), sbot.blobs.add(function (err, hash) { if (err) throw err; self.popAndcheckEnd(insertedMessages, sbot, cb); }) ); }); } }); self.popAndcheckEnd(insertedMessages, sbot, cb); }); } };