]> git.giacomolli.uk - onechat/blobdiff - schedule.go
Complete context on forwarded local errors
[onechat] / schedule.go
index 7eb747ff6d75205cf9a7b8c11b0ee4bb45dec370..3c3456ddbcc6363be07b9398b01b737c00653366 100644 (file)
@@ -225,7 +225,7 @@ func (s *Schedules) deliver(ctx context.Context, l *TurnLoop) error {
 
                err = s.Done(schedule, now)
                if err != nil {
-                       return err
+                       return fmt.Errorf("acknowledge schedule run: %w", err)
                }
 
                attrs := []any{"id", schedule.ID}
@@ -286,7 +286,12 @@ func (s *Schedules) Done(schedule Schedule, now time.Time) error {
        if schedule.Cron == "" {
                s.file.Schedules = slices.Delete(s.file.Schedules, index, index+1)
 
-               return s.save()
+               err := s.save()
+               if err != nil {
+                       return fmt.Errorf("save completed one-time schedule: %w", err)
+               }
+
+               return nil
        }
 
        cron, err := scheduleParseCron(schedule.Cron)
@@ -298,12 +303,22 @@ func (s *Schedules) Done(schedule Schedule, now time.Time) error {
        if !found {
                s.file.Schedules = slices.Delete(s.file.Schedules, index, index+1)
 
-               return s.save()
+               err = s.save()
+               if err != nil {
+                       return fmt.Errorf("save exhausted schedule: %w", err)
+               }
+
+               return nil
        }
 
        s.file.Schedules[index].Due = next
 
-       return s.save()
+       err = s.save()
+       if err != nil {
+               return fmt.Errorf("save next schedule run: %w", err)
+       }
+
+       return nil
 }
 
 // sorted returns a copy of the schedules by due time, then by ID.
@@ -352,7 +367,7 @@ func (s *Schedules) Set(text string, at, cron *string) (string, error) {
        default:
                parsed, err := scheduleParseCron(*cron)
                if err != nil {
-                       return "", err
+                       return "", fmt.Errorf("parse schedule expression: %w", err)
                }
 
                next, found := parsed.Next(now)
@@ -372,7 +387,7 @@ func (s *Schedules) Set(text string, at, cron *string) (string, error) {
        s.file.Schedules = append(s.file.Schedules, schedule)
        err := s.save()
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("save new schedule: %w", err)
        }
 
        s.change()
@@ -430,7 +445,7 @@ func (s *Schedules) Remove(id int) (string, error) {
        s.file.Schedules = slices.Delete(s.file.Schedules, index, index+1)
        err := s.save()
        if err != nil {
-               return "", err
+               return "", fmt.Errorf("save removed schedule: %w", err)
        }
 
        s.change()