diff --git a/src/ui/components/media_grid/film_grid.rs b/src/ui/components/media_grid/film_grid.rs index dfc2b71..ed3653d 100644 --- a/src/ui/components/media_grid/film_grid.rs +++ b/src/ui/components/media_grid/film_grid.rs @@ -98,11 +98,29 @@ impl Component for FilmGrid { } }); } - FilmGridInput::ApplyWatchedFilter(watched_filter) => { - self - .items - .broadcast(FilmGridItemInput::ApplyWatchedFilter(watched_filter)); - } + FilmGridInput::ApplyWatchedFilter(watched_filter) => match watched_filter { + Some(WatchedFilter::OnlyWatched) => { + for (index, item) in self.items.iter().enumerate() { + if item.film().watched { + self.items.send(index, FilmGridItemInput::SetVisible(true)); + } else { + self.items.send(index, FilmGridItemInput::SetVisible(false)); + } + } + } + Some(WatchedFilter::OnlyUnwatched) => { + for (index, item) in self.items.iter().enumerate() { + if item.film().watched { + self.items.send(index, FilmGridItemInput::SetVisible(false)); + } else { + self.items.send(index, FilmGridItemInput::SetVisible(true)); + } + } + } + None => { + self.items.broadcast(FilmGridItemInput::SetVisible(true)); + } + }, } } diff --git a/src/ui/components/media_grid_item/film_grid_item.rs b/src/ui/components/media_grid_item/film_grid_item.rs index 21df41a..d9c58cd 100644 --- a/src/ui/components/media_grid_item/film_grid_item.rs +++ b/src/ui/components/media_grid_item/film_grid_item.rs @@ -10,7 +10,6 @@ use relm4::{Component, ComponentController, Controller, FactorySender, RelmWidge use crate::persist::data_manager::{DataManager, DataManagerError}; use crate::ui::components::media_details::{FilmDetails, FilmDetailsOutput}; -use crate::ui::filtering::WatchedFilter; use crate::ui::widget_extensions::{AttrListExt, CondDialogExt, CondLabelExt}; use crate::views::overview::FilmOverview; @@ -20,7 +19,7 @@ pub struct FilmGridItem { film: FilmOverview, poster: Option, details: Option>, - watched_filter: Option, + visible: bool, } impl FilmGridItem { @@ -41,7 +40,7 @@ pub enum FilmGridItemInput { ItemClicked, DetailsClosed, WatchedStatusChanged(bool), - ApplyWatchedFilter(Option), + SetVisible(bool), } #[factory(pub)] @@ -57,11 +56,7 @@ impl FactoryComponent for FilmGridItem { root = FlowBoxChild { set_focusable: false, #[watch] - set_visible: match self.watched_filter { - Some(WatchedFilter::OnlyWatched) => self.film.watched, - Some(WatchedFilter::OnlyUnwatched) => !self.film.watched, - None => true, - }, + set_visible: self.visible, Button { connect_clicked => FilmGridItemInput::ItemClicked, @@ -169,7 +164,7 @@ impl FactoryComponent for FilmGridItem { film, poster: None, details: None, - watched_filter: None, + visible: true, } } @@ -195,8 +190,8 @@ impl FactoryComponent for FilmGridItem { FilmGridItemInput::WatchedStatusChanged(watched) => { self.film.watched = watched; } - FilmGridItemInput::ApplyWatchedFilter(watched_filter) => { - self.watched_filter = watched_filter; + FilmGridItemInput::SetVisible(visible) => { + self.visible = visible; } } }