|
1 | | -import logging |
2 | | -import shutil |
3 | 1 | from datetime import datetime |
| 2 | +from logging import Logger, getLogger |
4 | 3 | from pathlib import Path |
5 | 4 |
|
| 5 | +from frikanalen_django_api_client.models import FormatEnum |
| 6 | + |
6 | 7 | from app.django_api.service import DjangoApiService |
7 | 8 | from app.ffprobe import do_probe |
8 | | -from app.tus_hook.hook_server import build_client |
9 | 9 |
|
10 | | -from .generate_assets import make_secondaries |
| 10 | +from .archive import Archive |
| 11 | +from .converter import Converter |
11 | 12 | from .logging.video_id_filter import VideoIdFilter |
12 | | -from .util.file_name_utils import original_file_location |
13 | 13 |
|
14 | | -django_api = DjangoApiService(build_client()) |
15 | | -archive_base_path = Path("/tmp/archive") |
| 14 | +DESIRED_FORMATS = (FormatEnum("large_thumb"),) |
| 15 | + |
16 | 16 |
|
| 17 | +class Ingester: |
| 18 | + video_id: str |
| 19 | + django_api: DjangoApiService |
| 20 | + converter_service: Converter |
| 21 | + archive: Archive |
| 22 | + logger: Logger |
17 | 23 |
|
18 | | -async def ingest(video_id: str, original_file: Path): |
19 | | - logger = logging.getLogger(__name__) |
20 | | - logger.addFilter(VideoIdFilter(video_id)) |
21 | | - logger.info("Ingesting file with video_id: %s, original_file: %s", video_id, original_file) |
| 24 | + def __init__(self, video_id: str, django_api: DjangoApiService, converter_service: Converter, archive: Archive): |
| 25 | + self.logger = getLogger(__name__) |
| 26 | + self.logger.addFilter(VideoIdFilter(video_id)) |
| 27 | + self.video_id = video_id |
| 28 | + self.django_api = django_api |
| 29 | + self.converter_service = converter_service |
| 30 | + self.archive = archive |
22 | 31 |
|
23 | | - original_file_destination = archive_base_path / original_file_location(video_id, original_file) |
24 | | - assert not original_file_destination.exists(), f"File {original_file_destination} already exists" |
25 | | - logger.info("Destination: %s", original_file_destination) |
| 32 | + async def ingest(self, original_file: Path): |
| 33 | + self.logger.info("Ingesting file with video_id: %s, original_file: %s", self.video_id, original_file) |
26 | 34 |
|
27 | | - logger.info("Creating destination folder: %s", original_file_destination.parent) |
28 | | - original_file_destination.parent.mkdir(exist_ok=True) |
| 35 | + await self.django_api.set_video_uploaded_time(self.video_id, datetime.now()) |
| 36 | + metadata = await do_probe(original_file) |
| 37 | + self.logger.info("Got metadata, %d streams", len(metadata.streams)) |
29 | 38 |
|
30 | | - await django_api.set_video_uploaded_time(video_id, datetime.now()) |
31 | | - metadata = await do_probe(original_file) |
32 | | - logger.info("Got metadata: %s", metadata) |
| 39 | + original_file_destination = self.archive.move_original_to_archive(self.video_id, original_file) |
| 40 | + await self.django_api.set_video_duration(self.video_id, metadata.format.duration) |
33 | 41 |
|
34 | | - logger.info("Moving from %s to %s", original_file, original_file_destination) |
35 | | - shutil.move(original_file, original_file_destination) |
| 42 | + for format_name in DESIRED_FORMATS: |
| 43 | + self.logger.info("Processing: %s", original_file_destination) |
| 44 | + await self.converter_service.process_format( |
| 45 | + original_file_destination, format_name, metadata, int(self.video_id) |
| 46 | + ) |
| 47 | + self.logger.info("Finished processing: %s", self.video_id) |
36 | 48 |
|
37 | | - await django_api.set_video_duration(video_id, metadata["format"]["duration"]) |
38 | | - await make_secondaries(video_id, original_file_destination) |
39 | | - await django_api.set_video_proper_import(video_id, True) |
| 49 | + await self.django_api.set_video_proper_import(self.video_id, True) |
0 commit comments