Commit f11d6ed
committed
feat(subsonic): capability-driven sidebar refresh (Phase 19 step 16)
Subsonic capability changes now propagate to the sidebar without a relaunch.
When a server upgrade unlocks Podcasts, Internet Radio, or Bookmarks, the
relevant sections appear immediately.
- SubsonicCapabilities: add hasSameCapabilityFlags(as:) that ignores
fetchedAt so only real flag changes trigger a redraw.
- SubsonicService: persist freshly fetched capabilities to the database
via SubsonicServerStore.updateCapabilities; emit on AsyncStream<UUID>
capabilityUpdates only when persisted flags actually changed.
refreshCapabilities now bypasses the SwiftSonic client cache so a real
network refetch happens.
- SubsonicServerStore: add updateCapabilities passthrough to the
Persistence repository.
- UI module: add SubsonicCapabilityChangeObserving protocol; have
LibraryViewModel subscribe and reload its sidebar listing on each
emission. Task is cancelled in deinit.
- App layer: SubsonicCapabilityObserver bridges SubsonicService into the
UI protocol so the UI module stays decoupled from Subsonic.
- Tests: 11 new tests covering flag comparison, store passthrough, and
the full SubsonicService emission contract (initial persist, identical
flags do not re-emit, flag change re-emits, cached load no-op);
LibraryViewModel sidebar test verifying capability events drive
reload. Subsonic suite grows from 23 to 34 tests.1 parent 7cb7681 commit f11d6ed
10 files changed
Lines changed: 585 additions & 8 deletions
File tree
- App
- Bocan.xcodeproj
- Modules
- Subsonic
- Sources/Subsonic
- Tests/SubsonicTests
- UI
- Sources/UI
- AppRoot
- ViewModels
- Tests/UITests/ViewModelTests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
407 | 407 | | |
408 | 408 | | |
409 | 409 | | |
410 | | - | |
| 410 | + | |
| 411 | + | |
411 | 412 | | |
412 | 413 | | |
413 | 414 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| 30 | + | |
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
| |||
131 | 132 | | |
132 | 133 | | |
133 | 134 | | |
| 135 | + | |
134 | 136 | | |
135 | 137 | | |
136 | 138 | | |
| |||
166 | 168 | | |
167 | 169 | | |
168 | 170 | | |
169 | | - | |
| 171 | + | |
170 | 172 | | |
171 | 173 | | |
172 | 174 | | |
| |||
372 | 374 | | |
373 | 375 | | |
374 | 376 | | |
| 377 | + | |
375 | 378 | | |
376 | 379 | | |
377 | 380 | | |
| |||
420 | 423 | | |
421 | 424 | | |
422 | 425 | | |
423 | | - | |
| 426 | + | |
424 | 427 | | |
425 | 428 | | |
426 | | - | |
| 429 | + | |
427 | 430 | | |
428 | 431 | | |
429 | 432 | | |
| |||
654 | 657 | | |
655 | 658 | | |
656 | 659 | | |
| 660 | + | |
657 | 661 | | |
658 | 662 | | |
659 | 663 | | |
| |||
705 | 709 | | |
706 | 710 | | |
707 | 711 | | |
708 | | - | |
| 712 | + | |
709 | 713 | | |
710 | 714 | | |
711 | 715 | | |
| |||
841 | 845 | | |
842 | 846 | | |
843 | 847 | | |
844 | | - | |
| 848 | + | |
845 | 849 | | |
846 | 850 | | |
847 | 851 | | |
| |||
Lines changed: 20 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
129 | 129 | | |
130 | 130 | | |
131 | 131 | | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
132 | 152 | | |
Lines changed: 14 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
100 | 100 | | |
101 | 101 | | |
102 | 102 | | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
103 | 117 | | |
104 | 118 | | |
105 | 119 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
133 | 133 | | |
134 | 134 | | |
135 | 135 | | |
| 136 | + | |
136 | 137 | | |
137 | 138 | | |
138 | 139 | | |
139 | 140 | | |
140 | 141 | | |
141 | 142 | | |
142 | 143 | | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
143 | 153 | | |
144 | 154 | | |
145 | 155 | | |
| |||
193 | 203 | | |
194 | 204 | | |
195 | 205 | | |
| 206 | + | |
196 | 207 | | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
197 | 212 | | |
198 | 213 | | |
199 | 214 | | |
| |||
210 | 225 | | |
211 | 226 | | |
212 | 227 | | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
213 | 231 | | |
| 232 | + | |
214 | 233 | | |
215 | | - | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
216 | 251 | | |
217 | 252 | | |
218 | 253 | | |
| |||
470 | 505 | | |
471 | 506 | | |
472 | 507 | | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
473 | 523 | | |
474 | 524 | | |
475 | 525 | | |
| |||
522 | 572 | | |
523 | 573 | | |
524 | 574 | | |
| 575 | + | |
| 576 | + | |
| 577 | + | |
| 578 | + | |
| 579 | + | |
| 580 | + | |
| 581 | + | |
| 582 | + | |
| 583 | + | |
525 | 584 | | |
0 commit comments