Save duration, timestamp, and title to Media instances

This commit is contained in:
tcely 2025-02-09 19:32:13 -05:00 committed by GitHub
parent 6390f5a1c3
commit 83dc375810
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -10,7 +10,7 @@ import math
import uuid import uuid
from io import BytesIO from io import BytesIO
from hashlib import sha1 from hashlib import sha1
from datetime import timedelta, datetime from datetime import datetime, timedelta, timezone as tz
from shutil import copyfile from shutil import copyfile
from PIL import Image from PIL import Image
from django.conf import settings from django.conf import settings
@ -202,6 +202,7 @@ def index_source_task(source_id):
source.last_crawl = timezone.now() source.last_crawl = timezone.now()
source.save() source.save()
log.info(f'Found {len(videos)} media items for source: {source}') 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: for video in videos:
# Create or update each video as a Media object # Create or update each video as a Media object
key = video.get(source.key_field, None) key = video.get(source.key_field, None)
@ -213,6 +214,18 @@ def index_source_task(source_id):
except Media.DoesNotExist: except Media.DoesNotExist:
media = Media(key=key) media = Media(key=key)
media.source = source 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: try:
media.save() media.save()
log.debug(f'Indexed media: {source} / {media}') log.debug(f'Indexed media: {source} / {media}')