Commit Graph
323 Commits
Author SHA1 Message Date
yonlu b17ce5d0e4 docs(phase-02): complete phase execution 2026-03-02 19:24:27 -05:00
yonlu 1c9356b6ad docs(02-02): complete artist credit error checking & scan warnings plan
- SUMMARY.md with all task commits and self-check
- STATE.md advanced to Phase 2 complete (2/2 plans)
- ROADMAP.md updated with Phase 2 complete status
- REQUIREMENTS.md marked CORR-08, CORR-09 complete
2026-03-02 19:21:06 -05:00
yonlu e6866ded9d feat(02-02): add ScanWarning type and reclassify scan errors as warnings
- Add ScanWarning struct with FilePath/Phase/Err to ScanMetrics
- Add mutex-protected addWarning method for concurrent use
- Reclassify walk, extraction, commit, orphan, variant, FTS failures as warnings
- Update commitBatch to return only fatal tx.Commit errors
- Update cachedLinkArtist to check errors via database.IsUniqueViolation
- Update handleConfigUpdate to capture and log scan warning count
2026-03-02 19:18:11 -05:00
yonlu 0d5b76cb0f docs(02-01): complete error handling & config fixes plan
- SUMMARY.md with all task commits and self-check
- STATE.md advanced to Phase 2 Plan 1/2 complete
- ROADMAP.md updated with Phase 2 progress
- REQUIREMENTS.md marked CORR-05, CORR-06, CORR-07 complete
2026-03-02 18:42:28 -05:00
yonlu 0860b2fd4b fix(02-01): log MPRIS callback errors instead of discarding them
- OnPause, OnPlayPause, OnStop, OnSeek now check errors and log at Warn level
- All four MPRIS closures use yj.logger.Warn for non-fatal error reporting
- No more silently discarded player.Pause() / player.Seek() errors
2026-03-02 18:39:54 -05:00
yonlu 2a86408201 fix(02-01): eliminate package-level startupErr and fix config file permissions
- Move startupErr from package-level var to YellowJacketApp struct field
- Update OnStartup and OnDomReady to reference yj.startupErr
- Change config.Save() file permissions from 0o666 to 0o644
- Fix nlreturn lint in database/errors.go (pre-existing, blocking commit hook)
2026-03-02 18:39:15 -05:00
yonlu bd86dc1086 docs(02): create phase plan for backend correctness 2026-03-02 18:21:18 -05:00
yonlu e5eaac66f8 docs(02-backend-correctness): research phase domain 2026-03-02 18:16:14 -05:00
yonlu bb02609ff5 docs(02): capture phase context 2026-03-02 18:05:30 -05:00
yonlu 8717cbfae3 docs(quick-8): complete duplicate tracks dialog plan
- Add 8-SUMMARY.md with execution results
- Update STATE.md with quick task 008 entry
2026-03-01 11:16:32 -05:00
yonlu 917a79a8d6 feat(quick-8): wire duplicate detection into playlist-picker and playlist-view
- playlist-picker checks for duplicates before adding tracks
- playlist-view drag-drop handler checks for duplicates before adding
- Both show duplicate-tracks-dialog when duplicates found
- Non-duplicate tracks added directly when no duplicates exist
2026-03-01 11:15:05 -05:00
yonlu 9f3ba2b9d4 feat(quick-8): create duplicate-tracks-dialog component
- Step through duplicate tracks one-by-one with Add/Skip buttons
- Apply to all remaining toggle for batch operations
- Dispatches playlist-action-complete when done
- Follows project wa-dialog patterns from track-details and phantom-resolver
2026-03-01 11:13:32 -05:00
yonlu 83de934c39 feat(quick-8): add FindDuplicateTracksInPlaylist backend method
- Add DuplicateTrackInfo and DuplicateCheckResult types
- Implement FindDuplicateTracksInPlaylist on playlist Service
- Regenerate Wails TypeScript bindings
2026-03-01 11:12:04 -05:00
yonlu 5ab214baed docs(quick-008): plan duplicate tracks dialog for playlist additions 2026-03-01 11:02:38 -05:00
yonlu 96a9dc43d5 docs(quick-7): complete pin default playlist to top plan
- Add 7-SUMMARY.md with implementation details and self-check
- Update STATE.md with quick task 007 entry and session context
2026-03-01 10:08:11 -05:00
yonlu e6378e1f0d feat(quick-7): wire frontend pin-default-playlist feature end-to-end
- Add pinDefault state, getter, setter to favorites-store
- Add pinDefault getter and setPinDefault to favorites-controller
- Update sortedEntries in playlist-view to pin default playlist to top
- Add Pin to Top toggle in config page Favorites section
- Add Wails bindings for GetPinDefaultPlaylist/SetPinDefaultPlaylist
- React to PinDefault in FavoritesConfigChanged event payload
2026-03-01 10:06:56 -05:00
yonlu 6e123bd47f feat(quick-7): add PinDefault config field with backend getter/setter
- Add PinDefault bool to favorites.Config struct with TOML tag
- Add GetPinDefaultPlaylist() and SetPinDefaultPlaylist() methods
- Include PinDefault in emitFavoritesChanged event payload
- Default to true (pinned) for new config installations
2026-03-01 10:05:22 -05:00
yonlu 0119cb469a docs(quick-006): complete remove list icon from playlist names plan
- Add 6-SUMMARY.md with execution results
- Update STATE.md with quick task 006 completion
2026-03-01 09:45:12 -05:00
yonlu 3c19766fd0 feat(quick-006): remove list icon from playlists, add favorites icon to default
- Replace static list icon with conditional: favorites icon for default playlist, nothing for others
- Reduce playlist-body left padding from 42px to 32px for tighter alignment without icon
2026-03-01 09:44:16 -05:00
yonlu e8570cbb62 docs(quick-5): complete sort dropdown for playlist view plan
- Add execution summary with task details and deviation log
- Update STATE.md with quick task 005 entry
2026-03-01 08:54:30 -05:00
yonlu 5c07485535 feat(quick-5): add sort dropdown UI and client-side sorting to playlist view
- Add sort toolbar with dropdown (Recent, Name, Date Created, Track Count)
- Add ascending/descending direction toggle button
- Persist sort preference in localStorage across view switches
- Default sort is Recent (modified DESC) matching existing DB order
- Replicate sort toolbar CSS pattern from track-list component
2026-03-01 08:53:06 -05:00
yonlu bdaff478e8 feat(quick-5): add CreatedAt/UpdatedAt to playlist Summary struct
- Add CreatedAt and UpdatedAt string fields to Summary struct
- Format as RFC3339 at all construction sites in playlist.go and favorites.go
- Update TypeScript bindings with new fields in models.ts
2026-03-01 08:51:00 -05:00
yonlu ea3648f3f8 docs(quick-5): plan sort dropdown for playlist view 2026-03-01 08:36:16 -05:00
yonlu 85412e2eaa docs(quick-4): Add set as default playlist context menu option for single playlist selection 2026-02-28 14:26:51 -05:00
yonlu af62fa4981 docs(quick-4): complete 'Set as Default Playlist' context menu plan
- Add 4-SUMMARY.md with execution results
- Update STATE.md with quick task 004 entry
2026-02-28 14:26:20 -05:00
yonlu 9971b635b8 feat(quick-4): add 'Set as Default Playlist' context menu option
- Add 'set-default' case in onPlaylistContextAction handler
- Add wa-dropdown-item with star icon in single-select guard block
- Option only appears when right-clicking a single playlist
2026-02-28 14:25:31 -05:00
yonlu a877031297 docs(quick-3): Add multi-select to playlist view with context menu delete support 2026-02-28 14:16:56 -05:00
yonlu 99401ab5c7 docs(quick-3): complete playlist multi-select plan
- Add 3-SUMMARY.md with execution results
- Update STATE.md with quick task 003 entry
2026-02-28 14:16:26 -05:00
yonlu c92ced2c74 feat(quick-3): wire playlist context menu for batch delete of selected playlists
- Update handlePlaylistContextMenu to respect multi-selection on right-click
- Make onPlaylistContextAction async with batch delete support
- Show 'Delete N Playlists' in context menu when multiple playlists selected
- Hide 'Rename' option when multiple playlists are selected
- Clear playlist selection after any context action completes
2026-02-28 14:15:24 -05:00
yonlu e13151ffa5 feat(quick-3): add playlist-level multi-select state and selection handling
- Add selectedPlaylists Set and lastSelectedPlaylistIndex for multi-select state
- Replace handleToggle with handlePlaylistHeaderClick supporting Ctrl/Shift+Click
- Clear playlist selection when entering track selection scope
- Clear playlist selection on outside clicks
- Add .playlist-header.selected CSS with selection background color
- Wire header click to new handler with selected class in template
2026-02-28 14:14:29 -05:00
yonlu be38937f84 docs(quick-002): complete auto-rename duplicate playlists on import summary
- Add 002-SUMMARY.md with task details and verification results
- Update STATE.md quick tasks table
2026-02-28 13:54:12 -05:00
yonlu 8ba8bbe7be feat(quick-002): add uniquePlaylistName helper and wire into ImportPlaylist
- Add uniquePlaylistName method to auto-rename duplicate names with (1), (2), etc.
- Call uniquePlaylistName only from ImportPlaylist, not CreatePlaylist
2026-02-28 13:53:21 -05:00
yonlu 04b2088b28 feat(quick-002): add CountPlaylistsByName SQL query and regenerate sqlc
- Add CountPlaylistsByName :one query to playlists.sql
- Regenerate sqlc to produce Go function
2026-02-28 13:52:21 -05:00
yonlu 981bd046da docs(quick-002): plan auto-rename duplicate playlists on import 2026-02-28 13:42:31 -05:00
yonlu a5be8e1efc docs(quick-001): multi-playlist import support 2026-02-28 13:33:28 -05:00
yonlu 50c8a3344a docs(quick-001): complete multi-playlist import support summary 2026-02-28 13:32:56 -05:00
yonlu 2a542bf3bc feat(quick-001): regenerate bindings and update frontend for multi-import
- Wails bindings reflect new PlaylistFilePicker and ImportPlaylists signatures
- Frontend handleImportPlaylist now passes file array to ImportPlaylists
2026-02-28 13:31:29 -05:00
yonlu c34e4ad029 feat(quick-001): add multi-file picker and batch import support
- Update PlaylistFilePicker to return []string via OpenMultipleFilesDialog
- Add ImportPlaylists method for sequential batch import with partial success
2026-02-28 13:30:36 -05:00
yonlu 7f52dce296 docs(quick-001): plan multi-playlist import support 2026-02-28 13:18:49 -05:00
yonlu 6b4f0bf14b docs(phase-01): complete phase execution 2026-02-28 12:16:37 -05:00
yonlu cd07bdf37b docs(01-01): complete SetContext race fixes plan
- Created 01-01-SUMMARY.md with execution results
- Updated STATE.md with Phase 1 completion and decisions
- Updated ROADMAP.md progress (Phase 1: 1/1 plans complete)
- Marked CORR-01 through CORR-04 complete in REQUIREMENTS.md
2026-02-28 12:13:44 -05:00
yonlu 3abaeba3af fix(01-01): collapse Player.SetContext double-lock into single acquisition
- Replaced two separate Lock/Unlock pairs with single Lock/defer Unlock
- Both p.ctx assignment and p.restoreStateLocked() now run under same lock hold
- Prevents observing partially-initialized state between the two operations
2026-02-28 12:09:34 -05:00
yonlu daaa6b7f97 fix(01-01): add mutex protection to Queue, Library, and Playlist SetContext methods
- Queue.SetContext acquires existing q.mu before writing q.ctx
- Library struct gets new mu sync.Mutex; SetContext and SetRescanHooks acquire it
- Playlist Service struct gets new mu sync.Mutex; SetContext and SetFavoritesConfig acquire it
- Library and Playlist release lock before calling post-init methods (registerEventHandlers, migrateExistingPlaylists)
2026-02-28 12:09:14 -05:00
yonlu 4e2986e19c docs(01): create phase plan for concurrency race fixes 2026-02-27 14:50:27 -05:00
yonlu c086215533 docs: create roadmap (8 phases) 2026-02-27 13:16:41 -05:00
yonlu cdffd13395 docs: define v1 requirements 2026-02-27 11:16:03 -05:00
yonlu 98fd06d725 docs: complete project research for consolidation milestone 2026-02-27 10:53:44 -05:00
yonlu 1953b26957 chore: add project config 2026-02-27 10:20:07 -05:00
yonlu 94d42ada7b docs: initialize project 2026-02-27 10:20:03 -05:00
yonlu 572b7fb664 docs: map existing codebase 2026-02-26 16:58:25 -05:00