Revision d42dadca
Added by koszko about 2 years ago
background/storage.js | ||
---|---|---|
16 | 16 |
* IMPORT make_once |
17 | 17 |
* IMPORT browser |
18 | 18 |
* IMPORT is_chrome |
19 |
* IMPORT observables |
|
19 | 20 |
* IMPORTS_END |
20 | 21 |
*/ |
21 | 22 |
|
... | ... | |
98 | 99 |
for (let item of await get_list_var(name)) |
99 | 100 |
map.set(item, await get(prefix + item)); |
100 | 101 |
|
101 |
return {map, prefix, name, listeners : new Set(), lock : make_lock()}; |
|
102 |
return {map, prefix, name, observable: observables.make(), |
|
103 |
lock: make_lock()}; |
|
102 | 104 |
} |
103 | 105 |
|
104 | 106 |
var list_by_prefix = {}; |
... | ... | |
121 | 123 |
prefixes = [prefixes]; |
122 | 124 |
|
123 | 125 |
for (let prefix of prefixes) |
124 |
list_by_prefix[prefix].listeners.add(cb);
|
|
126 |
observables.subscribe(list_by_prefix[prefix].observable, cb);
|
|
125 | 127 |
} |
126 | 128 |
|
127 | 129 |
exports.remove_change_listener = function (cb, prefixes=list_prefixes) |
... | ... | |
130 | 132 |
prefixes = [prefixes]; |
131 | 133 |
|
132 | 134 |
for (let prefix of prefixes) |
133 |
list_by_prefix[prefix].listeners.delete(cb); |
|
134 |
} |
|
135 |
|
|
136 |
function broadcast_change(change, list) |
|
137 |
{ |
|
138 |
for (let listener_callback of list.listeners) |
|
139 |
listener_callback(change); |
|
135 |
observables.unsubscribe(list_by_prefix[prefix].observable, cb); |
|
140 | 136 |
} |
141 | 137 |
|
142 | 138 |
/* Prepare some hepler functions to get elements of a list */ |
... | ... | |
198 | 194 |
new_val : value |
199 | 195 |
}; |
200 | 196 |
|
201 |
broadcast_change(change, list);
|
|
197 |
observables.broadcast(list.observable, change);
|
|
202 | 198 |
|
203 | 199 |
return old_val; |
204 | 200 |
} |
... | ... | |
236 | 232 |
new_val : undefined |
237 | 233 |
}; |
238 | 234 |
|
239 |
broadcast_change(change, list);
|
|
235 |
observables.broadcast(list.observable, change);
|
|
240 | 236 |
|
241 | 237 |
return old_val; |
242 | 238 |
} |
... | ... | |
282 | 278 |
new_val : undefined |
283 | 279 |
}; |
284 | 280 |
|
285 |
broadcast_change(change, list);
|
|
281 |
observables.broadcast(list.observable, change);
|
|
286 | 282 |
|
287 | 283 |
list.map.set(new_item, new_val); |
288 | 284 |
|
... | ... | |
290 | 286 |
change.old_val = undefined; |
291 | 287 |
change.new_val = new_val; |
292 | 288 |
|
293 |
broadcast_change(change, list);
|
|
289 |
observables.broadcast(list.observable, change);
|
|
294 | 290 |
|
295 | 291 |
return old_val; |
296 | 292 |
} |
... | ... | |
375 | 371 |
for (let [item, val] of list_entries_it(list)) { |
376 | 372 |
change.item = item; |
377 | 373 |
change.old_val = val; |
378 |
broadcast_change(change, list);
|
|
374 |
observables.broadcast(list.observable, change);
|
|
379 | 375 |
} |
380 | 376 |
|
381 | 377 |
list.map = new Map(); |
Also available in: Unified diff
extract observables implementation from storage.js