Merge branch 'main' into patch-4

This commit is contained in:
tcely authored and GitHub committed 2025-07-05 04:06:49 -04:00
commit 4dce224ce1
3 files changed
+33 -34

No files matched your search

-1
View File
@@ -384,7 +384,6 @@ def media_pre_delete(sender, instance, **kwargs):
log.info(f'Deleting tasks for media: {instance.name}')
delete_task_by_media('sync.tasks.download_media', (str(instance.pk),))
delete_task_by_media('sync.tasks.download_media_metadata', (str(instance.pk),))
delete_task_by_media('sync.tasks.wait_for_media_premiere', (str(instance.pk),))
thumbnail_url = instance.thumbnail
if thumbnail_url:
delete_task_by_media(
+29 -31
View File
@@ -166,8 +166,8 @@ def get_media_metadata_task(media_id):
def get_media_thumbnail_task(media_id):
return get_first_task('sync.tasks.download_media_thumbnail', media_id)
def get_media_premiere_task(media_id):
return get_first_task('sync.tasks.wait_for_media_premiere', media_id)
def get_source_check_task(source_id):
return get_first_task('sync.tasks.save_all_media_for_source', source_id)
def get_source_index_task(source_id):
return get_first_task('sync.tasks.index_source_task', source_id)
@@ -231,28 +231,32 @@ def save_model(instance):
queue=Val(TaskQueue.DB),
)
def upcoming_media():
now = timezone.now()
next_hour = now + timezone.timedelta(hours=1, minutes=3)
previous_hour = now - timezone.timedelta(hours=1, minutes=1)
qs = Media.objects.filter(
manual_skip=True,
metadata__isnull=False,
published__isnull=False,
published__gte=previous_hour,
published__gte=(
# previous hour
timezone.now() - timezone.timedelta(hours=1, minutes=1),
),
)
for media in qs_gen(qs):
media_id = str(media.pk)
valid, hours = media.wait_for_premiere()
if valid:
save_model(media)
vn_fmt = _('Waiting for the premiere of "{}" at: {}')
wait_for_media_premiere(
str(media.pk),
run_at=next_hour,
verbose_name=vn_fmt.format(
task = get_first_task('sync.tasks.wait_for_media_premiere', media_id)
if not task:
# create a task to update
when = media.published + timezone.timedelta(minutes=1)
vn_fmt = _('Waiting for the premiere of "{}" at: {}')
vn = vn_fmt.format(
media.key,
media.published.isoformat(' ', 'seconds'),
),
)
)
wait_for_media_premiere(media_id, run_at=when, verbose_name=vn)
task = get_first_task('sync.tasks.wait_for_media_premiere', media_id)
if hours:
update_task_status(task, f'available in {hours} hours')
log.debug(f'upcoming_media: wait_for_premiere: {media.key}: {valid=} {hours=}')
@@ -1113,6 +1117,17 @@ from background_task.exceptions import InvalidTaskError # noqa: E402
from background_task.models import Task, CompletedTask # noqa: E402
@background(schedule=dict(priority=0, run_at=60), queue=Val(TaskQueue.NET), remove_existing_tasks=True)
def wait_for_media_premiere(media_id):
try:
media = Media.objects.get(pk=media_id)
except Media.DoesNotExist as e:
raise InvalidTaskError(_('no such media')) from e
else:
t = media.wait_for_premiere()
if t[0]:
save_model(media)
@background(schedule=dict(priority=0, run_at=0), queue=Val(TaskQueue.NET), remove_existing_tasks=False)
def wait_for_database_queue():
from common.huey import h_q_tuple
@@ -1175,23 +1190,6 @@ def download_media(media_id, override=False):
raise InvalidTaskError(str(e)) from e
@background(schedule=dict(priority=0, run_at=60), queue=Val(TaskQueue.NET), remove_existing_tasks=True)
def wait_for_media_premiere(media_id):
try:
media = Media.objects.get(pk=media_id)
except Media.DoesNotExist as e:
raise InvalidTaskError(_('no such media')) from e
else:
valid, hours = media.wait_for_premiere()
if not valid:
return
if hours:
task = get_media_premiere_task(media_id)
update_task_status(task, f'available in {hours} hours')
save_model(media)
@background(schedule=dict(priority=1, run_at=90), queue=Val(TaskQueue.FS), remove_existing_tasks=False)
def delete_all_media_for_source(source_id, source_name, source_directory):
source = None
+4 -2
View File
@@ -50,14 +50,16 @@
<div class="collection">
{% for task in errors %}
<div class="collection-item error-text">
<a href="{% url task.url pk=task.instance.pk %}" class="error-text">
<a href="{%if task.instance.pk %}{% url task.url pk=task.instance.pk %}{% else %}#{{ task.task_id }}{% endif %}" class="error-text">
<i class="fas fa-exclamation-triangle"></i> <strong>{{ task }}</strong>, attempted {{ task.attempts }} time{{ task.attempts|pluralize }}<br>
Error: &quot;{{ task.error_message }}&quot;<br>
</a>
<i class="fas fa-history"></i> Task will be retried at <strong>{{ task.scheduled_at|date:'Y-m-d H:i:s' }}</strong>
{% if '-' not in task.task_id %}
<a href="{% url 'sync:run-task' pk=task.task_id %}" class="error-text">
<i class="fas fa-undo"></i>
</a>
{% endif %}
</div>
{% empty %}
<span class="collection-item no-items"><i class="fas fa-info-circle"></i> There are no tasks with errors on this page.</span>
@@ -78,7 +80,7 @@
<div class="collection">
{% for task in scheduled %}
<div class="collection-item">
<a href="{% url task.url pk=task.instance.pk %}">
<a href="{%if task.instance.pk %}{% url task.url pk=task.instance.pk %}{% else %}#{{ task.task_id }}{% endif %}">
<i class="fas fa-hourglass-start"></i> <strong>{{ task }}</strong><br>
{% if task.instance.is_active and 'once' not in task.verbose_name %}Scheduled to run {{ task.instance.get_index_schedule_display|lower }}.<br>{% endif %}
<i class="far fa-clock"></i> Task will run {% if task.run_now %}<strong>immediately</strong>{% else %}at <strong>{{ task.scheduled_at|date:'Y-m-d H:i:s' }}</strong>