mirror of
https://github.com/amark/gun.git
synced 2025-03-30 15:08:33 +00:00
fix concurrent writes and remember known nodes
This commit is contained in:
parent
553aa25e71
commit
0489b3d634
27
lib/file.js
27
lib/file.js
@ -19,13 +19,30 @@ Gun.on('opt').event(function(gun, opts) {
|
||||
});
|
||||
all.keys = all.keys || {};
|
||||
all.nodes = all.nodes || {};
|
||||
|
||||
// adapted from https://github.com/toolness/jsondown/blob/master/jsondown.js
|
||||
var isWriting = false, queuedWrites = [];
|
||||
function writeFile(cb,info) {
|
||||
if (isWriting) return queuedWrites.push(cb);
|
||||
isWriting = true;
|
||||
fs.writeFile(opts.file, Gun.text.ify(all), function(err) {
|
||||
isWriting = false;
|
||||
cb(err);
|
||||
if (queuedWrites.length)
|
||||
writeFile( function(err) {
|
||||
queuedWrites.forEach(function(cb) { cb(err); })
|
||||
});
|
||||
queuedWrites=[];
|
||||
});
|
||||
}
|
||||
|
||||
gun.opt({hooks: {
|
||||
get: function get(key, cb, o){
|
||||
var graph, soul;
|
||||
if(soul = Gun.is.soul(key)){
|
||||
if(all.nodes[soul]){
|
||||
(graph = {})[soul] = all.nodes[soul];
|
||||
cb(null, graph);
|
||||
cb(null, graph);
|
||||
(graph = {})[soul] = Gun.union.pseudo(soul);
|
||||
cb(null, graph); // end.
|
||||
}
|
||||
@ -37,14 +54,14 @@ Gun.on('opt').event(function(gun, opts) {
|
||||
return soul? cb(null, {}) : cb(null, null);
|
||||
},
|
||||
put: function(graph, cb, o){
|
||||
all.nodes = gun.__.graph;
|
||||
fs.writeFile(opts.file, Gun.text.ify(all), cb);
|
||||
for (key in gun.__.graph) all.nodes[key]=gun.__.graph[key];
|
||||
writeFile(cb);
|
||||
},
|
||||
key: function(key, soul, cb, o){
|
||||
var meta = {};
|
||||
meta[Gun._.soul] = soul = Gun.is.soul(soul) || soul;
|
||||
((all.keys = all.keys || {})[key] = all.keys[key] || {})[soul] = meta;
|
||||
fs.writeFile(opts.file, Gun.text.ify(all), cb);
|
||||
writeFile(cb);
|
||||
},
|
||||
all: function(list, opt, cb) {
|
||||
opt = opt || {};
|
||||
@ -85,4 +102,4 @@ Gun.on('opt').event(function(gun, opts) {
|
||||
cb = cb || function() {};
|
||||
cb(null, r);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user