Commit cf7e8c012199e2e0fe63032b824cdd36e6990015
Refactor into lib and make it a ssb plugin as well
Anders Rune Jensen committed on 9/22/2017, 6:52:52 PMParent: 842b574ea8edb049a6403e9b4434d95823a39caa
Files changed
README.md | changed |
index.js | changed |
bin.js | added |
lib.js | added |
README.md | ||
---|---|---|
@@ -4,11 +4,13 @@ | ||
4 | 4 | |
5 | 5 | Usage (assuming you want to share from the dats folder): |
6 | 6 | |
7 | 7 | ``` |
8 | -node index.js -f ./dats | |
8 | +node bin.js -f ./dats | |
9 | 9 | ``` |
10 | 10 | |
11 | +Can also take a -i option to only share links from people you follow. | |
12 | + | |
11 | 13 | Gives: |
12 | 14 | |
13 | 15 | ``` |
14 | 16 | Looking for dat links |
index.js | ||
---|---|---|
@@ -1,114 +1,18 @@ | ||
1 | -#!/usr/bin/env node | |
1 | +var lib = require('./lib'); | |
2 | 2 | |
3 | -var Dat = require('dat-node') | |
4 | -var program = require('commander'); | |
5 | -var uri = require('urijs') | |
6 | -var pull = require('pull-stream') | |
3 | +exports.name = 'dat-share' | |
4 | +exports.version = require('./package.json').version | |
5 | +exports.manifest = {} | |
7 | 6 | |
8 | -program | |
9 | - .option('-f, --folder [value]', 'Folder for sharing') | |
10 | - .option('-i, --only-people-i-follow', 'Only seed urls from people or channels I follow') | |
11 | - .parse(process.argv); | |
7 | +exports.init = function (ssb, config) { | |
8 | + var conf = config.datShare || {} | |
9 | + var onlyPeopleIFollow = conf.onlyPeopleIFollow || false | |
10 | + var shareFolder = conf.folder || '/tmp' | |
12 | 11 | |
13 | -function extractLinksAndSeed(err, logs) { | |
14 | - if (err) throw err; | |
15 | - | |
16 | - console.log("Found " + logs.length) | |
17 | - | |
18 | - logs.forEach(msg => { | |
19 | - uri.withinString(msg.value.content.text, (datLink) => { | |
20 | - if (!datLink.startsWith("dat://")) return | |
21 | - | |
22 | - console.log("Saving to:", program.folder + "/" + datLink.substring(6)) | |
23 | - | |
24 | - Dat(program.folder + "/" + datLink.substring(6), { | |
25 | - key: datLink | |
26 | - }, function (err, dat) { | |
27 | - if (err) throw err | |
28 | - | |
29 | - console.log("sharing:", datLink) | |
30 | - dat.joinNetwork() | |
31 | - }) | |
32 | - }) | |
33 | - }) | |
12 | + console.log("Sharing dat links from: ", shareFolder) | |
13 | + | |
14 | + if (onlyPeopleIFollow) | |
15 | + lib.getFromPeopleIFollow(ssb, shareFolder) | |
16 | + else | |
17 | + lib.getAll(ssb, shareFolder) | |
34 | 18 | } |
35 | - | |
36 | -function getAll(sbot) { | |
37 | - console.log("Looking for dat links in all feeds") | |
38 | - | |
39 | - pull( | |
40 | - sbot.createLogStream({ reverse: true, limit: 10000 }), | |
41 | - pull.filter((msg) => { | |
42 | - return !msg.value || | |
43 | - msg.value.content.type == 'post' && | |
44 | - typeof msg.value.content.text == "string" && | |
45 | - msg.value.content.text.indexOf("dat://") != -1 | |
46 | - }), | |
47 | - pull.collect(extractLinksAndSeed) | |
48 | - ) | |
49 | -} | |
50 | - | |
51 | -function messagesFromPeopleIFollow(sbot, following, channelSubscriptions) { | |
52 | - console.log("users:", following) | |
53 | - console.log("channels:", channelSubscriptions) | |
54 | - pull( | |
55 | - sbot.createLogStream({ reverse: true, limit: 10000 }), | |
56 | - pull.filter((msg) => { | |
57 | - return !msg.value || | |
58 | - ((msg.value.author in following || | |
59 | - msg.value.content.channel in channelSubscriptions) | |
60 | - && msg.value.content.type == 'post' && | |
61 | - typeof msg.value.content.text == "string" && | |
62 | - msg.value.content.text.indexOf("dat://") != -1) | |
63 | - }), | |
64 | - pull.collect(extractLinksAndSeed) | |
65 | - ) | |
66 | -} | |
67 | - | |
68 | -function getFromPeopleIFollow(sbot) { | |
69 | - var following = [] | |
70 | - var channelSubscriptions = [] | |
71 | - | |
72 | - console.log("Looking for dat links in people i follow") | |
73 | - | |
74 | - sbot.whoami((err, feed) => { | |
75 | - pull( | |
76 | - sbot.createUserStream({ id: feed.id }), | |
77 | - pull.filter((msg) => { | |
78 | - return !msg.value || | |
79 | - msg.value.content.type == 'contact' || | |
80 | - (msg.value.content.type == 'channel' && | |
81 | - typeof msg.value.content.subscribed != 'undefined') | |
82 | - }), | |
83 | - pull.collect(function (err, msgs) { | |
84 | - msgs.forEach((msg) => { | |
85 | - if (msg.value.content.type == 'contact') | |
86 | - { | |
87 | - if (msg.value.content.following) | |
88 | - following[msg.value.content.contact] = 1 | |
89 | - else | |
90 | - delete following[msg.value.content.contact] | |
91 | - } | |
92 | - else // channel subscription | |
93 | - { | |
94 | - if (msg.value.content.subscribed) | |
95 | - channelSubscriptions[msg.value.content.channel] = 1 | |
96 | - else | |
97 | - delete channelSubscriptions[msg.value.content.channel] | |
98 | - } | |
99 | - }) | |
100 | - | |
101 | - messagesFromPeopleIFollow(sbot, following, channelSubscriptions) | |
102 | - }) | |
103 | - ) | |
104 | - }) | |
105 | -} | |
106 | - | |
107 | -require('ssb-client')((err, sbot) => { | |
108 | - if (err) throw err; | |
109 | - | |
110 | - if (program.onlyPeopleIFollow) | |
111 | - getFromPeopleIFollow(sbot) | |
112 | - else | |
113 | - getAll(sbot) | |
114 | -}) |
bin.js | ||
---|---|---|
@@ -1,0 +1,23 @@ | ||
1 | +#!/usr/bin/env node | |
2 | + | |
3 | +var lib = require('./lib'); | |
4 | + | |
5 | +var program = require('commander'); | |
6 | + | |
7 | +program | |
8 | + .option('-f, --folder [value]', 'Folder for sharing') | |
9 | + .option('-i, --only-people-i-follow', 'Only seed urls from people or channels I follow') | |
10 | + .parse(process.argv); | |
11 | + | |
12 | +require('ssb-client')((err, sbot) => { | |
13 | + if (err) throw err; | |
14 | + | |
15 | + var shareFolder = program.folder || '/tmp' | |
16 | + | |
17 | + console.log("Sharing dat links from: ", shareFolder) | |
18 | + | |
19 | + if (program.onlyPeopleIFollow) | |
20 | + lib.getFromPeopleIFollow(sbot, shareFolder) | |
21 | + else | |
22 | + lib.getAll(sbot, shareFolder) | |
23 | +}) |
lib.js | ||
---|---|---|
@@ -1,0 +1,105 @@ | ||
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({ 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({ 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 | +} |
Built with git-ssb-web