Files: 589659eb2f7557af64874b5dc925456e0cc0764a / lib.js
3248 bytesRaw
1 | var Dat = require('dat-node') |
2 | var uri = require('urijs') |
3 | var pull = require('pull-stream') |
4 | |
5 | var self = module.exports = { |
6 | extractLinksAndSeed: function(err, logs, shareFolder) { |
7 | if (err) throw err; |
8 | |
9 | console.log("Found " + logs.length) |
10 | |
11 | logs.forEach(msg => { |
12 | uri.withinString(msg.value.content.text, (datLink) => { |
13 | if (!datLink.startsWith("dat://")) return |
14 | |
15 | console.log("Saving to:", shareFolder + "/" + datLink.substring(6)) |
16 | |
17 | Dat(shareFolder + "/" + datLink.substring(6), { |
18 | key: datLink |
19 | }, function (err, dat) { |
20 | if (err) throw err |
21 | |
22 | console.log("sharing:", datLink) |
23 | dat.joinNetwork() |
24 | }) |
25 | }) |
26 | }) |
27 | }, |
28 | |
29 | getAll: function(sbot, shareFolder) { |
30 | console.log("Looking for dat links in all feeds") |
31 | |
32 | pull( |
33 | sbot.createLogStream({ live: true, reverse: true, limit: 10000 }), |
34 | pull.filter((msg) => { |
35 | return !msg.value || |
36 | msg.value.content.type == 'post' && |
37 | typeof msg.value.content.text == "string" && |
38 | msg.value.content.text.indexOf("dat://") != -1 |
39 | }), |
40 | pull.collect((err, logs) => self.extractLinksAndSeed(err, logs, |
41 | shareFolder)) |
42 | ) |
43 | }, |
44 | |
45 | messagesFromPeopleIFollow: function(sbot, following, |
46 | channelSubscriptions, |
47 | shareFolder) { |
48 | console.log("users:", following) |
49 | console.log("channels:", channelSubscriptions) |
50 | pull( |
51 | sbot.createLogStream({ live: true, reverse: true, limit: 10000 }), |
52 | pull.filter((msg) => { |
53 | return !msg.value || |
54 | ((msg.value.author in following || |
55 | msg.value.content.channel in channelSubscriptions) |
56 | && msg.value.content.type == 'post' && |
57 | typeof msg.value.content.text == "string" && |
58 | msg.value.content.text.indexOf("dat://") != -1) |
59 | }), |
60 | pull.collect((err, logs) => self.extractLinksAndSeed(err, logs, |
61 | shareFolder)) |
62 | ) |
63 | }, |
64 | |
65 | getFromPeopleIFollow: function(sbot, shareFolder) { |
66 | var following = [] |
67 | var channelSubscriptions = [] |
68 | |
69 | console.log("Looking for dat links in people i follow") |
70 | |
71 | sbot.whoami((err, feed) => { |
72 | pull( |
73 | sbot.createUserStream({ id: feed.id }), |
74 | pull.filter((msg) => { |
75 | return !msg.value || |
76 | msg.value.content.type == 'contact' || |
77 | (msg.value.content.type == 'channel' && |
78 | typeof msg.value.content.subscribed != 'undefined') |
79 | }), |
80 | pull.collect(function (err, msgs) { |
81 | msgs.forEach((msg) => { |
82 | if (msg.value.content.type == 'contact') |
83 | { |
84 | if (msg.value.content.following) |
85 | following[msg.value.content.contact] = 1 |
86 | else |
87 | delete following[msg.value.content.contact] |
88 | } |
89 | else // channel subscription |
90 | { |
91 | if (msg.value.content.subscribed) |
92 | channelSubscriptions[msg.value.content.channel] = 1 |
93 | else |
94 | delete channelSubscriptions[msg.value.content.channel] |
95 | } |
96 | }) |
97 | |
98 | self.messagesFromPeopleIFollow(sbot, following, |
99 | channelSubscriptions, |
100 | shareFolder) |
101 | }) |
102 | ) |
103 | }) |
104 | } |
105 | } |
106 |
Built with git-ssb-web