Commit e18e404a95ff6bf668905140f3b4c627530879a0
wip
cel committed on 12/22/2016, 10:19:44 PMParent: f895a8b36bcd47ba80f3f899f54f971b15fbe5b3
Files changed
lib/index-cache.js | changed |
lib/index-cache.js | ||
---|---|---|
@@ -4,9 +4,8 @@ | ||
4 | 4 … | var multicb = require('multicb') |
5 | 5 … | var ssbMsgs = require('ssb-msgs') |
6 | 6 … | var ssbSort = require('ssb-sort') |
7 | 7 … | var many = require('pull-many') |
8 | -var multicb = require('multicb') | |
9 | 8 … | var u = require('./util') |
10 | 9 … | |
11 | 10 … | // work around sync not getting emitted |
12 | 11 … | function logt(sbot, opt) { |
@@ -44,20 +43,8 @@ | ||
44 | 43 … | return !msg.sync || void (!--count && cb()) |
45 | 44 … | }) |
46 | 45 … | } |
47 | 46 … | |
48 | -function indexLinks(linksTo, linksFrom) { | |
49 | - return function (msg) { | |
50 | - if (msg.key in linksFrom) return // duplicate | |
51 | - var linksFromMsg = linksFrom[msg.key] = [] | |
52 | - ssbMsgs.indexLinks(msg, {msg: true}, function (link) { | |
53 | - var linksToMsg = linksTo[link.link] || (linksTo[link.link] = []) | |
54 | - linksToMsg.push(msg.key) | |
55 | - linksFromMsg.push(link.link) | |
56 | - }) | |
57 | - } | |
58 | -} | |
59 | - | |
60 | 47 … | module.exports = function (sbot, web) { |
61 | 48 … | var start = new Date |
62 | 49 … | var feedId |
63 | 50 … | |
@@ -66,21 +53,19 @@ | ||
66 | 53 … | var repoIssues = {/* repo id : {issue id:, count: int} */} |
67 | 54 … | var repoPRs = {/* repo id : {pr id:, count: int} */} |
68 | 55 … | var closed = {/* issue/pr id */} |
69 | 56 … | var issuesReady = false |
70 | - var issuesPRsDone = multicb({ pluck: 1, spread: true }) | |
71 | - var issuesPRsCb = issuesPRsDone() | |
72 | 57 … | var threads = {/* id */} |
73 | 58 … | var myRepos = {/* id */} |
74 | 59 … | var notifications = [/* msg */] |
75 | 60 … | var notificationIds = {/* id */} |
76 | 61 … | var notificationsCount = 0 |
77 | 62 … | var notificationsReady = false |
78 | 63 … | |
79 | - var linksTo = {/* key: [key] */} | |
80 | - var linksFrom = {/* key: [key] */} | |
64 … | + var notifs = require('./notifications')() | |
81 | 65 … | |
82 | 66 … | function indexIssue(msg) { |
67 … | + notifs.addRoot(msg) | |
83 | 68 … | if (msg.key in closed) return delete closed[msg.key] |
84 | 69 … | var repoId = msg.value.content.project || msg.value.content.repo |
85 | 70 … | var issues = repoIssues[repoId] || (repoIssues[repoId] = {count: 0}) |
86 | 71 … | issues[msg.key] = true |
@@ -88,8 +73,9 @@ | ||
88 | 73 … | issues.count++ |
89 | 74 … | } |
90 | 75 … | |
91 | 76 … | function indexPR(msg) { |
77 … | + notifs.addRoot(msg) | |
92 | 78 … | if (msg.key in closed) return delete closed[msg.key] |
93 | 79 … | var repoId = msg.value.content.repo |
94 | 80 … | var prs = repoPRs[repoId] || (repoPRs[repoId] = {count: 0}) |
95 | 81 … | prs[msg.key] = true |
@@ -98,11 +84,15 @@ | ||
98 | 84 … | } |
99 | 85 … | |
100 | 86 … | function indexIssueEdit(msg) { |
101 | 87 … | var updates = msg.value.content.issues || [] |
88 … | + notifs.addEdit(msg) | |
102 | 89 … | for (var i = 0; i < updates.length; i++) { |
103 | 90 … | var update = updates[i] |
104 | - if (update.open !== false) continue // TODO: handle re-opens | |
91 … | + if (update.open !== false) { | |
92 … | + // reopenMsgs[msg.key] = true | |
93 … | + continue // TODO: handle re-opens | |
94 … | + } | |
105 | 95 … | var id = update.link |
106 | 96 … | var repoId = repos[id] |
107 | 97 … | if (repoId) { |
108 | 98 … | var issues, prs |
@@ -141,36 +131,25 @@ | ||
141 | 131 … | indexIssuesPRs() |
142 | 132 … | } |
143 | 133 … | } |
144 | 134 … | |
145 | - // get issue edits | |
146 | - pull( | |
147 | - sbot.links({ | |
148 | - rel: 'issues', | |
149 | - values: true, | |
150 | - live: true, | |
151 | - }), | |
152 | - sync(1, issuesPRsDone), | |
153 | - pull.drain(function (msg) { | |
154 | - indexIssueEdit(msg) | |
155 | - }, function (err) { | |
156 | - if (err) console.error(err.stack || err) | |
157 | - }) | |
158 | - ) | |
135 … | + var editsDone = multicb({ pluck: 1, spread: true }) | |
136 … | + getIssueEdits(editsDone()) | |
137 … | + var editsDoneCb = editsDone() | |
159 | 138 … | |
160 | - issuesPRsDone(function () { | |
139 … | + editsDone(function () { | |
161 | 140 … | issuesReady = true |
162 | 141 … | console.log('Issues synced', (new Date - start)/1000 + 's') |
163 | 142 … | }) |
164 | 143 … | |
165 | 144 … | function indexIssuesPRs() { |
166 | 145 … | if (web.isPublic) { |
167 | - getIssues(issuesPRsCb) | |
146 … | + getIssues(editsDoneCb) | |
168 | 147 … | } else { |
169 | 148 … | getRepos(function () { |
170 | 149 … | getIssues(function () { |
171 | - issuesPRsCb() | |
172 | 150 … | getNewLinks() |
151 … | + editsDoneCb() | |
173 | 152 … | removeLinked(function () { |
174 | 153 … | notificationsReady = true |
175 | 154 … | ssbSort(notifications).reverse() |
176 | 155 … | console.log('Notifications ready', (new Date - start)/1000 + 's') |
@@ -179,8 +158,24 @@ | ||
179 | 158 … | }) |
180 | 159 … | } |
181 | 160 … | } |
182 | 161 … | |
162 … | + function getIssueEdits(cb) { | |
163 … | + pull( | |
164 … | + sbot.links({ | |
165 … | + rel: 'issues', | |
166 … | + values: true, | |
167 … | + live: true, | |
168 … | + }), | |
169 … | + sync(1, cb), | |
170 … | + pull.drain(function (msg) { | |
171 … | + indexIssueEdit(msg) | |
172 … | + }, function (err) { | |
173 … | + if (err) console.error(err.stack || err) | |
174 … | + }) | |
175 … | + ) | |
176 … | + } | |
177 … | + | |
183 | 178 … | function getRepos(cb) { |
184 | 179 … | pull( |
185 | 180 … | logt(sbot, { |
186 | 181 … | type: 'git-repo', |
@@ -230,10 +225,9 @@ | ||
230 | 225 … | pull.through(function (msg) { |
231 | 226 … | threads[msg.key] = true |
232 | 227 … | }), |
233 | 228 … | withThreads(sbot), |
234 | - // pull.through(indexLinks(linksTo, linksFrom)), | |
235 | - pull.drain(gotNotification, function (err) { | |
229 … | + pull.drain(indexMsg, function (err) { | |
236 | 230 … | if (err) console.error(err.stack || err) |
237 | 231 … | }) |
238 | 232 … | ) |
239 | 233 … | } |
@@ -248,20 +242,23 @@ | ||
248 | 242 … | }), |
249 | 243 … | pull.filter(function (msg) { |
250 | 244 … | return msg.value.content.root in threads |
251 | 245 … | }), |
252 | - pull.drain(gotNotification, function (err) { | |
246 … | + pull.drain(indexMsg, function (err) { | |
253 | 247 … | if (err) console.error(err.stack || err) |
254 | 248 … | }) |
255 | 249 … | ) |
256 | 250 … | } |
257 | 251 … | |
258 | - function gotNotification(msg) { | |
252 … | + function indexMsg(msg) { | |
253 … | + notifs.addReply(msg) | |
254 … | + /* | |
259 | 255 … | if (msg.value.author === feedId) return |
260 | 256 … | if (notificationIds[msg.key]) return |
261 | 257 … | notificationIds[msg.key] = true |
262 | 258 … | notifications.unshift(msg) |
263 | 259 … | notificationsCount++ |
260 … | + */ | |
264 | 261 … | } |
265 | 262 … | |
266 | 263 … | function removeLinked(cb) { |
267 | 264 … | // remove messages that we acknowledged |
@@ -293,8 +290,9 @@ | ||
293 | 290 … | delete notificationIds[id] |
294 | 291 … | var msg = takeMsg(notifications, id) |
295 | 292 … | if (msg) { |
296 | 293 … | notificationsCount-- |
294 … | + // remove messages that this message points to, recursively | |
297 | 295 … | ssbMsgs.indexLinks(msg, {msg: true}, removeLink) |
298 | 296 … | } |
299 | 297 … | } |
300 | 298 … |
Built with git-ssb-web