diff --git a/src/commands/CmdContext.cpp b/src/commands/CmdContext.cpp index d65837036..e689daeb5 100644 --- a/src/commands/CmdContext.cpp +++ b/src/commands/CmdContext.cpp @@ -26,9 +26,11 @@ #include #include +#include #include #include #include +#include #include #include #include @@ -128,15 +130,35 @@ std::vector CmdContext::getContexts () int CmdContext::defineContext (std::vector & words, std::stringstream& out) { int rc = 0; + bool confirmation = context.config.getBoolean ("confirmation"); if (words.size () > 2) { std::string name = "context." + words[1]; std::string value = joinWords (words, 2); - // TODO: Check if the value is a proper filter + + // Check if the value is a proper filter by filtering current pending.data + Filter filter; + std::vector filtered; + const std::vector & pending = context.tdb2.pending.get_tasks (); + + try + { + context.cli.addRawFilter ("( " + value + " )"); + filter.subset (pending, filtered); + } + catch (std::string exception) + { + throw format (STRING_CMD_CONTEXT_DEF_ABRT2, exception); + } + + // Make user explicitly confirm filters that are matching no pending tasks + if (filtered.size () == 0) + if (confirmation && + ! confirm (format (STRING_CMD_CONTEXT_DEF_CONF, value))) + throw std::string (STRING_CMD_CONTEXT_DEF_ABRT); // Set context definition config variable - bool confirmation = context.config.getBoolean ("confirmation"); bool success = CmdConfig::setConfigVariable (name, value, confirmation); if (success) diff --git a/src/l10n/deu-DEU.h b/src/l10n/deu-DEU.h index 8c22842a5..a374165d1 100644 --- a/src/l10n/deu-DEU.h +++ b/src/l10n/deu-DEU.h @@ -565,6 +565,9 @@ #define STRING_CMD_CONTEXT_DEF_SUCC "Context '{1}' defined." #define STRING_CMD_CONTEXT_DEF_FAIL "Context '{1}' not defined." #define STRING_CMD_CONTEXT_DEF_USAG "Both context name and its definition must be provided." +#define STRING_CMD_CONTEXT_DEF_ABRT "Context definiton aborted." +#define STRING_CMD_CONTEXT_DEF_ABRT2 "Filter validation failed: {1}" +#define STRING_CMD_CONTEXT_DEF_CONF "The filter '{1}' matches 0 pending tasks. Do you wish to continue?" #define STRING_CMD_CONTEXT_DEL_SUCC "Context '{1}' deleted." #define STRING_CMD_CONTEXT_DEL_FAIL "Context '{1}' not deleted." #define STRING_CMD_CONTEXT_DEL_USAG "Context name needs to be specified." diff --git a/src/l10n/eng-USA.h b/src/l10n/eng-USA.h index 5050bdf5f..112db87ae 100644 --- a/src/l10n/eng-USA.h +++ b/src/l10n/eng-USA.h @@ -565,6 +565,9 @@ #define STRING_CMD_CONTEXT_DEF_SUCC "Context '{1}' defined." #define STRING_CMD_CONTEXT_DEF_FAIL "Context '{1}' not defined." #define STRING_CMD_CONTEXT_DEF_USAG "Both context name and its definition must be provided." +#define STRING_CMD_CONTEXT_DEF_ABRT "Context definiton aborted." +#define STRING_CMD_CONTEXT_DEF_ABRT2 "Filter validation failed: {1}" +#define STRING_CMD_CONTEXT_DEF_CONF "The filter '{1}' matches 0 pending tasks. Do you wish to continue?" #define STRING_CMD_CONTEXT_DEL_SUCC "Context '{1}' deleted." #define STRING_CMD_CONTEXT_DEL_FAIL "Context '{1}' not deleted." #define STRING_CMD_CONTEXT_DEL_USAG "Context name needs to be specified." diff --git a/src/l10n/epo-RUS.h b/src/l10n/epo-RUS.h index ed299fcd4..057946ca3 100644 --- a/src/l10n/epo-RUS.h +++ b/src/l10n/epo-RUS.h @@ -565,6 +565,9 @@ #define STRING_CMD_CONTEXT_DEF_SUCC "Context '{1}' defined." #define STRING_CMD_CONTEXT_DEF_FAIL "Context '{1}' not defined." #define STRING_CMD_CONTEXT_DEF_USAG "Both context name and its definition must be provided." +#define STRING_CMD_CONTEXT_DEF_ABRT "Context definiton aborted." +#define STRING_CMD_CONTEXT_DEF_ABRT2 "Filter validation failed: {1}" +#define STRING_CMD_CONTEXT_DEF_CONF "The filter '{1}' matches 0 pending tasks. Do you wish to continue?" #define STRING_CMD_CONTEXT_DEL_SUCC "Context '{1}' deleted." #define STRING_CMD_CONTEXT_DEL_FAIL "Context '{1}' not deleted." #define STRING_CMD_CONTEXT_DEL_USAG "Context name needs to be specified." diff --git a/src/l10n/esp-ESP.h b/src/l10n/esp-ESP.h index f1964b0b6..d99053429 100644 --- a/src/l10n/esp-ESP.h +++ b/src/l10n/esp-ESP.h @@ -574,6 +574,9 @@ #define STRING_CMD_CONTEXT_DEF_SUCC "Context '{1}' defined." #define STRING_CMD_CONTEXT_DEF_FAIL "Context '{1}' not defined." #define STRING_CMD_CONTEXT_DEF_USAG "Both context name and its definition must be provided." +#define STRING_CMD_CONTEXT_DEF_ABRT "Context definiton aborted." +#define STRING_CMD_CONTEXT_DEF_ABRT2 "Filter validation failed: {1}" +#define STRING_CMD_CONTEXT_DEF_CONF "The filter '{1}' matches 0 pending tasks. Do you wish to continue?" #define STRING_CMD_CONTEXT_DEL_SUCC "Context '{1}' deleted." #define STRING_CMD_CONTEXT_DEL_FAIL "Context '{1}' not deleted." #define STRING_CMD_CONTEXT_DEL_USAG "Context name needs to be specified." diff --git a/src/l10n/fra-FRA.h b/src/l10n/fra-FRA.h index b997ec4dc..11d3b2cb6 100644 --- a/src/l10n/fra-FRA.h +++ b/src/l10n/fra-FRA.h @@ -565,6 +565,8 @@ #define STRING_CMD_CONTEXT_DEF_SUCC "Context '{1}' defined." #define STRING_CMD_CONTEXT_DEF_FAIL "Context '{1}' not defined." #define STRING_CMD_CONTEXT_DEF_USAG "Both context name and its definition must be provided." +#define STRING_CMD_CONTEXT_DEF_ABRT "Context definiton aborted." +#define STRING_CMD_CONTEXT_DEF_CONF "The filter '{1}' matches 0 pending tasks. Do you wish to continue?" #define STRING_CMD_CONTEXT_DEL_SUCC "Context '{1}' deleted." #define STRING_CMD_CONTEXT_DEL_FAIL "Context '{1}' not deleted." #define STRING_CMD_CONTEXT_DEL_USAG "Context name needs to be specified." diff --git a/src/l10n/ita-ITA.h b/src/l10n/ita-ITA.h index ef4b36cdb..5e5255572 100644 --- a/src/l10n/ita-ITA.h +++ b/src/l10n/ita-ITA.h @@ -564,6 +564,9 @@ #define STRING_CMD_CONTEXT_DEF_SUCC "Context '{1}' defined." #define STRING_CMD_CONTEXT_DEF_FAIL "Context '{1}' not defined." #define STRING_CMD_CONTEXT_DEF_USAG "Both context name and its definition must be provided." +#define STRING_CMD_CONTEXT_DEF_ABRT "Context definiton aborted." +#define STRING_CMD_CONTEXT_DEF_ABRT2 "Filter validation failed: {1}" +#define STRING_CMD_CONTEXT_DEF_CONF "The filter '{1}' matches 0 pending tasks. Do you wish to continue?" #define STRING_CMD_CONTEXT_DEL_SUCC "Context '{1}' deleted." #define STRING_CMD_CONTEXT_DEL_FAIL "Context '{1}' not deleted." #define STRING_CMD_CONTEXT_DEL_USAG "Context name needs to be specified." diff --git a/src/l10n/pol-POL.h b/src/l10n/pol-POL.h index 7d95eeecb..f3e2a0fcd 100644 --- a/src/l10n/pol-POL.h +++ b/src/l10n/pol-POL.h @@ -565,6 +565,9 @@ #define STRING_CMD_CONTEXT_DEF_SUCC "Context '{1}' defined." #define STRING_CMD_CONTEXT_DEF_FAIL "Context '{1}' not defined." #define STRING_CMD_CONTEXT_DEF_USAG "Both context name and its definition must be provided." +#define STRING_CMD_CONTEXT_DEF_ABRT "Context definiton aborted." +#define STRING_CMD_CONTEXT_DEF_ABRT2 "Filter validation failed: {1}" +#define STRING_CMD_CONTEXT_DEF_CONF "The filter '{1}' matches 0 pending tasks. Do you wish to continue?" #define STRING_CMD_CONTEXT_DEL_SUCC "Context '{1}' deleted." #define STRING_CMD_CONTEXT_DEL_FAIL "Context '{1}' not deleted." #define STRING_CMD_CONTEXT_DEL_USAG "Context name needs to be specified." diff --git a/src/l10n/por-PRT.h b/src/l10n/por-PRT.h index f446a4cea..97d9de571 100644 --- a/src/l10n/por-PRT.h +++ b/src/l10n/por-PRT.h @@ -565,6 +565,9 @@ #define STRING_CMD_CONTEXT_DEF_SUCC "Context '{1}' defined." #define STRING_CMD_CONTEXT_DEF_FAIL "Context '{1}' not defined." #define STRING_CMD_CONTEXT_DEF_USAG "Both context name and its definition must be provided." +#define STRING_CMD_CONTEXT_DEF_ABRT "Context definiton aborted." +#define STRING_CMD_CONTEXT_DEF_ABRT2 "Filter validation failed: {1}" +#define STRING_CMD_CONTEXT_DEF_CONF "The filter '{1}' matches 0 pending tasks. Do you wish to continue?" #define STRING_CMD_CONTEXT_DEL_SUCC "Context '{1}' deleted." #define STRING_CMD_CONTEXT_DEL_FAIL "Context '{1}' not deleted." #define STRING_CMD_CONTEXT_DEL_USAG "Context name needs to be specified."