Overview
TheCatalogWithFilters model manages catalog browsing with support for filtering by type, catalog, and extra properties. It handles pagination and provides a selectable interface for users to refine their catalog queries.
This is a generic model that works with different content types through the CatalogResourceAdapter trait.
Structure
Fields
Currently selected catalog request with filters applied
Available filter options for types, catalogs, and extra properties
Paginated catalog pages. Each page is a
ResourceLoadable<Vec<T>>Selected
Represents the currently selected catalog filters:The resource request containing base URL, resource path, type, and extra filters
Selectable
Provides available filter options:Available content types (movie, series, etc.) with selection state
Available catalogs from addons with selection state
Additional filter options (genre, year, etc.) with values
Request for loading the next page, if available
SelectableType
Content type identifier (e.g., “movie”, “series”)
Whether this type is currently selected
Request to apply this type filter
SelectableCatalog
Catalog name from addon manifest
Whether this catalog is currently selected
Request to switch to this catalog
SelectableExtra
Extra property name (e.g., “genre”, “year”)
Whether this extra is required by the addon
Available values for this extra property
CatalogResourceAdapter
The generic typeT must implement this trait:
Built-in Implementations
- MetaItemPreview: For browsing meta catalogs (movies, series)
- Resource:
"catalog" - Priority:
SelectablePriority::Type
- Resource:
- DescriptorPreview: For browsing addon catalogs
- Resource:
"addon_catalog" - Priority:
SelectablePriority::Catalog
- Resource:
- Descriptor: For browsing full addon descriptors
- Resource:
"addon_catalog" - Priority:
SelectablePriority::Catalog
- Resource:
Constructor
new()
Creates a new catalog browser instance:Update Implementation
ImplementsUpdateWithCtx<E> to handle catalog operations:
Supported Messages
Action::Load::CatalogWithFilters
Action::Load::CatalogWithFilters
Loads a catalog with the specified filters:
- Updates selected request
- Clears existing catalog pages
- Loads first page of results
- Updates selectable options
src/models/catalog_with_filters.rs:157Action::Unload
Action::Unload
Clears all catalog data:
- Resets selected to None
- Clears catalog pages
- Updates selectable based on profile addons
src/models/catalog_with_filters.rs:178Action::CatalogWithFilters::LoadNextPage
Action::CatalogWithFilters::LoadNextPage
Loads the next page of catalog results:
- Uses
next_pagerequest from selectable - Appends results to existing catalog
- Updates pagination state
src/models/catalog_with_filters.rs:191Internal::ResourceRequestResult
Internal::ResourceRequestResult
Processes resource responses:
- Updates corresponding catalog page
- Marks page as Ready or Err
- Refreshes selectable options
src/models/catalog_with_filters.rs:210Internal::ProfileChanged
Internal::ProfileChanged
Updates selectable options when profile changes (addons added/removed)Source:
src/models/catalog_with_filters.rs:230Filtering Logic
Type Selection
WhenSelectablePriority::Type is used:
- Types are derived from all addon catalogs
- Types are sorted by predefined priorities (movie, series, etc.)
- Selecting a type filters available catalogs
Catalog Selection
WhenSelectablePriority::Catalog is used:
- Catalogs are shown first
- Selecting a catalog filters available types
- Only types available in selected catalog are shown
Extra Filters
Extra properties from addon manifests:- Required extras must have a value selected
- Optional extras can be None
- Each option includes a request with that filter applied
- Skip extra is handled specially for pagination
Pagination
Pagination uses theskip extra property:
Usage Example
State Management
The model automatically removes the
skip extra from selected requests to ensure consistent filter state.See Also
- ResourceRequest - Resource request structure
- MetaItemPreview - Meta item preview type
- Profile - User profile with addons
