Skip to content

feat: Add Collections (BoxSets) favoriting support#491

Merged
RadicalMuffinMan merged 1 commit into
Moonfin-Client:mainfrom
mattsigal:feature/favorite-collections
Jun 11, 2026
Merged

feat: Add Collections (BoxSets) favoriting support#491
RadicalMuffinMan merged 1 commit into
Moonfin-Client:mainfrom
mattsigal:feature/favorite-collections

Conversation

@mattsigal

@mattsigal mattsigal commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Pull Request

Summary

Implements comprehensive Collections (BoxSets) favoriting, playback controls, and download support. This feature adds a full Series-style Action Buttons row to the Collections detail page (Play/Resume, Shuffle, Restart, Cast, Mark Watched, Favorite, Playlist, Download All, Delete, and Edit Metadata), implements collection-wide Play/Resume logic (starting at the first item, resuming partially watched items, or starting the next unwatched item), and supports offline collection downloading.

Related Issues

Link related issues or tickets separated by commas.

Discord request.

  • Closes #
  • Fixes #
  • Related to #

Type of Change

  • Bug fix
  • New feature
  • Refactor
  • Performance improvement
  • UI/UX update
  • Documentation update
  • Build/CI change
  • Other (describe):

Changes Made

  • Preference Constants (lib/preference/preference_constants.dart):
    • Added collection case to FavoriteTypeFilter enum.
    • Added string/ID deserialization support for 'favorites_collections'.
  • Favorites ViewModel (lib/data/viewmodels/favorites_view_model.dart):
    • Added FavoriteTypeFilter.collection to rowTypes static list to retrieve and populate Collections rows on the Favorites screen.
  • Context Actions (lib/ui/widgets/focus/context_action.dart):
    • Added 'BoxSet' to isMediaType check so context menu actions ("Add to Favorites", "Mark as Watched", etc.) are loaded for Collections.
  • Download Service (lib/data/services/download_service.dart):
    • Implemented downloadBoxSet and _getAllPlayableItemsForBoxSet to recursively query and download playable items within a Collection.
  • Details Screen (lib/ui/screens/detail/item_detail_screen.dart):
    • Updated _isDownloadable to support BoxSet.
    • Added 'BoxSet' case in _startDownload to invoke service.downloadBoxSet and set up _DownloadButton / quality picker estimation models.
    • Added the full _ActionButtons widget row to _buildBoxSetContent() centered above the metadata section.
    • Implemented play/resume labels in _ActionButtonsState.build(): labels "Play" if all items are watched or none are watched, and "Resume" if there is partial progress.
    • Implemented collection-wide playback in _playInternal() case 'BoxSet': plays all recursive items starting from the partially played element (at its saved position) or the first unwatched element.
    • Configured collection-wide shuffle and restart actions.
    • Adjusted remote focus navigation targets to connect to the action buttons row.

Platform

  • Android
  • iOS
  • macOS
  • Windows
  • Linux
  • All / Shared code

Testing

Describe how this change was tested.

  • Tested on emulator / simulator
  • Tested on physical device
  • Manual testing completed -- built on Windows and AndroidTV
  • Not tested (explain why):

Test Steps

  1. Built the Windows application: Moonfin_Windows_v2.1.1.exe.
  2. Verified that long-pressing a Collection on the Home Screen displays the context menu with "Add to Favorites" and "Mark as Watched".
  3. Confirmed that the Collections details page shows the centered action buttons row (Play/Resume, Shuffle, Restart, etc.) above the full-screen-width Studio container.
  4. Confirmed that clicking "Play" starts from the first item, and "Resume" resumes from the partially played element at its saved position (or starts the next unwatched element).
  5. Confirmed that the "Download All" option triggers recursive download of collection items in the background.
  6. Confirmed that favorited collections are listed on the Favorites screen in a new "Collections" row and in the Favorites Library grid view.

Screenshots (if applicable)

2026-06-10_23-41-12_moonfin 2026-06-10_23-51-49_moonfin 2026-06-10_23-52-16_moonfin 2026-06-10_23-55-49_moonfin

Checklist

  • Code builds successfully
  • Code follows project style and conventions
  • No unnecessary commented-out code
  • No new warnings introduced

- Enable long-press context actions on Home/Library pages for Collections.
- Add details page heart icon button (Favorite toggle) next to Studio info.
- Add dedicated 'Collections' row on the Favorites screen (Home view) and support Collections in grid Library view.
@RadicalMuffinMan RadicalMuffinMan merged commit 44ad571 into Moonfin-Client:main Jun 11, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants