Merge branch 'meeb:main' into jellyfin-mediaserver

This commit is contained in:
tcely 2025-02-18 19:12:26 -05:00 committed by GitHub
commit be740dfb7f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 31 additions and 13 deletions

View File

@ -4,7 +4,7 @@ import json
import re
from xml.etree import ElementTree
from collections import OrderedDict
from datetime import datetime, timedelta
from datetime import datetime, timedelta, timezone as tz
from pathlib import Path
from django.conf import settings
from django.db import models
@ -559,6 +559,7 @@ class Media(models.Model):
**(_same_name('upload_date')),
**(_same_name('timestamp')),
**(_same_name('title')),
**(_same_name('fulltitle')),
**(_same_name('description')),
**(_same_name('duration')),
**(_same_name('formats')),
@ -1029,8 +1030,28 @@ class Media(models.Model):
@property
def metadata_title(self):
field = self.get_metadata_field('title')
return self.loaded_metadata.get(field, '').strip()
result = ''
for key in ('fulltitle', 'title'):
field = self.get_metadata_field(key)
value = self.loaded_metadata.get(field, '').strip()
if value:
result = value
break
return result
def metadata_published(self, timestamp=None):
published_dt = None
if timestamp is None:
field = self.get_metadata_field('timestamp')
timestamp = self.loaded_metadata.get(field, 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 compute published from timestamp for: {self.source} / {self} with "{e}"')
return published_dt
@property
def slugtitle(self):

View File

@ -10,7 +10,7 @@ import math
import uuid
from io import BytesIO
from hashlib import sha1
from datetime import datetime, timedelta, timezone as tz
from datetime import datetime, timedelta
from shutil import copyfile
from PIL import Image
from django.conf import settings
@ -217,15 +217,9 @@ def index_source_task(source_id):
media.duration = float(video.get(fields('duration', media), None) or 0) or None
media.title = str(video.get(fields('title', media), ''))[:200]
timestamp = video.get(fields('timestamp', media), 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
published_dt = media.metadata_published(timestamp)
if published_dt is not None:
media.published = published_dt
try:
media.save()
log.debug(f'Indexed media: {source} / {media}')
@ -386,6 +380,9 @@ def download_media_metadata(media_id):
# Media must have a valid upload date
if upload_date:
media.published = timezone.make_aware(upload_date)
published = media.metadata_published()
if published:
media.published = published
# Store title in DB so it's fast to access
if media.metadata_title: