From aeeec16984eaa3e7f01385f908441fcc8dfc07b8 Mon Sep 17 00:00:00 2001 From: "Dustin J. Mitchell" Date: Sat, 18 Jan 2025 02:20:41 -0500 Subject: [PATCH] Handle 'until' and 'recur' simiar to handling of 'gc' (#3753) This centralizes updates to recurrence and 'until' in Command, instead of doing so in each individual command implementation. This is preparatory to opening the TaskChampion replica in read-only mode. --- src/Context.cpp | 7 ++++++- src/commands/CmdAdd.cpp | 1 + src/commands/CmdAliases.cpp | 1 + src/commands/CmdAnnotate.cpp | 1 + src/commands/CmdAppend.cpp | 1 + src/commands/CmdAttributes.cpp | 1 + src/commands/CmdBurndown.cpp | 9 +++------ src/commands/CmdCalc.cpp | 1 + src/commands/CmdCalendar.cpp | 3 +-- src/commands/CmdColor.cpp | 1 + src/commands/CmdColumns.cpp | 2 ++ src/commands/CmdCommands.cpp | 14 +++++++++----- src/commands/CmdConfig.cpp | 2 ++ src/commands/CmdContext.cpp | 2 ++ src/commands/CmdCount.cpp | 3 +-- src/commands/CmdCustom.cpp | 5 +---- src/commands/CmdDelete.cpp | 1 + src/commands/CmdDenotate.cpp | 1 + src/commands/CmdDiagnostics.cpp | 1 + src/commands/CmdDone.cpp | 1 + src/commands/CmdDuplicate.cpp | 1 + src/commands/CmdEdit.cpp | 1 + src/commands/CmdExec.cpp | 1 + src/commands/CmdExport.cpp | 5 +---- src/commands/CmdGet.cpp | 1 + src/commands/CmdHelp.cpp | 1 + src/commands/CmdHistory.cpp | 1 + src/commands/CmdIDs.cpp | 8 ++++++-- src/commands/CmdImport.cpp | 1 + src/commands/CmdImportV2.cpp | 1 + src/commands/CmdInfo.cpp | 1 + src/commands/CmdLog.cpp | 1 + src/commands/CmdLogo.cpp | 1 + src/commands/CmdModify.cpp | 1 + src/commands/CmdNews.cpp | 1 + src/commands/CmdPrepend.cpp | 1 + src/commands/CmdProjects.cpp | 6 ++---- src/commands/CmdPurge.cpp | 1 + src/commands/CmdReports.cpp | 1 + src/commands/CmdShow.cpp | 1 + src/commands/CmdStart.cpp | 1 + src/commands/CmdStats.cpp | 1 + src/commands/CmdStop.cpp | 1 + src/commands/CmdSummary.cpp | 3 +-- src/commands/CmdSync.cpp | 1 + src/commands/CmdTags.cpp | 2 ++ src/commands/CmdTimesheet.cpp | 3 +-- src/commands/CmdUDAs.cpp | 2 ++ src/commands/CmdUndo.cpp | 1 + src/commands/CmdUnique.cpp | 1 + src/commands/CmdUrgency.cpp | 1 + src/commands/CmdVersion.cpp | 2 ++ src/commands/Command.cpp | 4 ++++ src/commands/Command.h | 2 ++ src/main.h | 3 --- test/commands.test.py | 4 ++-- 56 files changed, 87 insertions(+), 39 deletions(-) diff --git a/src/Context.cpp b/src/Context.cpp index 532a2699b..ed4c65770 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -852,7 +852,7 @@ int Context::dispatch(std::string& out) { Command* c = commands[command]; assert(c); - // The command know whether they need a GC. + // The command know whether they need a GC or recurrence update. if (c->needs_gc()) { tdb2.gc(); } @@ -869,6 +869,11 @@ int Context::dispatch(std::string& out) { if (config.getBoolean("debug") && config.getInteger("debug.parser") == 1) debug(cli2.dump("Parse Tree (before command-specifŃ–c processing)")); + if (c->needs_recur_update()) { + handleUntil(); + handleRecurrence(); + } + return c->execute(out); } diff --git a/src/commands/CmdAdd.cpp b/src/commands/CmdAdd.cpp index 6661c3d2f..5778ab737 100644 --- a/src/commands/CmdAdd.cpp +++ b/src/commands/CmdAdd.cpp @@ -40,6 +40,7 @@ CmdAdd::CmdAdd() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = false; _accepts_modifications = true; diff --git a/src/commands/CmdAliases.cpp b/src/commands/CmdAliases.cpp index 3554a7ee6..758365a95 100644 --- a/src/commands/CmdAliases.cpp +++ b/src/commands/CmdAliases.cpp @@ -39,6 +39,7 @@ CmdCompletionAliases::CmdCompletionAliases() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdAnnotate.cpp b/src/commands/CmdAnnotate.cpp index 73bbb8882..f5a193236 100644 --- a/src/commands/CmdAnnotate.cpp +++ b/src/commands/CmdAnnotate.cpp @@ -44,6 +44,7 @@ CmdAnnotate::CmdAnnotate() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = true; _accepts_modifications = true; diff --git a/src/commands/CmdAppend.cpp b/src/commands/CmdAppend.cpp index d6b68fab2..ac9e35ae9 100644 --- a/src/commands/CmdAppend.cpp +++ b/src/commands/CmdAppend.cpp @@ -44,6 +44,7 @@ CmdAppend::CmdAppend() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = true; _accepts_modifications = true; diff --git a/src/commands/CmdAttributes.cpp b/src/commands/CmdAttributes.cpp index bc7778572..553b9476d 100644 --- a/src/commands/CmdAttributes.cpp +++ b/src/commands/CmdAttributes.cpp @@ -42,6 +42,7 @@ CmdZshAttributes::CmdZshAttributes() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdBurndown.cpp b/src/commands/CmdBurndown.cpp index eb2a5e2e9..b05af87f3 100644 --- a/src/commands/CmdBurndown.cpp +++ b/src/commands/CmdBurndown.cpp @@ -767,6 +767,7 @@ CmdBurndownMonthly::CmdBurndownMonthly() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; @@ -779,8 +780,6 @@ int CmdBurndownMonthly::execute(std::string& output) { int rc = 0; // Scan the pending tasks, applying any filter. - handleUntil(); - handleRecurrence(); Filter filter; std::vector filtered; filter.subset(filtered); @@ -801,6 +800,7 @@ CmdBurndownWeekly::CmdBurndownWeekly() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; @@ -813,8 +813,6 @@ int CmdBurndownWeekly::execute(std::string& output) { int rc = 0; // Scan the pending tasks, applying any filter. - handleUntil(); - handleRecurrence(); Filter filter; std::vector filtered; filter.subset(filtered); @@ -835,6 +833,7 @@ CmdBurndownDaily::CmdBurndownDaily() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; @@ -847,8 +846,6 @@ int CmdBurndownDaily::execute(std::string& output) { int rc = 0; // Scan the pending tasks, applying any filter. - handleUntil(); - handleRecurrence(); Filter filter; std::vector filtered; filter.subset(filtered); diff --git a/src/commands/CmdCalc.cpp b/src/commands/CmdCalc.cpp index 3ed55e408..562b6d300 100644 --- a/src/commands/CmdCalc.cpp +++ b/src/commands/CmdCalc.cpp @@ -37,6 +37,7 @@ CmdCalc::CmdCalc() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdCalendar.cpp b/src/commands/CmdCalendar.cpp index 88129a44f..bf365d262 100644 --- a/src/commands/CmdCalendar.cpp +++ b/src/commands/CmdCalendar.cpp @@ -49,6 +49,7 @@ CmdCalendar::CmdCalendar() { _read_only = true; _displays_id = true; _needs_gc = true; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; @@ -80,8 +81,6 @@ int CmdCalendar::execute(std::string& output) { monthsPerLine = preferredMonthsPerLine; // Load the pending tasks. - handleUntil(); - handleRecurrence(); auto tasks = Context::getContext().tdb2.pending_tasks(); Datetime today; diff --git a/src/commands/CmdColor.cpp b/src/commands/CmdColor.cpp index bb0d7f548..53e672df6 100644 --- a/src/commands/CmdColor.cpp +++ b/src/commands/CmdColor.cpp @@ -45,6 +45,7 @@ CmdColor::CmdColor() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdColumns.cpp b/src/commands/CmdColumns.cpp index 2b2e32bfb..bf5e00f24 100644 --- a/src/commands/CmdColumns.cpp +++ b/src/commands/CmdColumns.cpp @@ -45,6 +45,7 @@ CmdColumns::CmdColumns() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; @@ -119,6 +120,7 @@ CmdCompletionColumns::CmdCompletionColumns() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdCommands.cpp b/src/commands/CmdCommands.cpp index 4676f57ae..6fb44876d 100644 --- a/src/commands/CmdCommands.cpp +++ b/src/commands/CmdCommands.cpp @@ -45,6 +45,7 @@ CmdCommands::CmdCommands() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; @@ -61,6 +62,7 @@ int CmdCommands::execute(std::string& output) { view.add("R/W", false); view.add("ID", false); view.add("GC", false); + view.add("Recur", false); view.add("Context", false); view.add("Filter", false); view.add("Mods", false); @@ -85,15 +87,17 @@ int CmdCommands::execute(std::string& output) { if (command.second->needs_gc()) view.set(row, 4, "GC"); - if (command.second->uses_context()) view.set(row, 5, "Ctxt"); + if (command.second->needs_recur_update()) view.set(row, 5, "Recur"); - if (command.second->accepts_filter()) view.set(row, 6, "Filt"); + if (command.second->uses_context()) view.set(row, 6, "Ctxt"); - if (command.second->accepts_modifications()) view.set(row, 7, "Mods"); + if (command.second->accepts_filter()) view.set(row, 7, "Filt"); - if (command.second->accepts_miscellaneous()) view.set(row, 8, "Misc"); + if (command.second->accepts_modifications()) view.set(row, 8, "Mods"); - view.set(row, 9, command.second->description()); + if (command.second->accepts_miscellaneous()) view.set(row, 9, "Misc"); + + view.set(row, 10, command.second->description()); } output = optionalBlankLine() + view.render() + optionalBlankLine() + '\n'; diff --git a/src/commands/CmdConfig.cpp b/src/commands/CmdConfig.cpp index 543bf1432..99270f033 100644 --- a/src/commands/CmdConfig.cpp +++ b/src/commands/CmdConfig.cpp @@ -44,6 +44,7 @@ CmdConfig::CmdConfig() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; @@ -217,6 +218,7 @@ CmdCompletionConfig::CmdCompletionConfig() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdContext.cpp b/src/commands/CmdContext.cpp index adcff94c7..77bc3152d 100644 --- a/src/commands/CmdContext.cpp +++ b/src/commands/CmdContext.cpp @@ -49,6 +49,7 @@ CmdContext::CmdContext() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; @@ -414,6 +415,7 @@ CmdCompletionContext::CmdCompletionContext() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdCount.cpp b/src/commands/CmdCount.cpp index 0da28bc1b..3c158c225 100644 --- a/src/commands/CmdCount.cpp +++ b/src/commands/CmdCount.cpp @@ -40,6 +40,7 @@ CmdCount::CmdCount() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; @@ -50,8 +51,6 @@ CmdCount::CmdCount() { //////////////////////////////////////////////////////////////////////////////// int CmdCount::execute(std::string& output) { // Apply filter. - handleUntil(); - handleRecurrence(); Filter filter; std::vector filtered; filter.subset(filtered); diff --git a/src/commands/CmdCustom.cpp b/src/commands/CmdCustom.cpp index f2ee70c66..9babfe668 100644 --- a/src/commands/CmdCustom.cpp +++ b/src/commands/CmdCustom.cpp @@ -55,6 +55,7 @@ CmdCustom::CmdCustom(const std::string& keyword, const std::string& usage, _read_only = true; _displays_id = true; _needs_gc = true; + _needs_recur_update = true; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; @@ -100,10 +101,6 @@ int CmdCustom::execute(std::string& output) { // Add the report filter to any existing filter. if (reportFilter != "") Context::getContext().cli2.addFilter(reportFilter); - // Make sure reccurent tasks are generated. - handleUntil(); - handleRecurrence(); - // Apply filter. Filter filter; std::vector filtered; diff --git a/src/commands/CmdDelete.cpp b/src/commands/CmdDelete.cpp index 3026bd05d..b3ac931cb 100644 --- a/src/commands/CmdDelete.cpp +++ b/src/commands/CmdDelete.cpp @@ -49,6 +49,7 @@ CmdDelete::CmdDelete() { _displays_id = false; _needs_confirm = true; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = true; diff --git a/src/commands/CmdDenotate.cpp b/src/commands/CmdDenotate.cpp index 363834843..e8a43ad63 100644 --- a/src/commands/CmdDenotate.cpp +++ b/src/commands/CmdDenotate.cpp @@ -49,6 +49,7 @@ CmdDenotate::CmdDenotate() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; diff --git a/src/commands/CmdDiagnostics.cpp b/src/commands/CmdDiagnostics.cpp index e4ac10bae..8baa39537 100644 --- a/src/commands/CmdDiagnostics.cpp +++ b/src/commands/CmdDiagnostics.cpp @@ -50,6 +50,7 @@ CmdDiagnostics::CmdDiagnostics() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdDone.cpp b/src/commands/CmdDone.cpp index 1e3638d33..d1ea64adb 100644 --- a/src/commands/CmdDone.cpp +++ b/src/commands/CmdDone.cpp @@ -44,6 +44,7 @@ CmdDone::CmdDone() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = true; diff --git a/src/commands/CmdDuplicate.cpp b/src/commands/CmdDuplicate.cpp index 381d6c368..b6a68854d 100644 --- a/src/commands/CmdDuplicate.cpp +++ b/src/commands/CmdDuplicate.cpp @@ -44,6 +44,7 @@ CmdDuplicate::CmdDuplicate() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = true; diff --git a/src/commands/CmdEdit.cpp b/src/commands/CmdEdit.cpp index acdd1ce4c..b7890bdee 100644 --- a/src/commands/CmdEdit.cpp +++ b/src/commands/CmdEdit.cpp @@ -64,6 +64,7 @@ CmdEdit::CmdEdit() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; diff --git a/src/commands/CmdExec.cpp b/src/commands/CmdExec.cpp index 3391f0447..c3457cf67 100644 --- a/src/commands/CmdExec.cpp +++ b/src/commands/CmdExec.cpp @@ -40,6 +40,7 @@ CmdExec::CmdExec() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdExport.cpp b/src/commands/CmdExport.cpp index a51f6428e..c697ff221 100644 --- a/src/commands/CmdExport.cpp +++ b/src/commands/CmdExport.cpp @@ -42,6 +42,7 @@ CmdExport::CmdExport() { _read_only = true; _displays_id = true; _needs_gc = true; + _needs_recur_update = true; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; @@ -82,10 +83,6 @@ int CmdExport::execute(std::string& output) { // Add the report filter to any existing filter. if (reportFilter != "") Context::getContext().cli2.addFilter(reportFilter); - // Make sure reccurent tasks are generated. - handleUntil(); - handleRecurrence(); - // Apply filter. Filter filter; std::vector filtered; diff --git a/src/commands/CmdGet.cpp b/src/commands/CmdGet.cpp index c6114cc28..2954e6848 100644 --- a/src/commands/CmdGet.cpp +++ b/src/commands/CmdGet.cpp @@ -43,6 +43,7 @@ CmdGet::CmdGet() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdHelp.cpp b/src/commands/CmdHelp.cpp index 033b12789..c66715bff 100644 --- a/src/commands/CmdHelp.cpp +++ b/src/commands/CmdHelp.cpp @@ -44,6 +44,7 @@ CmdHelp::CmdHelp() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdHistory.cpp b/src/commands/CmdHistory.cpp index 4449aea13..d6f1f9147 100644 --- a/src/commands/CmdHistory.cpp +++ b/src/commands/CmdHistory.cpp @@ -55,6 +55,7 @@ CmdHistoryBase::CmdHistoryBase() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; diff --git a/src/commands/CmdIDs.cpp b/src/commands/CmdIDs.cpp index 36024163c..acb2df9e7 100644 --- a/src/commands/CmdIDs.cpp +++ b/src/commands/CmdIDs.cpp @@ -46,6 +46,7 @@ CmdIDs::CmdIDs() { _read_only = true; _displays_id = true; _needs_gc = true; + _needs_recur_update = true; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; @@ -56,8 +57,6 @@ CmdIDs::CmdIDs() { //////////////////////////////////////////////////////////////////////////////// int CmdIDs::execute(std::string& output) { // Apply filter. - handleUntil(); - handleRecurrence(); Filter filter; std::vector filtered; filter.subset(filtered); @@ -127,6 +126,7 @@ CmdCompletionIds::CmdCompletionIds() { _read_only = true; _displays_id = true; _needs_gc = true; + _needs_recur_update = true; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; @@ -163,6 +163,7 @@ CmdZshCompletionIds::CmdZshCompletionIds() { _read_only = true; _displays_id = true; _needs_gc = true; + _needs_recur_update = true; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; @@ -199,6 +200,7 @@ CmdUUIDs::CmdUUIDs() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; @@ -234,6 +236,7 @@ CmdCompletionUuids::CmdCompletionUuids() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; @@ -269,6 +272,7 @@ CmdZshCompletionUuids::CmdZshCompletionUuids() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; diff --git a/src/commands/CmdImport.cpp b/src/commands/CmdImport.cpp index 31a2e141a..b3ccc0c2a 100644 --- a/src/commands/CmdImport.cpp +++ b/src/commands/CmdImport.cpp @@ -45,6 +45,7 @@ CmdImport::CmdImport() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdImportV2.cpp b/src/commands/CmdImportV2.cpp index e34e597a2..a4619fdce 100644 --- a/src/commands/CmdImportV2.cpp +++ b/src/commands/CmdImportV2.cpp @@ -46,6 +46,7 @@ CmdImportV2::CmdImportV2() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdInfo.cpp b/src/commands/CmdInfo.cpp index cfb3263e8..7ffb56942 100644 --- a/src/commands/CmdInfo.cpp +++ b/src/commands/CmdInfo.cpp @@ -59,6 +59,7 @@ CmdInfo::CmdInfo() { // Once the test suite is completely modified, this can be corrected. _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; diff --git a/src/commands/CmdLog.cpp b/src/commands/CmdLog.cpp index af3e9f361..6263cf299 100644 --- a/src/commands/CmdLog.cpp +++ b/src/commands/CmdLog.cpp @@ -40,6 +40,7 @@ CmdLog::CmdLog() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = false; _accepts_modifications = true; diff --git a/src/commands/CmdLogo.cpp b/src/commands/CmdLogo.cpp index 37efec23d..75db2c837 100644 --- a/src/commands/CmdLogo.cpp +++ b/src/commands/CmdLogo.cpp @@ -39,6 +39,7 @@ CmdLogo::CmdLogo() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdModify.cpp b/src/commands/CmdModify.cpp index ba86ea1f9..ed6e3d609 100644 --- a/src/commands/CmdModify.cpp +++ b/src/commands/CmdModify.cpp @@ -48,6 +48,7 @@ CmdModify::CmdModify() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = true; _accepts_modifications = true; diff --git a/src/commands/CmdNews.cpp b/src/commands/CmdNews.cpp index 27202ff64..6eeec1ba6 100644 --- a/src/commands/CmdNews.cpp +++ b/src/commands/CmdNews.cpp @@ -57,6 +57,7 @@ CmdNews::CmdNews() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdPrepend.cpp b/src/commands/CmdPrepend.cpp index 79d67a881..1f148db48 100644 --- a/src/commands/CmdPrepend.cpp +++ b/src/commands/CmdPrepend.cpp @@ -44,6 +44,7 @@ CmdPrepend::CmdPrepend() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = true; diff --git a/src/commands/CmdProjects.cpp b/src/commands/CmdProjects.cpp index dc98f8af3..612ba93ed 100644 --- a/src/commands/CmdProjects.cpp +++ b/src/commands/CmdProjects.cpp @@ -47,6 +47,7 @@ CmdProjects::CmdProjects() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; @@ -59,8 +60,6 @@ int CmdProjects::execute(std::string& output) { int rc = 0; // Get all the tasks. - handleUntil(); - handleRecurrence(); auto tasks = Context::getContext().tdb2.pending_tasks(); if (Context::getContext().config.getBoolean("list.all.projects")) @@ -141,6 +140,7 @@ CmdCompletionProjects::CmdCompletionProjects() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; @@ -151,8 +151,6 @@ CmdCompletionProjects::CmdCompletionProjects() { //////////////////////////////////////////////////////////////////////////////// int CmdCompletionProjects::execute(std::string& output) { // Get all the tasks. - handleUntil(); - handleRecurrence(); auto tasks = Context::getContext().tdb2.pending_tasks(); if (Context::getContext().config.getBoolean("list.all.projects")) diff --git a/src/commands/CmdPurge.cpp b/src/commands/CmdPurge.cpp index 5bb309ddb..e7374064e 100644 --- a/src/commands/CmdPurge.cpp +++ b/src/commands/CmdPurge.cpp @@ -43,6 +43,7 @@ CmdPurge::CmdPurge() { _displays_id = false; _needs_confirm = true; _needs_gc = true; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; diff --git a/src/commands/CmdReports.cpp b/src/commands/CmdReports.cpp index 1b2d83eed..4aa65e712 100644 --- a/src/commands/CmdReports.cpp +++ b/src/commands/CmdReports.cpp @@ -43,6 +43,7 @@ CmdReports::CmdReports() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdShow.cpp b/src/commands/CmdShow.cpp index a5f76e1f2..60e4f1657 100644 --- a/src/commands/CmdShow.cpp +++ b/src/commands/CmdShow.cpp @@ -53,6 +53,7 @@ CmdShow::CmdShow() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdStart.cpp b/src/commands/CmdStart.cpp index 10a5c9e5c..5216fab88 100644 --- a/src/commands/CmdStart.cpp +++ b/src/commands/CmdStart.cpp @@ -44,6 +44,7 @@ CmdStart::CmdStart() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = true; diff --git a/src/commands/CmdStats.cpp b/src/commands/CmdStats.cpp index 3450d8f11..7639594d9 100644 --- a/src/commands/CmdStats.cpp +++ b/src/commands/CmdStats.cpp @@ -49,6 +49,7 @@ CmdStats::CmdStats() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; diff --git a/src/commands/CmdStop.cpp b/src/commands/CmdStop.cpp index 2698a8436..1c2bf7596 100644 --- a/src/commands/CmdStop.cpp +++ b/src/commands/CmdStop.cpp @@ -43,6 +43,7 @@ CmdStop::CmdStop() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = true; diff --git a/src/commands/CmdSummary.cpp b/src/commands/CmdSummary.cpp index 76a83a29b..6bea3aae1 100644 --- a/src/commands/CmdSummary.cpp +++ b/src/commands/CmdSummary.cpp @@ -49,6 +49,7 @@ CmdSummary::CmdSummary() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; @@ -65,8 +66,6 @@ int CmdSummary::execute(std::string& output) { bool showAllProjects = Context::getContext().config.getBoolean("summary.all.projects"); // Apply filter. - handleUntil(); - handleRecurrence(); Filter filter; std::vector filtered; filter.subset(filtered); diff --git a/src/commands/CmdSync.cpp b/src/commands/CmdSync.cpp index e4f07e8f6..427cca5dd 100644 --- a/src/commands/CmdSync.cpp +++ b/src/commands/CmdSync.cpp @@ -49,6 +49,7 @@ CmdSync::CmdSync() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdTags.cpp b/src/commands/CmdTags.cpp index a0317d4fb..4c79832ad 100644 --- a/src/commands/CmdTags.cpp +++ b/src/commands/CmdTags.cpp @@ -46,6 +46,7 @@ CmdTags::CmdTags() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = false; _uses_context = true; _accepts_filter = true; _accepts_modifications = false; @@ -136,6 +137,7 @@ CmdCompletionTags::CmdCompletionTags() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; diff --git a/src/commands/CmdTimesheet.cpp b/src/commands/CmdTimesheet.cpp index bd076acd3..13b8d13c1 100644 --- a/src/commands/CmdTimesheet.cpp +++ b/src/commands/CmdTimesheet.cpp @@ -48,6 +48,7 @@ CmdTimesheet::CmdTimesheet() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = true; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; @@ -90,8 +91,6 @@ int CmdTimesheet::execute(std::string& output) { } // Apply filter to get a set of tasks. - handleUntil(); - handleRecurrence(); Filter filter; std::vector filtered; filter.subset(filtered); diff --git a/src/commands/CmdUDAs.cpp b/src/commands/CmdUDAs.cpp index 540d1726b..78742ca0a 100644 --- a/src/commands/CmdUDAs.cpp +++ b/src/commands/CmdUDAs.cpp @@ -48,6 +48,7 @@ CmdUDAs::CmdUDAs() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; @@ -156,6 +157,7 @@ CmdCompletionUDAs::CmdCompletionUDAs() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdUndo.cpp b/src/commands/CmdUndo.cpp index a5257ab93..cf808f6a5 100644 --- a/src/commands/CmdUndo.cpp +++ b/src/commands/CmdUndo.cpp @@ -45,6 +45,7 @@ CmdUndo::CmdUndo() { _read_only = false; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/CmdUnique.cpp b/src/commands/CmdUnique.cpp index 6833afb24..4b24c0043 100644 --- a/src/commands/CmdUnique.cpp +++ b/src/commands/CmdUnique.cpp @@ -43,6 +43,7 @@ CmdUnique::CmdUnique() { _read_only = true; _displays_id = true; _needs_gc = true; + _needs_recur_update = false; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; diff --git a/src/commands/CmdUrgency.cpp b/src/commands/CmdUrgency.cpp index 4d2b4a31f..cbd1b45e3 100644 --- a/src/commands/CmdUrgency.cpp +++ b/src/commands/CmdUrgency.cpp @@ -45,6 +45,7 @@ CmdUrgency::CmdUrgency() { _read_only = true; _displays_id = false; _needs_gc = true; + _needs_recur_update = false; _uses_context = false; _accepts_filter = true; _accepts_modifications = false; diff --git a/src/commands/CmdVersion.cpp b/src/commands/CmdVersion.cpp index fd82bda98..e4dd57e10 100644 --- a/src/commands/CmdVersion.cpp +++ b/src/commands/CmdVersion.cpp @@ -48,6 +48,7 @@ CmdVersion::CmdVersion() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; @@ -101,6 +102,7 @@ CmdCompletionVersion::CmdCompletionVersion() { _read_only = true; _displays_id = false; _needs_gc = false; + _needs_recur_update = false; _uses_context = false; _accepts_filter = false; _accepts_modifications = false; diff --git a/src/commands/Command.cpp b/src/commands/Command.cpp index dc6b36d87..366a10666 100644 --- a/src/commands/Command.cpp +++ b/src/commands/Command.cpp @@ -295,6 +295,7 @@ Command::Command() _displays_id(true), _needs_confirm(false), _needs_gc(true), + _needs_recur_update(false), _uses_context(false), _accepts_filter(false), _accepts_modifications(false), @@ -322,6 +323,9 @@ bool Command::displays_id() const { return _displays_id; } //////////////////////////////////////////////////////////////////////////////// bool Command::needs_gc() const { return _needs_gc; } +//////////////////////////////////////////////////////////////////////////////// +bool Command::needs_recur_update() const { return _needs_recur_update; } + //////////////////////////////////////////////////////////////////////////////// bool Command::uses_context() const { return _uses_context; } diff --git a/src/commands/Command.h b/src/commands/Command.h index 43d6ced89..02ff51ce6 100644 --- a/src/commands/Command.h +++ b/src/commands/Command.h @@ -62,6 +62,7 @@ class Command { bool read_only() const; bool displays_id() const; bool needs_gc() const; + bool needs_recur_update() const; virtual bool uses_context() const; bool accepts_filter() const; bool accepts_modifications() const; @@ -81,6 +82,7 @@ class Command { bool _displays_id; bool _needs_confirm; bool _needs_gc; + bool _needs_recur_update; bool _uses_context; bool _accepts_filter; bool _accepts_modifications; diff --git a/src/main.h b/src/main.h index 4b2ff2a57..9220a1345 100644 --- a/src/main.h +++ b/src/main.h @@ -47,9 +47,6 @@ std::optional getNextRecurrence(Datetime&, std::string&); bool generateDueDates(Task&, std::vector&); void updateRecurrenceMask(Task&); -// recur2.cpp -void handleRecurrence2(); - // nag.cpp void nag(std::vector&); diff --git a/test/commands.test.py b/test/commands.test.py index ee2951852..7ee9e38a3 100755 --- a/test/commands.test.py +++ b/test/commands.test.py @@ -44,7 +44,7 @@ class TestCommands(TestCase): code, out, err = self.t("commands") self.assertRegex(out, r"add\s+operation\s+RW\s+Ctxt\s+Mods\s+Adds a new task") self.assertRegex( - out, r"list\s+report\s+RO\s+ID\s+GC\s+Ctxt\s+Filt\s+Most details of" + out, r"list\s+report\s+RO\s+ID\s+GC\s+Recur\s+Ctxt\s+Filt\s+Most details of" ) self.assertRegex(out, r"modify\s+operation\s+RW\s+Filt\s+Mods\s+Modifies the") @@ -53,7 +53,7 @@ class TestCommands(TestCase): code, out, err = self.t("commands rc._forcecolor:on") self.assertRegex(out, r"add\s+operation\s+RW\s+Ctxt\s+Mods\s+Adds a new task") self.assertRegex( - out, r"list\s+report\s+RO\s+ID\s+GC\s+Ctxt\s+Filt\s+Most details of" + out, r"list\s+report\s+RO\s+ID\s+GC\s+Recur\s+Ctxt\s+Filt\s+Most details of" ) self.assertRegex(out, r"modify\s+operation\s+RW\s+Filt\s+Mods\s+Modifies the")