Commands - start

- Migrated handleStart to CmdStart.
This commit is contained in:
Paul Beckingham 2011-05-30 01:11:34 -04:00
parent 0429949de5
commit 86ab605bd4
9 changed files with 156 additions and 73 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 ("start");
commands.push_back ("stop"); commands.push_back ("stop");
commands.push_back ("summary"); commands.push_back ("summary");
commands.push_back ("timesheet"); commands.push_back ("timesheet");
@ -230,7 +229,6 @@ bool Cmd::isWriteCommand ()
command == "duplicate" || command == "duplicate" ||
command == "import" || command == "import" ||
command == "pull" || command == "pull" ||
command == "start" ||
command == "stop" || 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 == "start") { rc = handleStart (out); }
else if (cmd.command == "stop") { rc = handleStop (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); }

View file

@ -551,71 +551,6 @@ int handleDelete (std::string& outs)
return rc; return rc;
} }
////////////////////////////////////////////////////////////////////////////////
int handleStart (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;
}
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) int handleStop (std::string& outs)
{ {

View file

@ -29,6 +29,7 @@ set (commands_SRCS Command.cpp Command.h
CmdProjects.cpp CmdProjects.h CmdProjects.cpp CmdProjects.h
CmdShell.cpp CmdShell.h CmdShell.cpp CmdShell.h
CmdShow.cpp CmdShow.h CmdShow.cpp CmdShow.h
CmdStart.cpp CmdStart.h
CmdStatistics.cpp CmdStatistics.h CmdStatistics.cpp CmdStatistics.h
CmdTags.cpp CmdTags.h CmdTags.cpp CmdTags.h
CmdTip.cpp CmdTip.h CmdTip.cpp CmdTip.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 start ID");
view.set (row, 2, "Marks specified task as started.");
row = view.addRow (); row = view.addRow ();
view.set (row, 1, "task stop ID"); view.set (row, 1, "task stop ID");
view.set (row, 2, "Removes the 'start' time from a task."); view.set (row, 2, "Removes the 'start' time from a task.");

111
src/commands/CmdStart.cpp Normal file
View file

@ -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 <sstream>
#include <Context.h>
#include <main.h>
#include <CmdStart.h>
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 <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;
}
bool nagged = false;
std::vector <Task>::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;
}
////////////////////////////////////////////////////////////////////////////////

42
src/commands/CmdStart.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_CMDSTART
#define INCLUDED_CMDSTART
#define L10N // Localization complete.
#include <string>
#include <Command.h>
class CmdStart : public Command
{
public:
CmdStart ();
int execute (const std::string&, std::string&);
};
#endif
////////////////////////////////////////////////////////////////////////////////

View file

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

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 handleStart (std::string&);
int handleStop (std::string&); int handleStop (std::string&);
int handleDuplicate (std::string&); int handleDuplicate (std::string&);
void handleUndo (); void handleUndo ();