From b9a1917fdbc5d79d58b4c7b9e268d555e97624ca Mon Sep 17 00:00:00 2001 From: Ev Bogue Date: Sun, 22 Dec 2019 12:38:19 -0600 Subject: make beacons go away with the heard button, also broadcast a heard to the pub --- beacons.js | 1 - gossip.js | 2 +- render.js | 192 ++++++++++++++++++++++++++++++++++++++++++------------------- server.js | 4 ++ 4 files changed, 138 insertions(+), 61 deletions(-) diff --git a/beacons.js b/beacons.js index 1656879..79f88a5 100644 --- a/beacons.js +++ b/beacons.js @@ -1,4 +1,3 @@ - function beaconsPage (keys) { var pubslist = h('select') diff --git a/gossip.js b/gossip.js index 2636ac6..0c12a40 100644 --- a/gossip.js +++ b/gossip.js @@ -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) diff --git a/render.js b/render.js index 3979bb3..8e90a84 100644 --- a/render.js +++ b/render.js @@ -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) { diff --git a/server.js b/server.js index 3ec7f5d..e47f165 100644 --- a/server.js +++ b/server.js @@ -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 } -- cgit v1.2.3-70-g09d2