Skip to content

Implement dynamic discovery rows architecture#66

Closed
CollotsSpot wants to merge 5 commits intomasterfrom
feat/dynamic-discovery-rows
Closed

Implement dynamic discovery rows architecture#66
CollotsSpot wants to merge 5 commits intomasterfrom
feat/dynamic-discovery-rows

Conversation

@CollotsSpot
Copy link
Owner

Instead of rendering multiple discovery shelves in a single MixesRow, each discovery folder now becomes its own row in the home screen, following the standard 237px height pattern.

Changes:

  • Add RecommendationFolder model with polymorphic JSON parsing
  • Add DiscoveryRow widget for displaying a single discovery folder
  • Add discovery folders to MusicAssistantProvider (getDiscoveryFoldersWithCache)
  • Add discovery folders to CacheService and MusicAssistantAPI
  • Add "Discovery Mixes" toggle to settings (default off)
  • Update home screen to dynamically register discovery rows

This fixes the architectural issue where MixesRow broke the home screen's assumption that each row entry renders exactly one row with a fixed height.

CollotsSpot and others added 5 commits February 5, 2026 15:04
Instead of rendering multiple discovery shelves in a single MixesRow,
each discovery folder now becomes its own row in the home screen,
following the standard 237px height pattern.

Changes:
- Add RecommendationFolder model with polymorphic JSON parsing
- Add DiscoveryRow widget for displaying a single discovery folder
- Add discovery folders to MusicAssistantProvider (getDiscoveryFoldersWithCache)
- Add discovery folders to CacheService and MusicAssistantAPI
- Add "Discovery Mixes" toggle to settings (default off)
- Update home screen to dynamically register discovery rows

This fixes the architectural issue where MixesRow broke the home
screen's assumption that each row entry renders exactly one row
with a fixed height.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove references to non-existent RadioStation, Podcast, PodcastEpisode classes
- Fix MediaType.podcastEpisode enum value (camelCase, not snake_case)
- Use MediaItem base class for radio, podcast, podcast_episode types
…rror

- Add import for RecommendationFolder model
- Wrap firstWhere in try-catch to handle missing folders gracefully
- Fixes the grey screen issue when discovery toggle is enabled

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
DiscoveryRow was using 52px for textAreaHeight vs AlbumRow's 44px,
causing smaller artwork and different row appearance.
Changed to 44px to match other rows.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…efresh

- Move discovery mixes toggle from standalone to draggable row list in settings
- Add empty state widget when no home screen rows are enabled
- Fix pull-to-refresh not working when screen is empty by using SizedBox.expand
- Add localization strings for empty state hint

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@CollotsSpot
Copy link
Owner Author

Closing to recreate after fixing CI issues

@CollotsSpot CollotsSpot closed this Feb 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant