Commit 073f7adfddd31252faca6d3c503e202ad1aef088
Handle unused tags and deleting tags better
Josiah Witt committed on 2/22/2018, 3:52:54 AMParent: eaa2308c20b5db8566955893f8328f5440f973a9
Files changed
tag/obs/tagged.js | changed |
tag/obs/tagged.js | |||
---|---|---|---|
@@ -2,9 +2,11 @@ | |||
2 | 2 … | var pull = require('pull-stream') | |
3 | 3 … | var nest = require('depnest') | |
4 | 4 … | var ref = require('ssb-ref') | |
5 | 5 … | var set = require('lodash/set') | |
6 … | +var unset = require('lodash/unset') | ||
6 | 7 … | var get = require('lodash/get') | |
8 … | +var isEmpty = require('lodash/isEmpty') | ||
7 | 9 … | ||
8 | 10 … | exports.needs = nest({ | |
9 | 11 … | 'sbot.pull.stream': 'first' | |
10 | 12 … | }) | |
@@ -39,9 +41,9 @@ | |||
39 | 41 … | } | |
40 | 42 … | ||
41 | 43 … | function messageTags(msgId) { | |
42 | 44 … | if (!ref.isLink(msgId)) throw new Error('Requires an ssb ref!') | |
43 | - return withSync(computed(getObs(msgId, messagesCache), Object.keys)) | ||
45 … | + return withSync(computed(getObs(msgId, messagesCache), getMessageTags)) | ||
44 | 46 … | } | |
45 | 47 … | ||
46 | 48 … | function allTagsFrom(author) { | |
47 | 49 … | if (!ref.isFeed(author)) throw new Error('Requires an ssb ref!') | |
@@ -82,13 +84,24 @@ | |||
82 | 84 … | const lastState = state() | |
83 | 85 … | var changed = false | |
84 | 86 … | ||
85 | 87 … | for (const tag in values) { | |
88 … | + const lastTag = lastState[tag] | ||
89 … | + const isUnusedTag = isEmpty(values[tag]) && (lastTag === undefined || !isEmpty(lastTag)) | ||
90 … | + if (isUnusedTag) { | ||
91 … | + set(lastState, [ tag ], {}) | ||
92 … | + changed = true | ||
93 … | + continue | ||
94 … | + } | ||
86 | 95 … | for (const key in values[tag]) { | |
87 | - var value = get(values, [ tag, key ]) | ||
88 | - var lastValue = get(lastState, [ tag, key ]) | ||
96 … | + const value = get(values, [ tag, key ]) | ||
97 … | + const lastValue = get(lastState, [ tag, key ]) | ||
89 | 98 … | if (value !== lastValue) { | |
90 | - set(lastState, [tag, key], value) | ||
99 … | + if (value) { | ||
100 … | + set(lastState, [ tag, key ], value) | ||
101 … | + } else { | ||
102 … | + unset(lastState, [ tag, key ]) | ||
103 … | + } | ||
91 | 104 … | changed = true | |
92 | 105 … | } | |
93 | 106 … | } | |
94 | 107 … | } | |
@@ -123,13 +136,18 @@ | |||
123 | 136 … | ||
124 | 137 … | if (!sync()) { | |
125 | 138 … | sync.set(true) | |
126 | 139 … | } | |
127 | - } else if (item && ref.isLink(item.tag) && ref.isFeed(item.author) && ref.isLink(item.message)) { | ||
140 … | + } else if (item && ref.isLink(item.tagKey) && ref.isFeed(item.author) && ref.isLink(item.message)) { | ||
128 | 141 … | // handle realtime updates | |
129 | - const { tag, author, message, tagged, timestamp } = item | ||
130 | - update(author, { [tag]: { [message]: timestamp } }, tagsCache) | ||
131 | - update(message, { [tag]: { [author]: timestamp } }, messagesCache) | ||
142 … | + const { tagKey, author, message, tagged, timestamp } = item | ||
143 … | + if (tagged) { | ||
144 … | + update(author, { [tagKey]: { [message]: timestamp } }, tagsCache) | ||
145 … | + update(message, { [tagKey]: { [author]: timestamp } }, messagesCache) | ||
146 … | + } else { | ||
147 … | + update(author, { [tagKey]: { [message]: false } }, tagsCache) | ||
148 … | + update(message, { [tagKey]: { [author]: false } }, messagesCache) | ||
149 … | + } | ||
132 | 150 … | } | |
133 | 151 … | }) | |
134 | 152 … | ) | |
135 | 153 … | } | |
@@ -144,14 +162,13 @@ | |||
144 | 162 … | } | |
145 | 163 … | return messages | |
146 | 164 … | } | |
147 | 165 … | ||
148 | -function getMessageTags(lookup, tagId) { | ||
149 | - const tags = {} | ||
150 | - for (const author in lookup[tagId]) { | ||
151 | - if (lookup[tagId][author]) { | ||
152 | - if (!tags[tagId]) tags[tagId] = {} | ||
153 | - tags[tagId][author] = lookup[tagId][author] | ||
166 … | +function getMessageTags(lookup) { | ||
167 … | + const tags = [] | ||
168 … | + for (const tag in lookup) { | ||
169 … | + if (!isEmpty(lookup[tag])) { | ||
170 … | + tags.push(tag) | ||
154 | 171 … | } | |
155 | 172 … | } | |
156 | 173 … | return tags | |
157 | 174 … | } |
Built with git-ssb-web