This website requires JavaScript.
1b223d3891
fix(flutter/test): skip drift tests pending libsqlite3 in CI runner image
bvandeusen
2026-05-10 10:27:49 -04:00
0d171490c3
fix(flutter): analyze errors after Plan B push
bvandeusen
2026-05-10 10:18:38 -04:00
5114a8118c
feat(flutter): CachedIndicator + Download buttons + app startup wiring
bvandeusen
2026-05-09 23:23:26 -04:00
fd4ce402d7
feat(flutter/settings): Storage section UI — usage, cap, prefetch, controls
bvandeusen
2026-05-09 23:21:34 -04:00
153e931490
feat(flutter/player): audio_handler reads from cache first; LockCaching fallback
bvandeusen
2026-05-09 23:20:24 -04:00
536350380f
feat(flutter/cache): Prefetcher — queue-ahead pre-download window
bvandeusen
2026-05-09 23:19:01 -04:00
ab58f3ffcb
feat(flutter/cache): SyncController — token-based delta sync
bvandeusen
2026-05-09 23:18:15 -04:00
16669a0365
feat(flutter/cache): AudioCacheManager — pin/unpin/evict + tiered LRU
bvandeusen
2026-05-09 23:17:14 -04:00
2bcbb53c49
feat(flutter/cache): connectivityProvider + cacheSettingsProvider
bvandeusen
2026-05-09 23:15:17 -04:00
326b7008a9
feat(flutter/cache): drift schema + new deps + CI codegen step (#357 plan B)
bvandeusen
2026-05-09 23:07:34 -04:00
8d5c90e0ed
fix(server): wrap defer tx.Rollback for errcheck + gofmt -s alignment
bvandeusen
2026-05-09 22:47:25 -04:00
9c7dec60a9
fix(server): go mod tidy after sync_test brings testify direct
bvandeusen
2026-05-09 22:45:15 -04:00
6fb6729beb
feat(server): playlists service writes library_changes
bvandeusen
2026-05-09 22:41:59 -04:00
e0c5789cee
feat(server): like/unlike handlers write library_changes
bvandeusen
2026-05-09 22:40:56 -04:00
0fa7dc7982
feat(server): scanner + DeleteTrackFile write library_changes
bvandeusen
2026-05-09 22:39:58 -04:00
6bd8a15c7a
feat(server): mount /api/library/sync route
bvandeusen
2026-05-09 22:36:46 -04:00
9bf4b504b3
feat(server): GET /api/library/sync endpoint
bvandeusen
2026-05-09 22:36:26 -04:00
3959c85111
feat(server): sync.LogChange helper + EntityType/Op constants
bvandeusen
2026-05-09 22:29:51 -04:00
cb35133843
feat(server): library_changes log table + sqlc queries
bvandeusen
2026-05-09 22:28:26 -04:00
084c202654
fix(web/test): MobileNavDrawer inert + integrations Save mocks Test first
bvandeusen
2026-05-09 21:21:04 -04:00
3ffd9beca0
fix(web): preserve per-row aria-labels through RowActionsMenu + test fixes
bvandeusen
2026-05-09 21:16:48 -04:00
3f8a2c511a
fix(web): MobileNavDrawer focus uses querySelector, not conditional bind:this
bvandeusen
2026-05-09 20:26:44 -04:00
1536860e59
fix(web): move {@const} blocks to immediate children of {#each}
bvandeusen
2026-05-09 20:26:04 -04:00
268e12a5eb
feat(web): Modal overlay gets p-4 so max-w-md modals fit on phone
bvandeusen
2026-05-09 20:21:52 -04:00
16e0e98943
feat(web): mobile mechanical sweep — pointer-aware arrows, h3 dividers, modal safe-area
bvandeusen
2026-05-09 20:21:38 -04:00
f03a0042e8
feat(web): wire RowActionsMenu in users admin page
bvandeusen
2026-05-09 20:21:17 -04:00
e266a0f2dc
feat(web): wire RowActionsMenu in requests + quarantine
bvandeusen
2026-05-09 20:20:43 -04:00
e0cf527304
feat(web): RowActionsMenu generic primary + ⋮ for admin tables
bvandeusen
2026-05-09 20:19:09 -04:00
ed6d0936ca
feat(web): PlayerBar reflows to two-row layout below md
bvandeusen
2026-05-09 20:18:32 -04:00
d5983433c5
feat(web): PlayerOverflowMenu — shuffle/repeat/queue/volume in a menu
bvandeusen
2026-05-09 20:18:10 -04:00
df4cb434b2
feat(web): hamburger trigger + mobile drawer mount in Shell
bvandeusen
2026-05-09 20:17:35 -04:00
857a8621ec
feat(web): MobileNavDrawer off-canvas nav for <md viewport
bvandeusen
2026-05-09 20:17:17 -04:00
7f395024a0
feat(web): mobileNav store for off-canvas drawer state
bvandeusen
2026-05-09 20:16:38 -04:00
84a638a41f
fix(flutter): clear analyze --fatal-infos issues
bvandeusen
2026-05-09 16:16:35 -04:00
dd848e76e8
feat(flutter/playlists): empty-state hint on empty playlist detail
bvandeusen
2026-05-09 16:07:41 -04:00
0dbb662b4c
feat(flutter): search no-results copy mirrors design-system voice
bvandeusen
2026-05-09 16:07:19 -04:00
ccebd98735
feat(flutter): empty-state copy mirrors web design-system voice
bvandeusen
2026-05-09 16:06:58 -04:00
231f1ddf9a
test(flutter/theme): cover .dark()/.light() factories + back-compat alias
bvandeusen
2026-05-09 15:50:51 -04:00
143130eaae
feat(flutter/settings): Appearance section with System/Light/Dark picker
bvandeusen
2026-05-09 15:50:29 -04:00
56f0557d94
feat(flutter): MinstrelApp watches themeMode + offers darkTheme
bvandeusen
2026-05-09 15:47:41 -04:00
6dc488652e
feat(flutter/theme): themeModeProvider with secure-storage persistence
bvandeusen
2026-05-09 15:47:00 -04:00
caa19f2d91
feat(flutter/theme): buildDarkTheme + buildLightTheme
bvandeusen
2026-05-09 15:46:37 -04:00
66ddd3c366
feat(flutter/theme): FabledSwordTheme.dark() + .light() factories
bvandeusen
2026-05-09 15:46:01 -04:00
b1f62a0733
feat(flutter/theme): codegen emits dark + light + flat token classes
bvandeusen
2026-05-09 15:45:40 -04:00
25ff7afc33
feat(flutter): TrackRow renders TrackActionsButton by default
bvandeusen
2026-05-09 13:43:40 -04:00
c8baaa5329
feat(flutter): wire TrackActionsButton into 4 surfaces
bvandeusen
2026-05-09 13:43:12 -04:00
36006d703d
feat(flutter/track-actions): AddToPlaylistSheet picker
bvandeusen
2026-05-09 13:42:19 -04:00
2944288050
feat(flutter/track-actions): HideTrackSheet for reason + notes pick
bvandeusen
2026-05-09 13:41:48 -04:00
5f239f05a5
feat(flutter/track-actions): TrackActionsButton + TrackActionsSheet
bvandeusen
2026-05-09 13:41:16 -04:00
2499449c0b
feat(flutter/player): playNext + enqueue + PlaylistsApi.appendTracks
bvandeusen
2026-05-09 13:40:17 -04:00
5159bcd3f4
feat(flutter/quarantine): MyQuarantineController + provider
bvandeusen
2026-05-09 13:39:32 -04:00
fdaa1a0472
feat(flutter/api): QuarantineApi for flag/unflag
bvandeusen
2026-05-09 13:38:52 -04:00
534dafb044
feat(flutter/player): set MediaItem.artUri from local cover cache
bvandeusen
2026-05-09 12:54:47 -04:00
d70075c426
feat(flutter/player): albumCoverCacheProvider + pass cache through configure
bvandeusen
2026-05-09 12:54:05 -04:00
b6d6f22598
feat(flutter/player): AlbumCoverCache for lock-screen artwork
bvandeusen
2026-05-09 12:53:20 -04:00
78ad8a31e7
chore(flutter): promote path_provider to direct dep
bvandeusen
2026-05-09 12:52:44 -04:00
d3a05520d3
fix(flutter): clear analyze --fatal-infos issues
bvandeusen
2026-05-09 12:05:02 -04:00
17ff69780d
test(flutter/home): cover new home parity layout
bvandeusen
2026-05-09 11:40:46 -04:00
a2f6bdb44f
feat(flutter/home): mirror web home structurally
bvandeusen
2026-05-09 11:40:12 -04:00
8fb82d473d
feat(flutter/widgets): HorizontalScrollRow skips header when title empty
bvandeusen
2026-05-09 11:38:57 -04:00
a7fcafadda
feat(flutter): DelayedLoading wrapper for skeleton-with-delay
bvandeusen
2026-05-09 11:38:42 -04:00
3ac8cc9363
feat(flutter/widgets): PlaylistCard + PlaylistPlaceholderCard
bvandeusen
2026-05-09 11:38:19 -04:00
dccdb00bce
feat(flutter/widgets): CompactTrackCard for dense home Most-played row
bvandeusen
2026-05-09 11:37:40 -04:00
078520f504
feat(flutter): systemPlaylistsStatusProvider
bvandeusen
2026-05-09 11:36:29 -04:00
d872a30506
feat(flutter): SystemPlaylistsStatus model + endpoint method
bvandeusen
2026-05-09 11:36:15 -04:00
5613fec5ef
fix(flutter): PlaylistsApi.list parses {owned, public} envelope
bvandeusen
2026-05-09 11:35:34 -04:00
28b07c7ef4
fix(flutter/android): permit cleartext to 127.0.0.1 for just_audio loopback proxy
bvandeusen
2026-05-08 23:24:47 -04:00
83df3773ae
fix(flutter): cover URLs send Bearer auth + audio handler diag logging
bvandeusen
2026-05-08 23:15:56 -04:00
088e8f4bf8
test(web/admin): align Lidarr bootstrap tests with file conventions
bvandeusen
2026-05-08 23:11:35 -04:00
c47ec6093f
test(web/admin): cover Test-then-Save flow on /admin/integrations
bvandeusen
2026-05-08 23:10:37 -04:00
bca8622640
feat(web/admin): Save runs Test first, dropdowns honor test response
bvandeusen
2026-05-08 23:08:58 -04:00
abb384f479
feat(web/admin): LidarrTestResult success branch carries profile + folder lists
bvandeusen
2026-05-08 23:08:02 -04:00
22f03a5fe8
test(server/admin): cover new test endpoint response shape
bvandeusen
2026-05-08 23:07:47 -04:00
0bc17a85fb
feat(server/admin): test endpoint returns profiles + folders on success
bvandeusen
2026-05-08 23:07:15 -04:00
602ef3bfdf
fix(flutter): cover URLs resolve against server baseUrl + audio stream URL guard
bvandeusen
2026-05-08 22:47:25 -04:00
751c2878f7
fix(flutter/android): production manifest + AudioServiceActivity
bvandeusen
2026-05-08 22:33:30 -04:00
626fc7502c
Merge pull request 'refactor(server): remove bootstrap admin path' (#34 ) from dev into main
v2026.05.08.4
bvandeusen
2026-05-09 02:19:40 +00:00
c4cccea775
refactor(server): remove bootstrap admin path
bvandeusen
2026-05-08 22:14:33 -04:00
9bf3b8a2f2
Merge pull request 'feat(flutter): admin parity slice — requests, quarantine, users, invites' (#33 ) from dev into main
v2026.05.08.3
bvandeusen
2026-05-09 02:07:59 +00:00
d5c8d316c5
fix(flutter): clear analyze --fatal-infos errors from admin parity slice
bvandeusen
2026-05-08 22:02:14 -04:00
9f6ceb1731
feat(flutter/admin): users screen with users + invites sections
bvandeusen
2026-05-08 21:57:53 -04:00
afcaf56b9c
feat(flutter/admin): user row + edit sheet (toggles, reset, delete)
bvandeusen
2026-05-08 21:57:10 -04:00
7d207e56f5
feat(flutter/admin): users + invites mutations
bvandeusen
2026-05-08 21:56:34 -04:00
3e905db906
feat(flutter/admin): quarantine screen + typed-confirm sheet
bvandeusen
2026-05-08 21:56:00 -04:00
bd1bcab12b
feat(flutter/admin): requests screen with approve/reject
bvandeusen
2026-05-08 21:54:58 -04:00
8bb192fe54
feat(flutter/admin): adminRequestsProvider with optimistic approve/reject
bvandeusen
2026-05-08 21:54:05 -04:00
408eed1f3d
feat(flutter/settings): admin card visible to admins
bvandeusen
2026-05-08 21:53:35 -04:00
6b5d12f3a1
feat(flutter/admin): landing screen with section cards + counts
bvandeusen
2026-05-08 21:53:03 -04:00
372e7eca86
feat(flutter/admin): API providers + adminCountsProvider
bvandeusen
2026-05-08 21:52:12 -04:00
79d00ba001
feat(flutter/api): admin endpoint clients
bvandeusen
2026-05-08 21:52:00 -04:00
2b595c40cd
feat(flutter): admin DTOs (request, quarantine item, user, invite)
bvandeusen
2026-05-08 21:51:33 -04:00
dfc08650e7
feat(flutter): wire admin routes + isAdmin gate
bvandeusen
2026-05-08 21:50:53 -04:00
fc0350cb96
feat(flutter): adopt MainAppBarActions in Search, Discover, Playlists, Settings
bvandeusen
2026-05-08 21:50:29 -04:00
5546787f78
feat(flutter): adopt MainAppBarActions in Home + Library
bvandeusen
2026-05-08 21:49:30 -04:00
6564d37a2a
feat(flutter): MainAppBarActions widget with admin-gated overflow
bvandeusen
2026-05-08 21:48:52 -04:00
492460cf4a
Merge pull request 'fix(web): /register reachable for bootstrap admin (closes #376 )' (#32 ) from dev into main
v2026.05.08.2
bvandeusen
2026-05-08 22:01:37 +00:00
c5dc3bd256
fix(web): exempt /register from auth guard so bootstrap admin can self-register
bvandeusen
2026-05-08 17:59:43 -04:00
3f2822dfc6
feat(flutter): discover screen — search Lidarr + create requests
bvandeusen
2026-05-08 14:53:06 -04:00
dfbeed01a6
feat(flutter): settings screen + 4-icon home AppBar
bvandeusen
2026-05-08 14:51:04 -04:00
1ad67dbe59
fix(flutter/test): tolerate Riverpod 3's ProviderException wrapper
bvandeusen
2026-05-08 14:43:31 -04:00