diff options
| author | Bobby <[email protected]> | 2026-02-03 15:25:16 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-02-03 15:25:16 +0530 |
| commit | f0cf231742b5c35d44408575fd857ed03884bab7 (patch) | |
| tree | 509acf68a0b972628cda6ecc43bed8ef3aa988c9 | |
| parent | 7aa298f90fb17bc915f15a90180feb8434d596a0 (diff) | |
| download | metachan-f0cf231742b5c35d44408575fd857ed03884bab7.tar.xz metachan-f0cf231742b5c35d44408575fd857ed03884bab7.zip | |
Add support for manual task triggering: update AnimeSync to run after AnimeFetch and enhance task status retrieval
| -rw-r--r-- | tasks/manager.go | 9 | ||||
| -rw-r--r-- | tasks/tasks.go | 7 | ||||
| -rw-r--r-- | types/task_manager.go | 9 |
3 files changed, 18 insertions, 7 deletions
diff --git a/tasks/manager.go b/tasks/manager.go index ef686dc..7470542 100644 --- a/tasks/manager.go +++ b/tasks/manager.go @@ -277,6 +277,15 @@ func (tm *TaskManager) GetTaskStatus(taskName string) *types.TaskStatus { if task.Interval > 0 { next := logEntry.ExecutedAt.Add(task.Interval) nextRun = &next + } else if task.TriggeredBy != "" { + // For manual tasks triggered by another task, use parent task's next run + var parentLog entities.TaskLog + if err := tm.Database.Where("task_name = ?", task.TriggeredBy).Order("executed_at desc").First(&parentLog).Error; err == nil { + if parentTask, exists := tm.Tasks[task.TriggeredBy]; exists && parentTask.Interval > 0 { + next := parentLog.ExecutedAt.Add(parentTask.Interval) + nextRun = &next + } + } } } else if err != gorm.ErrRecordNotFound { logger.Log(fmt.Sprintf("Error fetching task log for %s: %v", taskName, err), logger.LogOptions{ diff --git a/tasks/tasks.go b/tasks/tasks.go index 484a826..fb20d09 100644 --- a/tasks/tasks.go +++ b/tasks/tasks.go @@ -57,9 +57,10 @@ func init() { // Register AnimeSync task (triggered automatically after AnimeFetch completes) err = GlobalTaskManager.RegisterTask(types.Task{ - Name: "AnimeSync", - Interval: 7 * 24 * time.Hour, // Same interval as AnimeFetch - Execute: AniSync, + Name: "AnimeSync", + Interval: 0, // Manual-only - runs after AnimeFetch + Execute: AniSync, + TriggeredBy: "AnimeFetch", }) if err != nil { diff --git a/types/task_manager.go b/types/task_manager.go index 78ef8af..1e7b157 100644 --- a/types/task_manager.go +++ b/types/task_manager.go @@ -5,10 +5,11 @@ import ( ) type Task struct { - Name string - Interval time.Duration - Execute func() error - LastRun time.Time + Name string + Interval time.Duration + Execute func() error + LastRun time.Time + TriggeredBy string // Name of parent task that triggers this task (for manual tasks) } type TaskStatus struct { |
