From 3b17f693464820cf75ca235a17d2b6247c839da2 Mon Sep 17 00:00:00 2001 From: tcely Date: Thu, 8 May 2025 07:55:06 -0400 Subject: [PATCH] Add `TaskScheduleView` --- tubesync/sync/views.py | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/tubesync/sync/views.py b/tubesync/sync/views.py index 73fb3ddd..5c3e2cff 100644 --- a/tubesync/sync/views.py +++ b/tubesync/sync/views.py @@ -24,7 +24,7 @@ from common.utils import append_uri_params from background_task.models import Task, CompletedTask from .models import Source, Media, MediaServer from .forms import (ValidateSourceForm, ConfirmDeleteSourceForm, RedownloadMediaForm, - SkipMediaForm, EnableMediaForm, ResetTasksForm, + SkipMediaForm, EnableMediaForm, ResetTasksForm, ScheduleTaskForm, ConfirmDeleteMediaServerForm) from .utils import validate_url, delete_file, multi_key_sort, mkdir_p from .tasks import (map_task_to_instance, get_error_message, @@ -1004,6 +1004,41 @@ class ResetTasks(FormView): return append_uri_params(url, {'message': 'reset'}) +class TaskScheduleView(FormView, SingleObjectMixin): + ''' + Confirm that the task should be re-scheduled. + ''' + + template_name = 'sync/task-schedule.html' + form_class = ScheduleTaskForm + model = Task + + def __init__(self, *args, **kwargs): + self.object = None + self.schedule = 0 + super().__init__(*args, **kwargs) + + def dispatch(self, request, *args, **kwargs): + self.object = self.get_object() + return super().dispatch(request, *args, **kwargs) + + def get_success_url(self): + return append_uri_params( + reverse_lazy('sync:tasks'), + dict( + message='scheduled', + pk=str(self.object.pk), + ), + ) + + def form_valid(self, form): + max_attempts = getattr(settings, 'MAX_ATTEMPTS', 15) + self.object.attempts = max_attempts // 2 + self.object.run_at = timezone.now() + timezone.timedelta(seconds=self.schedule) + self.object.save() + return super().form_valid(form) + + class MediaServersView(ListView): ''' List of media servers which have been added.