diff --git a/server/entertainment_decider/extractors/collection/base.py b/server/entertainment_decider/extractors/collection/base.py index 1c8495a..0b3f04d 100644 --- a/server/entertainment_decider/extractors/collection/base.py +++ b/server/entertainment_decider/extractors/collection/base.py @@ -8,6 +8,7 @@ from typing import ( Callable, Mapping, Optional, + Set, TypeVar, ) @@ -130,6 +131,17 @@ class CollectionExtractor(GeneralExtractor[MediaCollection, T]): ) return element + def _remove_older_episodes( + self, + collection: MediaCollection, + current_set: Set[MediaElement], + ) -> None: + all_set = {link.element for link in collection.media_links} + missing_set = all_set - current_set + for elem in missing_set: + if not elem.skip_over: + elem.delete() + def _sort_episodes(self, coll: MediaCollection) -> None: sorting_methods: Mapping[int, Callable[[MediaCollectionLink], Any]] = { 1: lambda l: l.element.release_date, diff --git a/server/entertainment_decider/extractors/collection/tvmaze.py b/server/entertainment_decider/extractors/collection/tvmaze.py index 525c474..e042745 100644 --- a/server/entertainment_decider/extractors/collection/tvmaze.py +++ b/server/entertainment_decider/extractors/collection/tvmaze.py @@ -137,7 +137,7 @@ class TvmazeCollectionExtractor(CollectionExtractor[TvmazeShowEmbedded]): for episode in data["_embedded"]["episodes"]: if episode["airstamp"] is not None: add_embedding(episode, "show", data) - self._inject_episode( + elem = self._inject_episode( collection=object, data=ExtractedDataOnline[TvmazeEpisodeEmbedded]( extractor_name="tvmaze", @@ -148,4 +148,10 @@ class TvmazeCollectionExtractor(CollectionExtractor[TvmazeShowEmbedded]): season=episode["season"], episode=episode["number"], ) + if elem is not None: + elem_set.add(elem) + self._remove_older_episodes( + collection=object, + current_set=elem_set, + ) return ChangedReport.ChangedSome # TODO improve