Commands - stop

- Migrated handleStop to CmdStop.
This commit is contained in:
Paul Beckingham 2011-05-30 01:19:11 -04:00
parent 86ab605bd4
commit 9e3c6f5bc1
9 changed files with 148 additions and 65 deletions

View file

@ -140,7 +140,6 @@ void Cmd::load ()
commands.push_back ("done"); commands.push_back ("done");
commands.push_back ("duplicate"); commands.push_back ("duplicate");
commands.push_back ("import"); commands.push_back ("import");
commands.push_back ("stop");
commands.push_back ("summary"); commands.push_back ("summary");
commands.push_back ("timesheet"); commands.push_back ("timesheet");
commands.push_back ("undo"); commands.push_back ("undo");
@ -229,7 +228,6 @@ bool Cmd::isWriteCommand ()
command == "duplicate" || command == "duplicate" ||
command == "import" || command == "import" ||
command == "pull" || command == "pull" ||
command == "stop" ||
command == "undo") command == "undo")
return true; return true;

View file

@ -253,7 +253,6 @@ int Context::dispatch (std::string &out)
else if (cmd.command == "timesheet") { rc = handleReportTimesheet (out); } else if (cmd.command == "timesheet") { rc = handleReportTimesheet (out); }
else if (cmd.command == "done") { rc = handleDone (out); } else if (cmd.command == "done") { rc = handleDone (out); }
else if (cmd.command == "delete") { rc = handleDelete (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.csv") { rc = handleExportCSV (out); }
else if (cmd.command == "export.ical") { rc = handleExportiCal (out); } else if (cmd.command == "export.ical") { rc = handleExportiCal (out); }
else if (cmd.command == "export.yaml") { rc = handleExportYAML (out); } else if (cmd.command == "export.yaml") { rc = handleExportYAML (out); }

View file

@ -551,63 +551,6 @@ int handleDelete (std::string& outs)
return rc; return rc;
} }
////////////////////////////////////////////////////////////////////////////////
int handleStop (std::string& outs)
{
int rc = 0;
std::stringstream out;
context.disallowModification ();
std::vector <Task> 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) int handleDone (std::string& outs)
{ {

View file

@ -31,6 +31,7 @@ set (commands_SRCS Command.cpp Command.h
CmdShow.cpp CmdShow.h CmdShow.cpp CmdShow.h
CmdStart.cpp CmdStart.h CmdStart.cpp CmdStart.h
CmdStatistics.cpp CmdStatistics.h CmdStatistics.cpp CmdStatistics.h
CmdStop.cpp CmdStop.h
CmdTags.cpp CmdTags.h CmdTags.cpp CmdTags.h
CmdTip.cpp CmdTip.h CmdTip.cpp CmdTip.h
CmdUrgency.cpp CmdUrgency.h CmdUrgency.cpp CmdUrgency.h

View file

@ -115,10 +115,6 @@ int CmdHelp::execute (const std::string&, std::string& output)
view.set (row, 1, "task delete ID"); view.set (row, 1, "task delete ID");
view.set (row, 2, "Deletes the specified task."); 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 (); row = view.addRow ();
view.set (row, 1, "task done ID [tags] [attrs] [desc...]"); view.set (row, 1, "task done ID [tags] [attrs] [desc...]");
view.set (row, 2, "Marks the specified task as completed."); view.set (row, 2, "Marks the specified task as completed.");

103
src/commands/CmdStop.cpp Normal file
View file

@ -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 <sstream>
#include <Context.h>
#include <main.h>
#include <CmdStop.h>
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 <Task> 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 <Task>::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;
}
////////////////////////////////////////////////////////////////////////////////

42
src/commands/CmdStop.h Normal file
View file

@ -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 <string>
#include <Command.h>
class CmdStop : public Command
{
public:
CmdStop ();
int execute (const std::string&, std::string&);
};
#endif
////////////////////////////////////////////////////////////////////////////////

View file

@ -53,6 +53,7 @@
#include <CmdShow.h> #include <CmdShow.h>
#include <CmdStart.h> #include <CmdStart.h>
#include <CmdStatistics.h> #include <CmdStatistics.h>
#include <CmdStop.h>
#include <CmdTags.h> #include <CmdTags.h>
#include <CmdTip.h> #include <CmdTip.h>
#include <CmdUrgency.h> #include <CmdUrgency.h>
@ -99,6 +100,7 @@ void Command::factory (std::map <std::string, Command*>& all)
c = new CmdShow (); all[c->keyword ()] = c; c = new CmdShow (); all[c->keyword ()] = c;
c = new CmdStart (); all[c->keyword ()] = c; c = new CmdStart (); all[c->keyword ()] = c;
c = new CmdStatistics (); 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 CmdTags (); all[c->keyword ()] = c;
c = new CmdTip (); all[c->keyword ()] = c; c = new CmdTip (); all[c->keyword ()] = c;
c = new CmdUrgency (); all[c->keyword ()] = c; c = new CmdUrgency (); all[c->keyword ()] = c;

View file

@ -56,7 +56,6 @@ int handleCompletionConfig (std::string&);
int handleQuery (std::string&); int handleQuery (std::string&);
int handleConfig (std::string&); int handleConfig (std::string&);
int handleDelete (std::string&); int handleDelete (std::string&);
int handleStop (std::string&);
int handleDuplicate (std::string&); int handleDuplicate (std::string&);
void handleUndo (); void handleUndo ();
void handleMerge (std::string&); void handleMerge (std::string&);