From 86ab605bd43451567b7ad600207e48569cc11d6a Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Mon, 30 May 2011 01:11:34 -0400 Subject: [PATCH] Commands - start - Migrated handleStart to CmdStart. --- src/Cmd.cpp | 2 - src/Context.cpp | 1 - src/command.cpp | 65 --------------------- src/commands/CMakeLists.txt | 1 + src/commands/CmdHelp.cpp | 4 -- src/commands/CmdStart.cpp | 111 ++++++++++++++++++++++++++++++++++++ src/commands/CmdStart.h | 42 ++++++++++++++ src/commands/Command.cpp | 2 + src/main.h | 1 - 9 files changed, 156 insertions(+), 73 deletions(-) create mode 100644 src/commands/CmdStart.cpp create mode 100644 src/commands/CmdStart.h diff --git a/src/Cmd.cpp b/src/Cmd.cpp index 629867900..3b0d3b200 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 ("start"); commands.push_back ("stop"); commands.push_back ("summary"); commands.push_back ("timesheet"); @@ -230,7 +229,6 @@ bool Cmd::isWriteCommand () command == "duplicate" || command == "import" || command == "pull" || - command == "start" || command == "stop" || command == "undo") return true; diff --git a/src/Context.cpp b/src/Context.cpp index 129965c03..1866ead97 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 == "start") { rc = handleStart (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); } diff --git a/src/command.cpp b/src/command.cpp index 9c5d8717e..603aef872 100644 --- a/src/command.cpp +++ b/src/command.cpp @@ -551,71 +551,6 @@ int handleDelete (std::string& outs) return rc; } -//////////////////////////////////////////////////////////////////////////////// -int handleStart (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; - } - - bool nagged = false; - foreach (task, tasks) - { - if (! task->has ("start")) - { - char startTime[16]; - sprintf (startTime, "%u", (unsigned int) time (NULL)); - - task->set ("start", startTime); - - if (context.config.getBoolean ("journal.time")) - task->addAnnotation (context.config.get ("journal.time.start.annotation")); - - context.tdb.update (*task); - - if (context.config.getBoolean ("echo.command")) - out << "Started " - << task->id - << " '" - << task->get ("description") - << "'.\n"; - if (!nagged) - nagged = nag (*task); - - dependencyChainOnStart (*task); - } - else - { - out << "Task " - << task->id - << " '" - << task->get ("description") - << "' already started.\n"; - rc = 1; - } - } - - context.tdb.commit (); - context.tdb.unlock (); - - outs = out.str (); - return rc; -} - //////////////////////////////////////////////////////////////////////////////// int handleStop (std::string& outs) { diff --git a/src/commands/CMakeLists.txt b/src/commands/CMakeLists.txt index e5465cab8..9239ab358 100644 --- a/src/commands/CMakeLists.txt +++ b/src/commands/CMakeLists.txt @@ -29,6 +29,7 @@ set (commands_SRCS Command.cpp Command.h CmdProjects.cpp CmdProjects.h CmdShell.cpp CmdShell.h CmdShow.cpp CmdShow.h + CmdStart.cpp CmdStart.h CmdStatistics.cpp CmdStatistics.h CmdTags.cpp CmdTags.h CmdTip.cpp CmdTip.h diff --git a/src/commands/CmdHelp.cpp b/src/commands/CmdHelp.cpp index 4d30d452b..35e651eab 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 start ID"); - view.set (row, 2, "Marks specified task as started."); - row = view.addRow (); view.set (row, 1, "task stop ID"); view.set (row, 2, "Removes the 'start' time from a task."); diff --git a/src/commands/CmdStart.cpp b/src/commands/CmdStart.cpp new file mode 100644 index 000000000..92412040a --- /dev/null +++ b/src/commands/CmdStart.cpp @@ -0,0 +1,111 @@ +//////////////////////////////////////////////////////////////////////////////// +// 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; + +//////////////////////////////////////////////////////////////////////////////// +CmdStart::CmdStart () +{ + _keyword = "start"; + _usage = "task start ID"; + _description = "Marks specified task as started."; + _read_only = false; + _displays_id = false; +} + +//////////////////////////////////////////////////////////////////////////////// +int CmdStart::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; + } + + bool nagged = false; + std::vector ::iterator task; + for (task = tasks.begin (); task != tasks.end (); ++task) + { + if (! task->has ("start")) + { + char startTime[16]; + sprintf (startTime, "%u", (unsigned int) time (NULL)); + + task->set ("start", startTime); + + if (context.config.getBoolean ("journal.time")) + task->addAnnotation (context.config.get ("journal.time.start.annotation")); + + context.tdb.update (*task); + + if (context.config.getBoolean ("echo.command")) + out << "Started " + << task->id + << " '" + << task->get ("description") + << "'.\n"; + if (!nagged) + nagged = nag (*task); + + dependencyChainOnStart (*task); + } + else + { + out << "Task " + << task->id + << " '" + << task->get ("description") + << "' already started.\n"; + rc = 1; + } + } + + context.tdb.commit (); + context.tdb.unlock (); + + output = out.str (); + return rc; +} + +//////////////////////////////////////////////////////////////////////////////// diff --git a/src/commands/CmdStart.h b/src/commands/CmdStart.h new file mode 100644 index 000000000..b5bce29e3 --- /dev/null +++ b/src/commands/CmdStart.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_CMDSTART +#define INCLUDED_CMDSTART +#define L10N // Localization complete. + +#include +#include + +class CmdStart : public Command +{ +public: + CmdStart (); + int execute (const std::string&, std::string&); +}; + +#endif +//////////////////////////////////////////////////////////////////////////////// diff --git a/src/commands/Command.cpp b/src/commands/Command.cpp index 05c627a76..62be6b5d8 100644 --- a/src/commands/Command.cpp +++ b/src/commands/Command.cpp @@ -51,6 +51,7 @@ #include #include #include +#include #include #include #include @@ -96,6 +97,7 @@ void Command::factory (std::map & all) c = new CmdProjects (); all[c->keyword ()] = c; c = new CmdShell (); all[c->keyword ()] = c; c = new CmdShow (); all[c->keyword ()] = c; + c = new CmdStart (); all[c->keyword ()] = c; c = new CmdStatistics (); all[c->keyword ()] = c; c = new CmdTags (); all[c->keyword ()] = c; c = new CmdTip (); all[c->keyword ()] = c; diff --git a/src/main.h b/src/main.h index 9ffada23d..33ce07c0a 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 handleStart (std::string&); int handleStop (std::string&); int handleDuplicate (std::string&); void handleUndo ();