Move watched filtering logic to FilmGrid
This commit is contained in:
parent
311d78bcc8
commit
23e8f1e949
2 changed files with 29 additions and 16 deletions
|
|
@ -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));
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Texture>,
|
||||
details: Option<Controller<FilmDetails>>,
|
||||
watched_filter: Option<WatchedFilter>,
|
||||
visible: bool,
|
||||
}
|
||||
|
||||
impl FilmGridItem {
|
||||
|
|
@ -41,7 +40,7 @@ pub enum FilmGridItemInput {
|
|||
ItemClicked,
|
||||
DetailsClosed,
|
||||
WatchedStatusChanged(bool),
|
||||
ApplyWatchedFilter(Option<WatchedFilter>),
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue