@@ -156,6 +156,17 @@ impl MyShowsTab {
156
156
. upcoming_releases
157
157
. iter ( )
158
158
. 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
+ } )
159
170
. map ( |( index, ( series_poster, _) ) | {
160
171
series_poster
161
172
. release_series_posters_view ( & self . upcoming_releases [ index] . 1 )
@@ -198,12 +209,23 @@ impl MyShowsTab {
198
209
. line_spacing ( 5.0 )
199
210
. padding ( 5.0 ) ;
200
211
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
+
201
221
let content = column ! (
202
222
upcoming_series_releases,
203
223
text( "Waiting For Release Date" ) . size( 20 ) . style( GREEN_THEME ) ,
204
224
running_shows,
205
225
text( "Ended" ) . size( 20 ) . style( RED_THEME ) ,
206
- ended_shows
226
+ ended_shows,
227
+ text( "Untracked" ) . size( 20 ) ,
228
+ untracked_shows
207
229
)
208
230
. spacing ( 5.0 )
209
231
. width ( Length :: Fill )
@@ -233,6 +255,15 @@ impl MyShowsTab {
233
255
. difference ( & ended_posters)
234
256
. map ( |poster| * poster)
235
257
. 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 ( ) ;
236
267
/*
237
268
The expected series posters obtained from the final set difference operation will have
238
269
a valid message id that can be used in the posters field in the MyShows struct
@@ -246,7 +277,26 @@ impl MyShowsTab {
246
277
. collect ( )
247
278
}
248
279
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) ;
250
300
posters
251
301
. iter ( )
252
302
. map ( |poster| {
@@ -265,6 +315,23 @@ impl MyShowsTab {
265
315
. filter ( |poster| poster. get_status ( ) . unwrap ( ) == SeriesStatus :: Ended )
266
316
. collect ( )
267
317
}
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
+ }
268
335
}
269
336
270
337
/// Returns series info and their associated release episode and time
@@ -321,5 +388,6 @@ impl Tab for MyShowsTab {
321
388
322
389
enum MyShowsFilter {
323
390
WaitingRelease ,
391
+ Untracked ,
324
392
Ended ,
325
393
}
0 commit comments