map rid of chain without off

This commit is contained in:
Mark Nadal 2018-06-19 20:24:55 -07:00
parent f33dbdf85d
commit 5ea9b0d2d6

26
gun.js
View File

@ -1037,7 +1037,7 @@
not(cat, msg); not(cat, msg);
} else } else
if(at.has || at.soul){ if(at.has || at.soul){
(at.echo || (at.echo = {}))[cat.id] = cat; (at.echo || (at.echo = {}))[cat.id] = at.echo[at.id] || cat;
(cat.map || (cat.map = {}))[at.id] = cat.map[at.id] || {at: at}; (cat.map || (cat.map = {}))[at.id] = cat.map[at.id] || {at: at};
//if(u === at.put){ return } // Not necessary but improves performance. If we have it but at does not, that means we got things out of order and at will get it. Once at gets it, it will tell us again. //if(u === at.put){ return } // Not necessary but improves performance. If we have it but at does not, that means we got things out of order and at will get it. Once at gets it, it will tell us again.
} }
@ -1072,7 +1072,7 @@
} }
if(from === at){ return } if(from === at){ return }
if(!from.$){ from = {} } if(!from.$){ from = {} }
(from.echo || (from.echo = {}))[at.id] = at; (from.echo || (from.echo = {}))[at.id] = from.echo[at.id] || at;
if(at.has && !(at.map||empty)[from.id]){ // if we haven't seen this before. if(at.has && !(at.map||empty)[from.id]){ // if we haven't seen this before.
not(at, msg); not(at, msg);
} }
@ -1115,6 +1115,7 @@
obj_map(at.echo, reverb, msg); obj_map(at.echo, reverb, msg);
} }
function reverb(to){ function reverb(to){
if(!to || !to.on){ return }
to.on('in', this); to.on('in', this);
} }
function map(data, key){ // Map over only the changes on every update. function map(data, key){ // Map over only the changes on every update.
@ -1227,7 +1228,7 @@
as.use = key; as.use = key;
as.out = as.out || {}; as.out = as.out || {};
as.out.get = as.out.get || {}; as.out.get = as.out.get || {};
ev = at.on('in', use, as); (ev = at.on('in', use, as)).rid = rid;
(root.now = {$:1})[as.now = at.id] = ev; (root.now = {$:1})[as.now = at.id] = ev;
at.on('out', as.out); at.on('out', as.out);
root.now = tmp; root.now = tmp;
@ -1268,7 +1269,6 @@
} }
function use(msg){ function use(msg){
var ev = this, as = ev.as, cat = as.at, root = cat.root, gun = msg.$, at = (gun||{})._ || {}, data = msg.put, tmp; var ev = this, as = ev.as, cat = as.at, root = cat.root, gun = msg.$, at = (gun||{})._ || {}, data = msg.put, tmp;
//(root.stop && root.stop && (root.stop.ID = Gun.text.random(2))); console.log("???", msg, root && root.stop);
if((tmp = root.stop)){ if(tmp[at.id]){ return } tmp[at.id] = msg.root; } // temporary fix till a better solution? if((tmp = root.stop)){ if(tmp[at.id]){ return } tmp[at.id] = msg.root; } // temporary fix till a better solution?
if((tmp = root.now) && ev !== tmp[as.now]){ if((tmp = root.now) && ev !== tmp[as.now]){
return ev.to.next(msg); return ev.to.next(msg);
@ -1285,6 +1285,16 @@
as.use(msg, msg.event || ev); as.use(msg, msg.event || ev);
ev.to.next(msg); ev.to.next(msg);
} }
function rid(at){
var cat = this.on;
if(!at || cat.soul || cat.has){ return this.off() }
if(!(at = (at = (at = at.$ || at)._ || at).id)){ return }
var map = cat.map, tmp;
if(!map || !(tmp = map[at]) || !(tmp = tmp.at)){ return }
tmp.echo[cat.id] = {}; // TODO: Warning: This unsubscribes ALL of this chain's listeners from this link, not just the one callback event.
//obj.del(map, at); // TODO: Warning: This unsubscribes ALL of this chain's listeners from this link, not just the one callback event.
return true;
}
var obj = Gun.obj, obj_has = obj.has, obj_to = Gun.obj.to; var obj = Gun.obj, obj_has = obj.has, obj_to = Gun.obj.to;
var num_is = Gun.num.is; var num_is = Gun.num.is;
var rel = Gun.val.rel, node_ = Gun.node._; var rel = Gun.val.rel, node_ = Gun.node._;
@ -1681,8 +1691,9 @@
Gun.chain.map = function(cb, opt, t){ Gun.chain.map = function(cb, opt, t){
var gun = this, cat = gun._, chain; var gun = this, cat = gun._, chain;
if(!cb){ if(!cb){
if(chain = cat.each){ return chain } //if(chain = cat.each){ return chain }
chain = cat.each = gun.chain(); //cat.each =
chain = gun.chain();
chain._.nix = gun.back('nix'); chain._.nix = gun.back('nix');
gun.on('in', map, chain._); gun.on('in', map, chain._);
return chain; return chain;
@ -1709,7 +1720,7 @@
function each(v,k){ function each(v,k){
if(n_ === k){ return } if(n_ === k){ return }
var msg = this.msg, gun = msg.$, at = this.at, tmp = (gun.get(k)._); var msg = this.msg, gun = msg.$, at = this.at, tmp = (gun.get(k)._);
(tmp.echo || (tmp.echo = {}))[at.id] = at; (tmp.echo || (tmp.echo = {}))[at.id] = tmp.echo[at.id] || at;
} }
var obj_map = Gun.obj.map, noop = function(){}, event = {stun: noop, off: noop}, n_ = Gun.node._, u; var obj_map = Gun.obj.map, noop = function(){}, event = {stun: noop, off: noop}, n_ = Gun.node._, u;
})(USE, './map'); })(USE, './map');
@ -1736,7 +1747,6 @@
var put = {}, node = at.put; var put = {}, node = at.put;
soul = at.soul || Gun.node.soul(node) || soul; soul = at.soul || Gun.node.soul(node) || soul;
if(!soul){ return cb.call(gun, {err: Gun.log('Only a node can be linked! Not "' + node + '"!')}) } if(!soul){ return cb.call(gun, {err: Gun.log('Only a node can be linked! Not "' + node + '"!')}) }
console.log("SET?", soul);
gun.put(Gun.obj.put(put, soul, Gun.val.rel.ify(soul)), cb, opt); gun.put(Gun.obj.put(put, soul, Gun.val.rel.ify(soul)), cb, opt);
},{wait:0}); },{wait:0});
return item; return item;