1 | const pull = require('pull-stream');
|
2 |
|
3 | module.exports = (sbot, myIdent, chessIndex) => {
|
4 |
|
5 | function followPlayer(playerPubKey) {
|
6 | sbot.publish({
|
7 | type: 'contact',
|
8 | contact: playerPubKey,
|
9 | following: true,
|
10 | });
|
11 | }
|
12 |
|
13 |
|
14 | function unfollowPlayer(playerPubKey) {
|
15 | sbot.publish({
|
16 | type: 'contact',
|
17 | contact: playerPubKey,
|
18 | following: false,
|
19 | });
|
20 | }
|
21 |
|
22 | function consumeStreamIntoArrayPromise(source, through) {
|
23 | return new Promise((resolve, reject) => {
|
24 | pull(source, through, pull.collect((err, results) => {
|
25 | if (err) {
|
26 | reject(err);
|
27 | } else {
|
28 | resolve(results);
|
29 | }
|
30 | }));
|
31 | });
|
32 | }
|
33 |
|
34 | function followedByMe() {
|
35 | const followsMe = sbot.links({
|
36 | source: myIdent,
|
37 | rel: 'contact',
|
38 | values: true,
|
39 | reverse: true,
|
40 | });
|
41 |
|
42 | const onlyStillFollowingsThrough = pull(
|
43 | pull.unique('dest'),
|
44 | pull.filter(msg => msg.value.content.following !== false),
|
45 | );
|
46 |
|
47 | return consumeStreamIntoArrayPromise(followsMe, onlyStillFollowingsThrough)
|
48 | .then(results => results.map(a => a.dest));
|
49 | }
|
50 |
|
51 | function followingMe() {
|
52 | const followsMe = sbot.links({
|
53 | dest: myIdent,
|
54 | rel: 'contact',
|
55 | values: true,
|
56 | reverse: true,
|
57 | });
|
58 |
|
59 | const onlyStillFollowingsThrough = pull(
|
60 | pull.unique('source'),
|
61 | pull.filter(msg => msg.value.content.following !== false),
|
62 | );
|
63 |
|
64 | return consumeStreamIntoArrayPromise(followsMe, onlyStillFollowingsThrough)
|
65 | .then(results => results.map(a => a.source));
|
66 | }
|
67 |
|
68 | function getPlayerDisplayName(playerPubKey) {
|
69 |
|
70 | if (!playerPubKey || !playerPubKey.startsWith('@')) {
|
71 | return Promise.resolve('<error>');
|
72 | }
|
73 |
|
74 | const aboutStream = sbot.links({
|
75 | dest: playerPubKey,
|
76 | rel: 'about',
|
77 | reverse: true,
|
78 | values: true,
|
79 | source: playerPubKey,
|
80 | });
|
81 |
|
82 | return new Promise((resolve, reject) => {
|
83 | pull(aboutStream, pull.find(msg => msg.value.content.name, (err, result) => {
|
84 | if (err) {
|
85 | reject(err);
|
86 | } else {
|
87 | result = (result && result.value.content.name) ? result.value.content.name : playerPubKey;
|
88 | resolve(result);
|
89 | }
|
90 | }));
|
91 | });
|
92 | }
|
93 |
|
94 | function getWeightedPlayFrequencyList() {
|
95 |
|
96 | return new Promise( (resolve, reject) => {
|
97 | chessIndex.weightedPlayFrequencyList(myIdent, (err, result) => {
|
98 | if (err) {
|
99 | reject(err);
|
100 | } else {
|
101 | resolve(result);
|
102 | }
|
103 | });
|
104 |
|
105 | });
|
106 | }
|
107 |
|
108 | return {
|
109 | followingMe,
|
110 | followedByMe,
|
111 | followPlayer,
|
112 | unfollowPlayer,
|
113 | getPlayerDisplayName,
|
114 | getWeightedPlayFrequencyList
|
115 | };
|
116 | };
|