summaryrefslogtreecommitdiff
path: root/dulatx.md
diff options
context:
space:
mode:
Diffstat (limited to 'dulatx.md')
-rw-r--r--dulatx.md60
1 files changed, 60 insertions, 0 deletions
diff --git a/dulatx.md b/dulatx.md
new file mode 100644
index 0000000..668efe5
--- /dev/null
+++ b/dulatx.md
@@ -0,0 +1,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)