extractors/collection: Extract _add_episode into base

master
Felix Stupp 3 years ago
parent 629e125838
commit a51aa48941
Signed by: zocker
GPG Key ID: 93E1BD26F6B02FB7

@ -3,8 +3,9 @@ from __future__ import annotations
import logging
from typing import Optional, TypeVar
from ...models import CollectionUriMapping, MediaCollection
from ..generic import ExtractedData, GeneralExtractor
from ...models import CollectionUriMapping, MediaCollection, MediaElement
from ..generic import ExtractedData, ExtractionError, GeneralExtractor
from ..media import media_extract_uri
T = TypeVar("T")
@ -40,3 +41,17 @@ class CollectionExtractor(GeneralExtractor[MediaCollection, T]):
if collection:
self.__configure_collection(collection)
return collection
def _add_episode(self, collection: MediaCollection, uri: str, season: int = 0, episode: int = 0) -> Optional[MediaElement]:
logging.debug(f"Add to collection {collection.title!r} media {uri!r} (Season {season}, Episode {episode})")
try:
element = media_extract_uri(uri)
except ExtractionError:
logging.warning(f"Failed while extracting media {uri!r}", exc_info=True)
return None
collection.add_episode(
media = element,
season = season,
episode = episode,
)
return element

@ -8,8 +8,7 @@ from pony import orm # TODO remove
from ...models import MediaCollection
from ..all.tt_rss import HeadlineList, TtRssConnectionParameter, TtRssUri
from ..generic import ExtractedData, ExtractionError, SuitableLevel
from ..media import media_extract_uri
from ..generic import ExtractedData, SuitableLevel
from .base import CollectionExtractor
@ -76,11 +75,10 @@ class TtRssCollectionExtractor(CollectionExtractor[HeadlineList]):
object.title = object.uri
logging.debug(f"Got {len(data)} headlines")
for headline in data:
logging.debug(f"Add to collection {headline.url!r}")
try:
object.add_episode(media_extract_uri(headline.url))
orm.commit()
except ExtractionError:
logging.warning(f"Failed while extracting media {headline.url!r}", exc_info=True)
self._add_episode(
collection = object,
uri = headline.url
)
orm.commit()
if object.watch_in_order_auto:
object.watch_in_order = False # no order available

@ -9,8 +9,7 @@ from pony import orm # TODO remove
import youtubesearchpython
from ...models import MediaCollection
from ..generic import ExtractedData, ExtractionError, SuitableLevel
from ..media import media_extract_uri
from ..generic import ExtractedData, SuitableLevel
from .base import CollectionExtractor
@ -89,7 +88,6 @@ class YouTubeCollectionExtractor(CollectionExtractor[Dict]):
video_list = data["videos"]
if object.watch_in_order_auto:
object.watch_in_order = not is_channel
len_video_list = len(video_list)
if is_channel:
video_list = reversed(video_list)
for index, video in enumerate(video_list):
@ -98,11 +96,11 @@ class YouTubeCollectionExtractor(CollectionExtractor[Dict]):
f"https://youtube.com/watch?v={video['id']}",
f"https://youtu.be/{video['id']}",
]
logging.debug(f"[youtube] Add to collection {object.title!r} video {video_url!r} ({index+1} of {len_video_list})")
try:
element = media_extract_uri(video_url)
element = self._add_episode(
collection = object,
uri = video_url,
episode = index + 1,
)
if element:
element.add_uris(other_urls)
object.add_episode(element, episode=index+1)
orm.commit() # so progress is stored
except ExtractionError:
logging.warning(f"Failed while extracting media {video_url!r}", exc_info=True)

Loading…
Cancel
Save