Commit b52476e6fc5bba6d67786b4b0ee5e4bc4a7c4136
make notifications / postts / public feed streams abortable! (first pass)
mixmix committed on 5/16/2019, 6:58:47 AMParent: 390c8cafdc4ddfa56290adf041971042ec6c2a87
Files changed
app/page/notifications.js | changed |
app/page/posts.js | changed |
app/page/public.js | changed |
app/page/notifications.js | ||
---|---|---|
@@ -1,8 +1,9 @@ | ||
1 | 1 | const nest = require('depnest') |
2 | 2 | const { h } = require('mutant') |
3 | 3 | const pull = require('pull-stream') |
4 | 4 | const pullMerge = require('pull-merge') |
5 | +const pullAbort = require('pull-abortable') | |
5 | 6 | const Scroller = require('pull-scroll') |
6 | 7 | const next = require('pull-next-query') |
7 | 8 | const BookNotifications = require('scuttle-book/pull/notifications') |
8 | 9 | |
@@ -37,19 +38,28 @@ | ||
37 | 38 | function notificationsPage (location) { |
38 | 39 | const { filterMenu, filterDownThrough, filterUpThrough, resetFeed } = api.app.html.filter(draw) |
39 | 40 | const { container, content } = api.app.html.scroller({ prepend: [ filterMenu ] }) |
40 | 41 | |
42 | + var abortableDown = pullAbort() | |
43 | + var abortableUp = pullAbort() | |
44 | + | |
41 | 45 | function draw () { |
42 | 46 | resetFeed({ container, content }) |
43 | 47 | |
48 | + abortableDown.abort() | |
49 | + abortableDown = pullAbort() | |
44 | 50 | pull( |
45 | 51 | pullMentions({ old: false, live: true }), |
52 | + abortableDown, | |
46 | 53 | filterDownThrough(), |
47 | 54 | Scroller(container, content, render, true, false) |
48 | 55 | ) |
49 | 56 | |
57 | + abortableUp.abort() | |
58 | + abortableUp = pullAbort() | |
50 | 59 | pull( |
51 | 60 | pullMentions({ reverse: true, live: false }), |
61 | + abortableUp, | |
52 | 62 | filterUpThrough(), |
53 | 63 | Scroller(container, content, render, false, false) |
54 | 64 | ) |
55 | 65 | } |
app/page/posts.js | ||
---|---|---|
@@ -1,9 +1,10 @@ | ||
1 | 1 | const nest = require('depnest') |
2 | 2 | const { h, Value, Array: MutantArray, Struct, computed, when, map } = require('mutant') |
3 | 3 | const pull = require('pull-stream') |
4 | +const pullAbortable = require('pull-abortable') | |
5 | +const next = require('pull-next-query') | |
4 | 6 | const Scroller = require('mutant-scroll') |
5 | -const next = require('pull-next-query') | |
6 | 7 | const merge = require('lodash/merge') |
7 | 8 | const get = require('lodash/get') |
8 | 9 | const sort = require('ssb-sort') |
9 | 10 | |
@@ -82,9 +83,17 @@ | ||
82 | 83 | }, BY_START) |
83 | 84 | ]) |
84 | 85 | ]) |
85 | 86 | |
87 | + var abortLive = pullAbortable() | |
88 | + var abortReverse = pullAbortable() | |
89 | + | |
86 | 90 | return computed(state, state => { |
91 | + abortLive.abort() | |
92 | + abortLive = pullAbortable() | |
93 | + abortReverse.abort() | |
94 | + abortReverse = pullAbortable() | |
95 | + | |
87 | 96 | var page |
88 | 97 | if (state.sort === BY_UPDATE) page = PageByUpdate(state) |
89 | 98 | if (state.sort === BY_START) page = PageByStart(state) |
90 | 99 | |
@@ -109,9 +118,12 @@ | ||
109 | 118 | } |
110 | 119 | } |
111 | 120 | } |
112 | 121 | const defaults = { limit: 100, query: [{ $filter }] } |
113 | - return next(server.query.read, merge({}, defaults, opts), ['timestamp']) | |
122 | + return pull( | |
123 | + next(server.query.read, merge({}, defaults, opts), ['timestamp']), | |
124 | + opts.live ? abortLive : abortReverse | |
125 | + ) | |
114 | 126 | }) |
115 | 127 | } |
116 | 128 | |
117 | 129 | return Scroller({ |
@@ -169,8 +181,9 @@ | ||
169 | 181 | |
170 | 182 | // server.query.explain(merge({}, defaults, opts), console.log) |
171 | 183 | return pull( |
172 | 184 | next(server.query.read, merge({}, defaults, opts), ['value', 'timestamp']), |
185 | + opts.live ? abortLive : abortReverse, | |
173 | 186 | pull.map(m => m.key) |
174 | 187 | ) |
175 | 188 | }) |
176 | 189 | } |
app/page/public.js | ||
---|---|---|
@@ -1,7 +1,8 @@ | ||
1 | 1 | const nest = require('depnest') |
2 | 2 | const { h } = require('mutant') |
3 | 3 | const pull = require('pull-stream') |
4 | +const pullAbortable = require('pull-abortable') | |
4 | 5 | const Scroller = require('pull-scroll') |
5 | 6 | const next = require('pull-next-query') |
6 | 7 | const merge = require('lodash/merge') |
7 | 8 | |
@@ -40,8 +41,10 @@ | ||
40 | 41 | }) |
41 | 42 | const { filterMenu, filterDownThrough, filterUpThrough, resetFeed } = api.app.html.filter(draw) |
42 | 43 | const { container, content } = api.app.html.scroller({ prepend: [composer, filterMenu], className: 'PublicFeed' }) |
43 | 44 | |
45 | + var abortLive = pullAbortable() | |
46 | + var abortReverse = pullAbortable() | |
44 | 47 | const createStream = (opts) => api.sbot.pull.stream(server => { |
45 | 48 | const _opts = merge({}, opts, { |
46 | 49 | query: [{ |
47 | 50 | $filter: { |
@@ -66,16 +69,22 @@ | ||
66 | 69 | return api.message.html.render(msg, { showTitle: true }) |
67 | 70 | } |
68 | 71 | |
69 | 72 | // TODO - change to use ssb-query, streamed by publish time |
73 | + abortLive.abort() | |
74 | + abortLive = pullAbortable() | |
70 | 75 | pull( |
71 | 76 | createStream({ old: false, live: true }), |
77 | + abortLive, | |
72 | 78 | filterUpThrough(), |
73 | 79 | Scroller(container, content, render, true, false) |
74 | 80 | ) |
75 | 81 | |
82 | + abortReverse.abort() | |
83 | + abortReverse = pullAbortable() | |
76 | 84 | pull( |
77 | 85 | createStream({ reverse: true, live: false }), |
86 | + abortReverse, | |
78 | 87 | filterDownThrough(), |
79 | 88 | Scroller(container, content, render, false, false) |
80 | 89 | ) |
81 | 90 | } |
Built with git-ssb-web