diff options
author | Ev Bogue <ev@evbogue.com> | 2019-12-22 12:38:19 -0600 |
---|---|---|
committer | Ev Bogue <ev@evbogue.com> | 2019-12-22 12:38:19 -0600 |
commit | b9a1917fdbc5d79d58b4c7b9e268d555e97624ca (patch) | |
tree | 421dc9a96ed429ba13ec9d84d24f5287829ef255 | |
parent | 8a030de9eb5ca256be397311efbf58872120ec17 (diff) |
make beacons go away with the heard button, also broadcast a heard to the pub
-rw-r--r-- | beacons.js | 1 | ||||
-rw-r--r-- | gossip.js | 2 | ||||
-rw-r--r-- | render.js | 192 | ||||
-rw-r--r-- | server.js | 4 |
4 files changed, 138 insertions, 61 deletions
@@ -1,4 +1,3 @@ - function beaconsPage (keys) { var pubslist = h('select') @@ -51,7 +51,7 @@ function sync (subs, keys) { var unboxedreq = JSON.parse(nacl.util.encodeUTF8(unboxed)) if (unboxedreq.content) { unboxedreq.signature = unboxedreq.content - renderAd(unboxedreq) + renderAd(unboxedreq, keys) } if (unboxedreq.box) { renderAd(unboxedreq, keys) @@ -1,69 +1,143 @@ function renderAd (ad, keys) { - console.log(ad) + localforage.getItem(ad.hash).then(heard => { + if (!heard) { + var screen = document.getElementById('screen') + var adspot = document.getElementById('ad') + var pmspot = document.getElementById('pm') - var screen = document.getElementById('screen') - var adspot = document.getElementById('ad') + if (adspot) { + adspot.parentNode.removeChild(adspot) + } - if (adspot) { - adspot.parentNode.removeChild(adspot) - } + if (pmspot) { + pmspot.parentNode.removeChild(pmspot) + } - var adspace = h('span') + var adspace = h('span') - if (ad.views) { - adspace.appendChild(h('span', {classList: 'right'}, [h('pre', [ad.views + ' views'])])) - } else { - adspace.appendChild(h('span', {classList: 'right'}, [h('pre', ['beacon'])])) - } + if (ad.views) { + adspace.appendChild(h('span', {classList: 'right'}, [h('pre', [ad.views + ' views'])])) + } else { + adspace.appendChild(h('span', {classList: 'right'}, [h('pre', ['beacon'])])) + } - if (ad.box) { - unbox(ad.box, ad.author, keys).then(unboxed => { - var msg = JSON.parse(nacl.util.encodeUTF8(unboxed)) - quickName(ad.author).then(gotName => { - beacon = h('div', {id: 'pm'}, [ - h('span', {classList: 'right'}, [h('pre', [human(new Date(msg.timestamp))])]), - h('p', {innerHTML: marked(msg.content)}), - h('button', {classList: 'right', - onclick: function () { - pmspot = document.getElementById('pm') - pmspot.parentNode.removeChild(pmspot) - } - }, ['Heard']), - h('span', [ - '—', - h('a', {href: '#' + ad.author}, [gotName]), - ' from ', - h('a', {href: ad.name}, [ad.name]) - ]) - ]) - screen.append(beacon) - }) - }) - } + if (ad.box) { + unbox(ad.box, ad.author, keys).then(unboxed => { + var msg = JSON.parse(nacl.util.encodeUTF8(unboxed)) + quickName(ad.author).then(gotName => { + beacon = h('div', {id: 'pm'}, [ + h('span', {classList: 'right'}, [h('pre', [human(new Date(msg.timestamp))])]), + h('p', {innerHTML: marked(msg.content)}), + h('button', {classList: 'right', + onclick: function () { + pmspot = document.getElementById('pm') + pmspot.parentNode.removeChild(pmspot) + if (msg.content.substring((msg.content.length - 6), msg.content.length) === 'Heard.') { + localforage.setItem(ad.hash, true).then(success => { + //console.log('heard: ' + ad.hash) + }) - if (ad.signature) { - open(ad).then(opened => { - quickName(ad.author).then(gotName => { - newAd = h('div', {id: 'ad'}, [ - adspace, - h('p', {innerHTML: marked(opened)}), - h('button', {classList: 'right', - onclick: function () { - adspot = document.getElementById('ad') - adspot.parentNode.removeChild(adspot) - } - }, ['Heard']), - h('span', [ - '—', - h('a', {href: '#' + ad.author}, [gotName]), - ' from ', - h('a', {href: ad.name}, [ad.name]) - ]) - ]) - screen.appendChild(newAd) - }) - }) - } + } else { + var split = ad.pub.split('~') + var serverurl = split[0] + var serverpub = split[1] + var ws = new WebSocket(serverurl) + + var tobox = { + author: keys.publicKey, + timestamp: Date.now(), + content: '>' + msg.content + '\n\nHeard.' + } + + box(JSON.stringify(tobox), ad.author, keys).then(boxedmsg => { + var msg = { + type: 'beacon', + author: keys.publicKey, + box: boxedmsg + } + ws.onopen = function () { + box(JSON.stringify(msg), serverpub, keys).then(boxed => { + var obj = { + requester: keys.publicKey, + box: boxed + } + ws.send(JSON.stringify(obj)) + localforage.setItem(ad.hash, true).then(success => { + //console.log('heard: ' + ad.hash) + }) + }) + } + }) + } + } + }, ['Heard']), + h('span', [ + '—', + h('a', {href: '#' + ad.author}, [gotName]), + ' from ', + h('a', {href: ad.name}, [ad.name]) + ]) + ]) + screen.append(beacon) + }) + }) + } + + if (ad.signature) { + open(ad).then(opened => { + quickName(ad.author).then(gotName => { + newAd = h('div', {id: 'ad'}, [ + adspace, + h('p', {innerHTML: marked(opened)}), + h('button', {classList: 'right', + onclick: function () { + adspot = document.getElementById('ad') + adspot.parentNode.removeChild(adspot) + var split = ad.pub.split('~') + var serverurl = split[0] + var serverpub = split[1] + var ws = new WebSocket(serverurl) + + + + var tobox = { + author: keys.publicKey, + timestamp: Date.now(), + content: '>' + opened + '\n\nHeard.' + } + + box(JSON.stringify(tobox), ad.author, keys).then(boxedmsg => { + var msg = { + type: 'beacon', + author: keys.publicKey, + box: boxedmsg + } + ws.onopen = function () { + box(JSON.stringify(msg), serverpub, keys).then(boxed => { + var obj = { + requester: keys.publicKey, + box: boxed + } + ws.send(JSON.stringify(obj)) + localforage.setItem(ad.hash, true).then(success => {console.log('heard: ' + ad.hash)}) + }) + } + }) + } + }, ['Heard']), + h('span', [ + '—', + h('a', {href: '#' + ad.author}, [gotName]), + ' from ', + h('a', {href: ad.name}, [ad.name]) + ]) + ]) + screen.appendChild(newAd) + }) + }) + } + } + }) } function getHeader (post, keys, mini) { @@ -166,7 +166,9 @@ bog.keys().then(key => { if (obj.signature) { var ad = { author: obj.author, + hash: obj.hash, name: config.fullurl, + pub: 'ws://' + config.url + ':' + config.wsport + '/~' + key.publicKey, content: obj.signature, views: obj.views } @@ -175,7 +177,9 @@ bog.keys().then(key => { if (obj.box) { var ad = { author: obj.author, + hash: obj.hash, name: config.fullurl, + pub: 'ws://' + config.url + ':' + config.wsport + '/~' + key.publicKey, box: obj.box, views: obj.views } |