Files: 5b17ba2a85122774945850eeb89c50eaded5c446 / app / html / settings / friend-pub.js
2644 bytesRaw
1 | const nest = require('depnest') |
2 | const { h, computed, onceTrue, Value } = require('mutant') |
3 | |
4 | exports.gives = nest({ |
5 | 'app.html.settings': true |
6 | }) |
7 | |
8 | exports.needs = nest({ |
9 | 'about.html.image': 'first', |
10 | 'about.obs.name': 'first', |
11 | 'app.html.settings': 'map', |
12 | 'sbot.obs.connection': 'first', |
13 | 'settings.obs.get': 'first', |
14 | 'settings.sync.set': 'first' |
15 | }) |
16 | |
17 | exports.create = function (api) { |
18 | return nest({ |
19 | 'app.html.settings': pubHopConnections |
20 | }) |
21 | |
22 | function pubHopConnections () { |
23 | const pubHopAll = 3 |
24 | const pubHopConnections = api.settings.obs.get('patchbay.pubHopConnections', pubHopAll) |
25 | const changeHopSettings = (ev) => { |
26 | api.settings.sync.set({ patchbay: { pubHopConnections: parseInt(ev.target.value) }}) |
27 | |
28 | alert("please restart patchbay for this to take effect") |
29 | } |
30 | |
31 | let pubs = Value({}) |
32 | |
33 | const pubHopConnectionsText = computed([pubHopConnections], function(pubHopConnections) { |
34 | pubHopConnections = parseInt(pubHopConnections) |
35 | onceTrue(api.sbot.obs.connection, sbot => { |
36 | if (pubHopConnections == pubHopAll) |
37 | pubs.set([]) |
38 | else |
39 | sbot.friendPub.pubsWithinHops(pubHopConnections, (err, pubsInHops) => { |
40 | pubs.set(pubsInHops) |
41 | }) |
42 | }) |
43 | |
44 | switch (pubHopConnections) { |
45 | case 0: |
46 | return "Own pub only" |
47 | case 1: |
48 | return "Pubs run by friends" |
49 | case 2: |
50 | return "Pubs run by friends of friends" |
51 | default: // 3 |
52 | return "All pubs" |
53 | } |
54 | }) |
55 | |
56 | function pubImageLink (id, ownerId) { |
57 | return h('a', { |
58 | href: id, |
59 | title: computed([api.about.obs.name(id), api.about.obs.name(ownerId)], (name, ownerName) => { |
60 | return '@' + name + ', owner ' + ownerName |
61 | }) |
62 | }, api.about.html.image(id)) |
63 | } |
64 | |
65 | const pubsHtml = computed([pubs], function(pubs) { |
66 | return Object.values(pubs).map(pub => pubImageLink(pub.id, pub.owner)) |
67 | }) |
68 | |
69 | return { |
70 | title: 'Pub within hops connections', |
71 | body: h('FriendPub', [ |
72 | h('div', [ |
73 | 'Only connect to pubs run by a peer within a certain number of hops', |
74 | h('input', { |
75 | type: 'range', |
76 | attributes: { list: 'datalist' }, |
77 | min: 0, |
78 | max: 3, |
79 | value: pubHopConnections, |
80 | 'ev-change': changeHopSettings |
81 | }), |
82 | h('datalist', { id: 'datalist' }, [ |
83 | h('option', 0), |
84 | h('option', 1), |
85 | h('option', 2), |
86 | h('option', 3)]), |
87 | h('div', ["Current setting: ", pubHopConnectionsText]), |
88 | h('div', pubsHtml) |
89 | ]) |
90 | ]) |
91 | } |
92 | } |
93 | } |
94 |
Built with git-ssb-web