Skip to content

Commit b55f68a

Browse files
update watchlist and my_shows page with untracked series
1 parent 0f5ad5a commit b55f68a

File tree

3 files changed

+76
-2
lines changed

3 files changed

+76
-2
lines changed

src/gui/troxide_widget.rs

+5
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,11 @@ pub mod series_poster {
8585
(poster, command)
8686
}
8787

88+
/// Returns the underlying series information that the poster holds if it exists
89+
pub fn get_series_information(&self) -> Option<&SeriesMainInformation> {
90+
self.series_information.as_ref()
91+
}
92+
8893
pub fn update(&mut self, message: Message) -> Command<Message> {
8994
match message {
9095
Message::ImageLoaded(_, image) => self.image = image,

src/gui/view/my_shows_view.rs

+70-2
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,17 @@ impl MyShowsTab {
156156
.upcoming_releases
157157
.iter()
158158
.enumerate()
159+
.filter(|(_, (poster, _))| {
160+
poster
161+
.get_series_information()
162+
.map(|series_info| {
163+
database::DB
164+
.get_series(series_info.id)
165+
.map(|series| series.is_tracked())
166+
.unwrap_or(false)
167+
})
168+
.unwrap_or(false)
169+
})
159170
.map(|(index, (series_poster, _))| {
160171
series_poster
161172
.release_series_posters_view(&self.upcoming_releases[index].1)
@@ -198,12 +209,23 @@ impl MyShowsTab {
198209
.line_spacing(5.0)
199210
.padding(5.0);
200211

212+
let untracked_shows = Wrap::with_elements(Self::filter_posters(
213+
&self.series,
214+
&upcoming_posters,
215+
MyShowsFilter::Untracked,
216+
))
217+
.spacing(5.0)
218+
.line_spacing(5.0)
219+
.padding(5.0);
220+
201221
let content = column!(
202222
upcoming_series_releases,
203223
text("Waiting For Release Date").size(20).style(GREEN_THEME),
204224
running_shows,
205225
text("Ended").size(20).style(RED_THEME),
206-
ended_shows
226+
ended_shows,
227+
text("Untracked").size(20),
228+
untracked_shows
207229
)
208230
.spacing(5.0)
209231
.width(Length::Fill)
@@ -233,6 +255,15 @@ impl MyShowsTab {
233255
.difference(&ended_posters)
234256
.map(|poster| *poster)
235257
.collect();
258+
259+
let untracked_posters: HashSet<_> =
260+
Self::get_untracked_posters(posters).into_iter().collect();
261+
262+
let diff: HashSet<_> = diff
263+
.difference(&untracked_posters)
264+
.into_iter()
265+
.map(|poster| *poster)
266+
.collect();
236267
/*
237268
The expected series posters obtained from the final set difference operation will have
238269
a valid message id that can be used in the posters field in the MyShows struct
@@ -246,7 +277,26 @@ impl MyShowsTab {
246277
.collect()
247278
}
248279
MyShowsFilter::Ended => {
249-
let posters = Self::get_ended_posters(posters);
280+
let ended_posters: HashSet<_> =
281+
Self::get_ended_posters(posters).into_iter().collect();
282+
let untracked_posters: HashSet<_> =
283+
Self::get_untracked_posters(posters).into_iter().collect();
284+
let ended_posters: Vec<_> = ended_posters
285+
.difference(&untracked_posters)
286+
.into_iter()
287+
.collect();
288+
289+
ended_posters
290+
.iter()
291+
.map(|poster| {
292+
poster.view().map(|message| {
293+
Message::SeriesPosterAction(message.get_id().unwrap_or(0), message)
294+
})
295+
})
296+
.collect()
297+
}
298+
MyShowsFilter::Untracked => {
299+
let posters = Self::get_untracked_posters(posters);
250300
posters
251301
.iter()
252302
.map(|poster| {
@@ -265,6 +315,23 @@ impl MyShowsTab {
265315
.filter(|poster| poster.get_status().unwrap() == SeriesStatus::Ended)
266316
.collect()
267317
}
318+
319+
fn get_untracked_posters(posters: &Vec<SeriesPoster>) -> Vec<&SeriesPoster> {
320+
posters
321+
.iter()
322+
.filter(|poster| {
323+
poster
324+
.get_series_information()
325+
.map(|series_info| {
326+
database::DB
327+
.get_series(series_info.id)
328+
.map(|series| !series.is_tracked())
329+
.unwrap_or(true)
330+
})
331+
.unwrap_or(true)
332+
})
333+
.collect()
334+
}
268335
}
269336

270337
/// Returns series info and their associated release episode and time
@@ -321,5 +388,6 @@ impl Tab for MyShowsTab {
321388

322389
enum MyShowsFilter {
323390
WaitingRelease,
391+
Untracked,
324392
Ended,
325393
}

src/gui/view/watchlist_view.rs

+1
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ async fn get_pending_series_ids() -> Vec<u32> {
119119

120120
ids.iter()
121121
.zip(episodes_lists.iter())
122+
.filter(|((_, series), _)| series.is_tracked())
122123
.filter(|((_, series), episode_list)| has_pending_episodes(series, episode_list))
123124
.map(|((id, _), _)| id.parse::<u32>().expect("could not parse series id"))
124125
.collect()

0 commit comments

Comments
 (0)