mirror of
https://github.com/meeb/tubesync.git
synced 2025-06-25 14:36:34 +00:00
Merge pull request #1010 from tcely/patch-3
Some checks failed
CI / info (push) Has been cancelled
CI / test (3.10) (push) Has been cancelled
CI / test (3.11) (push) Has been cancelled
CI / test (3.12) (push) Has been cancelled
CI / test (3.8) (push) Has been cancelled
CI / test (3.9) (push) Has been cancelled
CI / containerise (push) Has been cancelled
Some checks failed
CI / info (push) Has been cancelled
CI / test (3.10) (push) Has been cancelled
CI / test (3.11) (push) Has been cancelled
CI / test (3.12) (push) Has been cancelled
CI / test (3.8) (push) Has been cancelled
CI / test (3.9) (push) Has been cancelled
CI / containerise (push) Has been cancelled
Add `NoThumbnailException`
This commit is contained in:
commit
f4769efdb7
@ -22,6 +22,13 @@ class NoMetadataException(Exception):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class NoThumbnailException(Exception):
|
||||||
|
'''
|
||||||
|
Raised when a thumbnail was not found at the remote URL.
|
||||||
|
'''
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class DownloadFailedException(Exception):
|
class DownloadFailedException(Exception):
|
||||||
'''
|
'''
|
||||||
Raised when a downloaded media file is expected to be present, but doesn't
|
Raised when a downloaded media file is expected to be present, but doesn't
|
||||||
|
@ -8,6 +8,7 @@ import os
|
|||||||
import json
|
import json
|
||||||
import math
|
import math
|
||||||
import random
|
import random
|
||||||
|
import requests
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
@ -29,7 +30,8 @@ from background_task.exceptions import InvalidTaskError
|
|||||||
from background_task.models import Task, CompletedTask
|
from background_task.models import Task, CompletedTask
|
||||||
from common.logger import log
|
from common.logger import log
|
||||||
from common.errors import ( NoFormatException, NoMediaException,
|
from common.errors import ( NoFormatException, NoMediaException,
|
||||||
NoMetadataException, DownloadFailedException, )
|
NoMetadataException, NoThumbnailException,
|
||||||
|
DownloadFailedException, )
|
||||||
from common.utils import ( django_queryset_generator as qs_gen,
|
from common.utils import ( django_queryset_generator as qs_gen,
|
||||||
remove_enclosed, )
|
remove_enclosed, )
|
||||||
from .choices import Val, TaskQueue
|
from .choices import Val, TaskQueue
|
||||||
@ -352,8 +354,21 @@ def index_source_task(source_id):
|
|||||||
)
|
)
|
||||||
if new_media_instance:
|
if new_media_instance:
|
||||||
log.info(f'Indexed new media: {source} / {media}')
|
log.info(f'Indexed new media: {source} / {media}')
|
||||||
|
log.info(f'Scheduling tasks to download thumbnail for: {media.key}')
|
||||||
|
thumbnail_fmt = 'https://i.ytimg.com/vi/{}/{}default.jpg'
|
||||||
|
vn_fmt = _('Downloading {} thumbnail for: "{}": {}')
|
||||||
|
for prefix in ('hq', 'sd', 'maxres',):
|
||||||
|
thumbnail_url = thumbnail_fmt.format(
|
||||||
|
media.key,
|
||||||
|
prefix,
|
||||||
|
)
|
||||||
|
download_media_thumbnail(
|
||||||
|
str(media.pk),
|
||||||
|
thumbnail_url,
|
||||||
|
verbose_name=vn_fmt.format(prefix, media.key, media.name),
|
||||||
|
)
|
||||||
log.info(f'Scheduling task to download metadata for: {media.url}')
|
log.info(f'Scheduling task to download metadata for: {media.url}')
|
||||||
verbose_name = _('Downloading metadata for: {}: "{}"')
|
verbose_name = _('Downloading metadata for: "{}": {}')
|
||||||
download_media_metadata(
|
download_media_metadata(
|
||||||
str(media.pk),
|
str(media.pk),
|
||||||
verbose_name=verbose_name.format(media.key, media.name),
|
verbose_name=verbose_name.format(media.key, media.name),
|
||||||
@ -548,7 +563,15 @@ def download_media_thumbnail(media_id, url):
|
|||||||
return
|
return
|
||||||
width = getattr(settings, 'MEDIA_THUMBNAIL_WIDTH', 430)
|
width = getattr(settings, 'MEDIA_THUMBNAIL_WIDTH', 430)
|
||||||
height = getattr(settings, 'MEDIA_THUMBNAIL_HEIGHT', 240)
|
height = getattr(settings, 'MEDIA_THUMBNAIL_HEIGHT', 240)
|
||||||
i = get_remote_image(url)
|
try:
|
||||||
|
try:
|
||||||
|
i = get_remote_image(url)
|
||||||
|
except requests.HTTPError as re:
|
||||||
|
if 404 != re.response.status_code:
|
||||||
|
raise
|
||||||
|
raise NoThumbnailException(re.response.reason) from re
|
||||||
|
except NoThumbnailException as e:
|
||||||
|
raise InvalidTaskError(str(e.__cause__)) from e
|
||||||
if (i.width > width) and (i.height > height):
|
if (i.width > width) and (i.height > height):
|
||||||
log.info(f'Resizing {i.width}x{i.height} thumbnail to '
|
log.info(f'Resizing {i.width}x{i.height} thumbnail to '
|
||||||
f'{width}x{height}: {url}')
|
f'{width}x{height}: {url}')
|
||||||
|
@ -65,6 +65,7 @@ def get_remote_image(url, force_rgb=True):
|
|||||||
'(KHTML, like Gecko) Chrome/69.0.3497.64 Safari/537.36')
|
'(KHTML, like Gecko) Chrome/69.0.3497.64 Safari/537.36')
|
||||||
}
|
}
|
||||||
r = requests.get(url, headers=headers, stream=True, timeout=60)
|
r = requests.get(url, headers=headers, stream=True, timeout=60)
|
||||||
|
r.raise_for_status()
|
||||||
r.raw.decode_content = True
|
r.raw.decode_content = True
|
||||||
i = Image.open(r.raw)
|
i = Image.open(r.raw)
|
||||||
if force_rgb:
|
if force_rgb:
|
||||||
|
Loading…
Reference in New Issue
Block a user