Commit 5724ec9
committed
fix: address third-round review on external-command hooks
Four things turned up on the third pass through the hooks branch.
Two of them were latent bugs the earlier reviews missed; two were
the kind of write-amplification and resource-leak issues that don't
bite anyone in a 100-test suite but get embarrassing in production.
The biggest one: a `,r = toggle-read` macro on the Dashboard with
"unread only" filtered didn't drop the just-read item from the
list. The Dashboard keypress called `apply_filters()` inline; the
macro path went through `dispatch_action -> handle_toggle_read_current`
and silently skipped it. Two execution paths, two answers for "did
the dashboard refresh." Move `apply_filters()` into the helper so
every caller -- macro, FeedItems, FeedItemDetail -- agrees.
Next: `mark_feed_seen` flipped `feeds_seeded` even when the first
fetch returned zero items. So a transiently-empty fetch (server
hiccup, parser edge case) silently armed the firehose: the *next*
non-empty fetch treated every backlog item as new. The first-fetch
suppression existed precisely to prevent this. One-line guard on
`!feed.items.is_empty()`. Please don't congratulate yourself for
seeding a feed you haven't actually seen.
Then: `fire_exec_on_new` ran `save_data()` once per feed arrival.
With 50 bookmarks and the hook configured, that's 50 whole-file
JSON writes per refresh. Split into `collect_exec_on_new`
(in-memory only) and `flush_exec_on_new` (one save, then spawn);
the receive loop accumulates argv across the batch and flushes
once. AT-MOST-ONCE crash semantics are preserved -- save still
happens before any spawn, just at batch granularity now.
Finally: `remove_current_feed` never dropped the URL from
`feeds_seeded` or its item IDs from `seen_items`. So the persisted
JSON grew monotonically across feed churn for absolutely no reason.
Drop them before removing the feed itself.
Three regression tests added: dashboard filter reapply after macro
toggle-read, empty-first-fetch suppression, and feed removal
cleanup. 118 tests pass, clippy clean, fmt clean.1 parent 9f08e31 commit 5724ec9
3 files changed
Lines changed: 164 additions & 23 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
903 | 903 | | |
904 | 904 | | |
905 | 905 | | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
906 | 916 | | |
907 | 917 | | |
908 | 918 | | |
| |||
1726 | 1736 | | |
1727 | 1737 | | |
1728 | 1738 | | |
1729 | | - | |
| 1739 | + | |
| 1740 | + | |
| 1741 | + | |
| 1742 | + | |
| 1743 | + | |
| 1744 | + | |
1730 | 1745 | | |
1731 | 1746 | | |
1732 | 1747 | | |
| |||
2434 | 2449 | | |
2435 | 2450 | | |
2436 | 2451 | | |
| 2452 | + | |
| 2453 | + | |
| 2454 | + | |
| 2455 | + | |
| 2456 | + | |
| 2457 | + | |
| 2458 | + | |
| 2459 | + | |
| 2460 | + | |
| 2461 | + | |
| 2462 | + | |
| 2463 | + | |
| 2464 | + | |
| 2465 | + | |
| 2466 | + | |
| 2467 | + | |
| 2468 | + | |
| 2469 | + | |
| 2470 | + | |
| 2471 | + | |
| 2472 | + | |
| 2473 | + | |
| 2474 | + | |
| 2475 | + | |
| 2476 | + | |
| 2477 | + | |
| 2478 | + | |
| 2479 | + | |
| 2480 | + | |
| 2481 | + | |
| 2482 | + | |
| 2483 | + | |
| 2484 | + | |
| 2485 | + | |
| 2486 | + | |
| 2487 | + | |
| 2488 | + | |
| 2489 | + | |
| 2490 | + | |
| 2491 | + | |
| 2492 | + | |
| 2493 | + | |
| 2494 | + | |
| 2495 | + | |
| 2496 | + | |
| 2497 | + | |
| 2498 | + | |
| 2499 | + | |
| 2500 | + | |
| 2501 | + | |
| 2502 | + | |
| 2503 | + | |
| 2504 | + | |
| 2505 | + | |
| 2506 | + | |
| 2507 | + | |
| 2508 | + | |
| 2509 | + | |
| 2510 | + | |
| 2511 | + | |
| 2512 | + | |
| 2513 | + | |
| 2514 | + | |
| 2515 | + | |
| 2516 | + | |
2437 | 2517 | | |
2438 | 2518 | | |
2439 | 2519 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
91 | 96 | | |
92 | 97 | | |
93 | 98 | | |
| |||
2067 | 2072 | | |
2068 | 2073 | | |
2069 | 2074 | | |
| 2075 | + | |
| 2076 | + | |
| 2077 | + | |
| 2078 | + | |
| 2079 | + | |
| 2080 | + | |
| 2081 | + | |
| 2082 | + | |
| 2083 | + | |
| 2084 | + | |
| 2085 | + | |
| 2086 | + | |
| 2087 | + | |
| 2088 | + | |
| 2089 | + | |
| 2090 | + | |
| 2091 | + | |
| 2092 | + | |
| 2093 | + | |
| 2094 | + | |
| 2095 | + | |
| 2096 | + | |
| 2097 | + | |
| 2098 | + | |
| 2099 | + | |
| 2100 | + | |
| 2101 | + | |
| 2102 | + | |
| 2103 | + | |
| 2104 | + | |
| 2105 | + | |
| 2106 | + | |
| 2107 | + | |
| 2108 | + | |
| 2109 | + | |
| 2110 | + | |
| 2111 | + | |
2070 | 2112 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
201 | 201 | | |
202 | 202 | | |
203 | 203 | | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
208 | 208 | | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | | - | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
216 | | - | |
217 | | - | |
| 216 | + | |
| 217 | + | |
218 | 218 | | |
219 | 219 | | |
220 | | - | |
| 220 | + | |
221 | 221 | | |
222 | 222 | | |
223 | 223 | | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
224 | 243 | | |
225 | 244 | | |
226 | | - | |
227 | | - | |
228 | | - | |
229 | 245 | | |
230 | 246 | | |
231 | | - | |
232 | | - | |
233 | | - | |
234 | | - | |
235 | | - | |
236 | | - | |
237 | | - | |
| 247 | + | |
238 | 248 | | |
239 | 249 | | |
240 | 250 | | |
| |||
306 | 316 | | |
307 | 317 | | |
308 | 318 | | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
309 | 324 | | |
310 | 325 | | |
311 | | - | |
| 326 | + | |
312 | 327 | | |
313 | 328 | | |
314 | 329 | | |
| |||
349 | 364 | | |
350 | 365 | | |
351 | 366 | | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
352 | 371 | | |
353 | 372 | | |
354 | 373 | | |
| |||
0 commit comments