- Now updates the task ID of any new task, therefore avoiding off-by-one
  errors that occur when code calls TDB2::next_id.
This commit is contained in:
Paul Beckingham 2014-08-16 14:20:00 -04:00
parent 45e6512c02
commit 6faf6bb678
4 changed files with 11 additions and 14 deletions

View file

@ -135,26 +135,23 @@ bool TF2::get (const std::string& uuid, Task& task)
} }
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void TF2::add_task (const Task& task) void TF2::add_task (Task& task)
{ {
Task hookTask (task); context.hooks.onAdd (task);
context.hooks.onAdd (hookTask); _tasks.push_back (task); // For subsequent queries
_added_tasks.push_back (task); // For commit/synch
_tasks.push_back (hookTask); // For subsequent queries
_added_tasks.push_back (hookTask); // For commit/synch
int id = task.id;
Task::status status = task.getStatus (); Task::status status = task.getStatus ();
if (id == 0 && if (task.id == 0 &&
(status == Task::pending || (status == Task::pending ||
status == Task::recurring || status == Task::recurring ||
status == Task::waiting)) status == Task::waiting))
{ {
id = context.tdb2.next_id (); task.id = context.tdb2.next_id ();
} }
_I2U[id] = task.get ("uuid"); _I2U[task.id] = task.get ("uuid");
_U2I[task.get ("uuid")] = id; _U2I[task.get ("uuid")] = task.id;
_dirty = true; _dirty = true;
} }

View file

@ -50,7 +50,7 @@ public:
bool get (int, Task&); bool get (int, Task&);
bool get (const std::string&, Task&); bool get (const std::string&, Task&);
void add_task (const Task&); void add_task (Task&);
bool modify_task (const Task&); bool modify_task (const Task&);
void add_line (const std::string&); void add_line (const std::string&);
void clear_tasks (); void clear_tasks ();

View file

@ -55,7 +55,7 @@ int CmdAdd::execute (std::string& output)
context.tdb2.add (task); context.tdb2.add (task);
if (context.verbose ("new-id")) if (context.verbose ("new-id"))
output += format (STRING_CMD_ADD_FEEDBACK, context.tdb2.next_id ()) + "\n"; output += format (STRING_CMD_ADD_FEEDBACK, task.id) + "\n";
else if (context.verbose ("new-uuid")) else if (context.verbose ("new-uuid"))
output += format (STRING_CMD_ADD_FEEDBACK, task.get ("uuid")) + "\n"; output += format (STRING_CMD_ADD_FEEDBACK, task.get ("uuid")) + "\n";

View file

@ -110,7 +110,7 @@ int CmdDuplicate::execute (std::string& output)
feedback_affected (STRING_CMD_DUPLICATE_TASK, *task); feedback_affected (STRING_CMD_DUPLICATE_TASK, *task);
if (context.verbose ("new-id")) if (context.verbose ("new-id"))
std::cout << format (STRING_CMD_ADD_FEEDBACK, context.tdb2.next_id ()) + "\n"; std::cout << format (STRING_CMD_ADD_FEEDBACK, dup.id) + "\n";
else if (context.verbose ("new-uuid")) else if (context.verbose ("new-uuid"))
std::cout << format (STRING_CMD_ADD_FEEDBACK, dup.get ("uuid")) + "\n"; std::cout << format (STRING_CMD_ADD_FEEDBACK, dup.get ("uuid")) + "\n";