diff --git a/README.md b/README.md index c96670e82..47798bd4a 100644 --- a/README.md +++ b/README.md @@ -1378,7 +1378,22 @@ sources: new_name: 1. DE$1 ``` -### 2.5.2.8 `watch` +### 2.2.2.8 `favourites` +Allows you to explicitly add items to a favorite group based on a filter. This is processed after mapping and resolution. + +- `group`: The name of the group to add the favorite items to. +- `filter`: A filter statement to select the original items. +- `match_as_ascii`: _optional_ (default `false`). If `true`, the filter matching will be case-insensitive and normalized (e.g., "Cinema" matches "Cinéma"). + +Example: +```yaml +favourites: + - group: "My Favourites" + filter: 'Name ~ "Cinema"' + match_as_ascii: true +``` + +### 2.2.2.9 `watch` For each target with a *unique name*, you can define watched groups. It is a list of regular expression matching final group names from this target playlist. Final means in this case: the name in the resulting playlist after applying all steps diff --git a/backend/src/model/config/favourites.rs b/backend/src/model/config/favourites.rs index d6467de9a..aa47343d0 100644 --- a/backend/src/model/config/favourites.rs +++ b/backend/src/model/config/favourites.rs @@ -7,6 +7,7 @@ use shared::model::{ConfigFavouritesDto, ItemField}; pub struct ConfigFavourites { pub group: String, pub filter: Filter, + pub match_as_ascii: bool, } impl ConfigFavourites { @@ -28,6 +29,7 @@ impl From<&ConfigFavouritesDto> for ConfigFavourites { Self { group: dto.group.clone(), filter: dto.t_filter.as_ref().map_or_else(Self::default_filter, Clone::clone), + match_as_ascii: dto.match_as_ascii, } } } @@ -37,6 +39,7 @@ impl From<&ConfigFavourites> for ConfigFavouritesDto { Self { group: instance.group.clone(), filter: instance.filter.to_string(), + match_as_ascii: instance.match_as_ascii, t_filter: Some(instance.filter.clone()), } } diff --git a/backend/src/processing/processor/playlist.rs b/backend/src/processing/processor/playlist.rs index 2596b65e5..ce9c61fa5 100644 --- a/backend/src/processing/processor/playlist.rs +++ b/backend/src/processing/processor/playlist.rs @@ -572,7 +572,7 @@ pub fn process_favourites(playlist: &mut Vec, favourites_cfg: Opt continue; } for fav in favourites { - if is_valid(pli, &fav.filter, false) { + if is_valid(pli, &fav.filter, fav.match_as_ascii) { let mut channel = pli.clone(); channel.header.group.clone_from(&fav.group); // Update UUID to be an alias of the original diff --git a/shared/src/model/config/favourites.rs b/shared/src/model/config/favourites.rs index 677246c90..141e74088 100644 --- a/shared/src/model/config/favourites.rs +++ b/shared/src/model/config/favourites.rs @@ -8,6 +8,8 @@ pub struct ConfigFavouritesDto { pub group: String, #[serde(default)] pub filter: String, + #[serde(default)] + pub match_as_ascii: bool, #[serde(skip)] pub t_filter: Option, }