diff --git a/tubesync/sync/tasks.py b/tubesync/sync/tasks.py index a5e3f135..96ecec75 100644 --- a/tubesync/sync/tasks.py +++ b/tubesync/sync/tasks.py @@ -10,7 +10,7 @@ import math import uuid from io import BytesIO from hashlib import sha1 -from datetime import timedelta, datetime +from datetime import datetime, timedelta, timezone as tz from shutil import copyfile from PIL import Image from django.conf import settings @@ -202,6 +202,7 @@ def index_source_task(source_id): source.last_crawl = timezone.now() source.save() log.info(f'Found {len(videos)} media items for source: {source}') + fields = lambda x, t=source.source_type: Media.METADATA_FIELDS.get(x, dict()).get(t, x) for video in videos: # Create or update each video as a Media object key = video.get(source.key_field, None) @@ -213,6 +214,18 @@ def index_source_task(source_id): except Media.DoesNotExist: media = Media(key=key) media.source = source + media.duration = float(video.get(fields('duration'), 0)) or None + media.title = str(video.get(fields('title'), '')) + timestamp = video.get(fields('timestamp'), None) + if timestamp is not None: + try: + timestamp_float = float(timestamp) + posix_epoch = datetime(1970, 1, 1, tzinfo=tz.utc) + published_dt = posix_epoch + timedelta(seconds=timestamp_float) + except Exception as e: + log.warn(f'Could not set published for: {source} / {media} with "{e}"') + else: + media.published = published_dt try: media.save() log.debug(f'Indexed media: {source} / {media}')