From ce9eabd5d3ad2dcb55d74155447f9bf12ec67088 Mon Sep 17 00:00:00 2001 From: tcely Date: Fri, 4 Jul 2025 13:50:00 -0400 Subject: [PATCH 1/4] Make `wait_for_media_premiere` a placeholder that might never execute --- tubesync/sync/tasks.py | 50 +++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 27 deletions(-) diff --git a/tubesync/sync/tasks.py b/tubesync/sync/tasks.py index d64a2471..9ceaeeab 100644 --- a/tubesync/sync/tasks.py +++ b/tubesync/sync/tasks.py @@ -170,9 +170,6 @@ 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) @@ -248,18 +245,23 @@ def upcoming_media(): published__gte=previous_hour, ) 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=}') @@ -1046,6 +1048,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=False) +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: + r = media.wait_for_premiere() + if r[0]: + save_model(media) + @background(schedule=dict(priority=0, run_at=0), queue=Val(TaskQueue.FS), remove_existing_tasks=False) def wait_for_database_queue(): from common.huey import h_q_tuple @@ -1187,23 +1200,6 @@ def save_all_media_for_source(source_id): res.get(blocking=True) -@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 From 04db38cf9e0d82174f06eb98edb57af1dd66b924 Mon Sep 17 00:00:00 2001 From: tcely Date: Fri, 4 Jul 2025 14:08:40 -0400 Subject: [PATCH 2/4] fixup: clean up the unused variable --- tubesync/sync/tasks.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tubesync/sync/tasks.py b/tubesync/sync/tasks.py index 9ceaeeab..8acfa15c 100644 --- a/tubesync/sync/tasks.py +++ b/tubesync/sync/tasks.py @@ -235,14 +235,13 @@ 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) From 7b9c30180ad22c23705be42e04568a83651eaa00 Mon Sep 17 00:00:00 2001 From: tcely Date: Fri, 4 Jul 2025 14:15:41 -0400 Subject: [PATCH 3/4] Do not try to delete `wait_for_media_premiere` tasks If the media is missing, then it will remove itself when it eventually executes. This task is mostly informational anyway. --- tubesync/sync/signals.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tubesync/sync/signals.py b/tubesync/sync/signals.py index f42c2c7c..cd9a0da7 100644 --- a/tubesync/sync/signals.py +++ b/tubesync/sync/signals.py @@ -381,7 +381,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( From 100a31650c847e0fc3aeccdfece4609185bb67d2 Mon Sep 17 00:00:00 2001 From: tcely Date: Fri, 4 Jul 2025 18:20:25 -0400 Subject: [PATCH 4/4] Accept unmapped tasks in all the sections --- tubesync/sync/templates/sync/tasks.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tubesync/sync/templates/sync/tasks.html b/tubesync/sync/templates/sync/tasks.html index 74997164..7f284c0b 100644 --- a/tubesync/sync/templates/sync/tasks.html +++ b/tubesync/sync/templates/sync/tasks.html @@ -50,14 +50,16 @@