From 9e3c6f5bc1f0f83cc94f93d2977aff62ec1ba693 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Mon, 30 May 2011 01:19:11 -0400 Subject: [PATCH] Commands - stop - Migrated handleStop to CmdStop. --- src/Cmd.cpp | 2 - src/Context.cpp | 1 - src/command.cpp | 57 -------------------- src/commands/CMakeLists.txt | 1 + src/commands/CmdHelp.cpp | 4 -- src/commands/CmdStop.cpp | 103 ++++++++++++++++++++++++++++++++++++ src/commands/CmdStop.h | 42 +++++++++++++++ src/commands/Command.cpp | 2 + src/main.h | 1 - 9 files changed, 148 insertions(+), 65 deletions(-) create mode 100644 src/commands/CmdStop.cpp create mode 100644 src/commands/CmdStop.h diff --git a/src/Cmd.cpp b/src/Cmd.cpp index 3b0d3b200..435c3b6fa 100644 --- a/src/Cmd.cpp +++ b/src/Cmd.cpp @@ -140,7 +140,6 @@ void Cmd::load () commands.push_back ("done"); commands.push_back ("duplicate"); commands.push_back ("import"); - commands.push_back ("stop"); commands.push_back ("summary"); commands.push_back ("timesheet"); commands.push_back ("undo"); @@ -229,7 +228,6 @@ bool Cmd::isWriteCommand () command == "duplicate" || command == "import" || command == "pull" || - command == "stop" || command == "undo") return true; diff --git a/src/Context.cpp b/src/Context.cpp index 1866ead97..404f257c4 100644 --- a/src/Context.cpp +++ b/src/Context.cpp @@ -253,7 +253,6 @@ int Context::dispatch (std::string &out) else if (cmd.command == "timesheet") { rc = handleReportTimesheet (out); } else if (cmd.command == "done") { rc = handleDone (out); } else if (cmd.command == "delete") { rc = handleDelete (out); } - else if (cmd.command == "stop") { rc = handleStop (out); } else if (cmd.command == "export.csv") { rc = handleExportCSV (out); } else if (cmd.command == "export.ical") { rc = handleExportiCal (out); } else if (cmd.command == "export.yaml") { rc = handleExportYAML (out); } diff --git a/src/command.cpp b/src/command.cpp index 603aef872..e958d4a36 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -551,63 +551,6 @@ int handleDelete (std::string& outs) return rc; } -//////////////////////////////////////////////////////////////////////////////// -int handleStop (std::string& outs) -{ - int rc = 0; - std::stringstream out; - - context.disallowModification (); - - std::vector tasks; - context.tdb.lock (context.config.getBoolean ("locking")); - Filter filter; - context.tdb.loadPending (tasks, filter); - - // Filter sequence. - context.filter.applySequence (tasks, context.sequence); - if (tasks.size () == 0) - { - std::cout << "No tasks specified.\n"; - return 1; - } - - foreach (task, tasks) - { - if (task->has ("start")) - { - task->remove ("start"); - - if (context.config.getBoolean ("journal.time")) - task->addAnnotation (context.config.get ("journal.time.stop.annotation")); - - context.tdb.update (*task); - - if (context.config.getBoolean ("echo.command")) - out << "Stopped " - << task->id - << " '" - << task->get ("description") - << "'.\n"; - } - else - { - out << "Task " - << task->id - << " '" - << task->get ("description") - << "' not started.\n"; - rc = 1; - } - } - - context.tdb.commit (); - context.tdb.unlock (); - - outs = out.str (); - return rc; -} - //////////////////////////////////////////////////////////////////////////////// int handleDone (std::string& outs) { diff --git a/src/commands/CMakeLists.txt b/src/commands/CMakeLists.txt index 9239ab358..7468e575f 100644 --- a/src/commands/CMakeLists.txt +++ b/src/commands/CMakeLists.txt @@ -31,6 +31,7 @@ set (commands_SRCS Command.cpp Command.h CmdShow.cpp CmdShow.h CmdStart.cpp CmdStart.h CmdStatistics.cpp CmdStatistics.h + CmdStop.cpp CmdStop.h CmdTags.cpp CmdTags.h CmdTip.cpp CmdTip.h CmdUrgency.cpp CmdUrgency.h diff --git a/src/commands/CmdHelp.cpp b/src/commands/CmdHelp.cpp index 35e651eab..015f1c1f8 100644 --- a/src/commands/CmdHelp.cpp +++ b/src/commands/CmdHelp.cpp @@ -115,10 +115,6 @@ int CmdHelp::execute (const std::string&, std::string& output) view.set (row, 1, "task delete ID"); view.set (row, 2, "Deletes the specified task."); - row = view.addRow (); - view.set (row, 1, "task stop ID"); - view.set (row, 2, "Removes the 'start' time from a task."); - row = view.addRow (); view.set (row, 1, "task done ID [tags] [attrs] [desc...]"); view.set (row, 2, "Marks the specified task as completed."); diff --git a/src/commands/CmdStop.cpp b/src/commands/CmdStop.cpp new file mode 100644 index 000000000..fe012369e --- /dev/null +++ b/src/commands/CmdStop.cpp @@ -0,0 +1,103 @@ +//////////////////////////////////////////////////////////////////////////////// +// taskwarrior - a command line task list manager. +// +// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez. +// All rights reserved. +// +// This program is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation; either version 2 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the +// +// Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, +// Boston, MA +// 02110-1301 +// USA +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include + +extern Context context; + +//////////////////////////////////////////////////////////////////////////////// +CmdStop::CmdStop () +{ + _keyword = "stop"; + _usage = "task stop ID"; + _description = "Removes the 'start' time from a task."; + _read_only = false; + _displays_id = false; +} + +//////////////////////////////////////////////////////////////////////////////// +int CmdStop::execute (const std::string&, std::string& output) +{ + int rc = 0; + std::stringstream out; + + context.disallowModification (); + + std::vector tasks; + context.tdb.lock (context.config.getBoolean ("locking")); + Filter filter; + context.tdb.loadPending (tasks, filter); + + // Filter sequence. + context.filter.applySequence (tasks, context.sequence); + if (tasks.size () == 0) + { + context.footnote ("No tasks specified."); + return 1; + } + + std::vector ::iterator task; + for (task = tasks.begin (); task != tasks.end (); ++task) + { + if (task->has ("start")) + { + task->remove ("start"); + + if (context.config.getBoolean ("journal.time")) + task->addAnnotation (context.config.get ("journal.time.stop.annotation")); + + context.tdb.update (*task); + + if (context.config.getBoolean ("echo.command")) + out << "Stopped " + << task->id + << " '" + << task->get ("description") + << "'.\n"; + } + else + { + out << "Task " + << task->id + << " '" + << task->get ("description") + << "' not started.\n"; + rc = 1; + } + } + + context.tdb.commit (); + context.tdb.unlock (); + + output = out.str (); + return rc; +} + +//////////////////////////////////////////////////////////////////////////////// diff --git a/src/commands/CmdStop.h b/src/commands/CmdStop.h new file mode 100644 index 000000000..c5b5833db --- /dev/null +++ b/src/commands/CmdStop.h @@ -0,0 +1,42 @@ +//////////////////////////////////////////////////////////////////////////////// +// taskwarrior - a command line task list manager. +// +// Copyright 2006 - 2011, Paul Beckingham, Federico Hernandez. +// All rights reserved. +// +// This program is free software; you can redistribute it and/or modify it under +// the terms of the GNU General Public License as published by the Free Software +// Foundation; either version 2 of the License, or (at your option) any later +// version. +// +// This program is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +// details. +// +// You should have received a copy of the GNU General Public License along with +// this program; if not, write to the +// +// Free Software Foundation, Inc., +// 51 Franklin Street, Fifth Floor, +// Boston, MA +// 02110-1301 +// USA +// +//////////////////////////////////////////////////////////////////////////////// +#ifndef INCLUDED_CMDSTOP +#define INCLUDED_CMDSTOP +#define L10N // Localization complete. + +#include +#include + +class CmdStop : public Command +{ +public: + CmdStop (); + int execute (const std::string&, std::string&); +}; + +#endif +//////////////////////////////////////////////////////////////////////////////// diff --git a/src/commands/Command.cpp b/src/commands/Command.cpp index 62be6b5d8..70de8d610 100644 --- a/src/commands/Command.cpp +++ b/src/commands/Command.cpp @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -99,6 +100,7 @@ void Command::factory (std::map & all) c = new CmdShow (); all[c->keyword ()] = c; c = new CmdStart (); all[c->keyword ()] = c; c = new CmdStatistics (); all[c->keyword ()] = c; + c = new CmdStop (); all[c->keyword ()] = c; c = new CmdTags (); all[c->keyword ()] = c; c = new CmdTip (); all[c->keyword ()] = c; c = new CmdUrgency (); all[c->keyword ()] = c; diff --git a/src/main.h b/src/main.h index 33ce07c0a..bff29d4e6 100644 --- a/src/main.h +++ b/src/main.h @@ -56,7 +56,6 @@ int handleCompletionConfig (std::string&); int handleQuery (std::string&); int handleConfig (std::string&); int handleDelete (std::string&); -int handleStop (std::string&); int handleDuplicate (std::string&); void handleUndo (); void handleMerge (std::string&);