diff --git a/src/scheduler.rs b/src/scheduler.rs index d4111ec..8ee2a6f 100644 --- a/src/scheduler.rs +++ b/src/scheduler.rs @@ -9,15 +9,22 @@ pub async fn reschedule_recurring_tasks( ) -> anyhow::Result<()> { let mut rescheduled = 0; for task in tasks { - let task::State::Completed { - date: completed_date, - } = &task.state - else { + let Some(recurring) = &task.recurring else { continue; }; - let Some(recurring) = &task.recurring else { - continue; + let completed_date = match &task.state { + // Already scheduled + task::State::Open { due: Some(_) } => continue, + + // Invalid state, will warn about this + task::State::Open { due: None } => { + log::warn!("Task {task} is recurring but has no due date. Updating from today."); + &jiff::Zoned::now() + } + + // Need scheduling + task::State::Completed { date } => date, }; let due_date = next_due_date(completed_date, recurring.interval);