summaryrefslogtreecommitdiff
path: root/dulatx.md
blob: 668efe59797aa3bdb6f3023edde6cee7a2a0af7b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
---
id: dulatx
date: 2026-02-28T12:37:24+0300
languages: [en]
aliases:

reviews:

tags:
- draft
- invention
- snippet

- taskwarrior
---
# Fix for recurrent tasks in Taskwarrior

I made this patch to fix the issue of `until` and `scheduled` being not recalculated:
```diff
diff --git a/src/recur.cpp b/src/recur.cpp
index 482fc1060..5e2627b40 100644
--- a/src/recur.cpp
+++ b/src/recur.cpp
@@ -118,6 +118,30 @@ void handleRecurrence() {
             rec.setStatus(Task::pending);
           }
 
+          if (t.has("scheduled")) {
+            Datetime old_scheduled(t.get_date("scheduled"));
+            Datetime old_due(t.get_date("due"));
+            Datetime due(d);
+            auto scheduled = checked_add_datetime(due, old_scheduled - old_due);
+            if (scheduled) {
+              rec.set("scheduled", format(scheduled->toEpoch()));
+            } else {
+              rec.remove("scheduled");
+            }
+          }
+
+          if (t.has("until")) {
+            Datetime old_until(t.get_date("until"));
+            Datetime old_due(t.get_date("due"));
+            Datetime due(d);
+            auto until = checked_add_datetime(due, old_until - old_due);
+            if (until) {
+              rec.set("until", format(until->toEpoch()));
+            } else {
+              rec.remove("until");
+            }
+          }
+
           rec.set("imask", i);
           rec.remove("mask");  // Remove the mask of the parent.
```

## Up
- 

## Related
- [Recurrent tasks в TaskWarrior](cmyx2d)