Commands - _query

- Migrated handleQuery to CmdQuery.
This commit is contained in:
Paul Beckingham
2011-05-30 13:00:51 -04:00
parent 75e651626d
commit 4603bdb509
8 changed files with 129 additions and 44 deletions

View File

@@ -129,7 +129,6 @@ void Cmd::load ()
{ {
if (commands.size () == 0) if (commands.size () == 0)
{ {
commands.push_back ("_query");
commands.push_back ("calendar"); commands.push_back ("calendar");
commands.push_back ("delete"); commands.push_back ("delete");
commands.push_back ("done"); commands.push_back ("done");
@@ -195,8 +194,7 @@ void Cmd::allCommands (std::vector <std::string>& all) const
// Commands that do not directly modify the data files. // Commands that do not directly modify the data files.
bool Cmd::isReadOnlyCommand () bool Cmd::isReadOnlyCommand ()
{ {
if (command == "_query" || if (command == "calendar" ||
command == "calendar" ||
command == "push" || command == "push" ||
command == "timesheet" || command == "timesheet" ||
validCustom (command)) validCustom (command))

View File

@@ -259,7 +259,6 @@ int Context::dispatch (std::string &out)
handleMerge (out); } handleMerge (out); }
else if (cmd.command == "push") { handlePush (out); } else if (cmd.command == "push") { handlePush (out); }
else if (cmd.command == "pull") { handlePull (out); } else if (cmd.command == "pull") { handlePull (out); }
else if (cmd.command == "_query") { rc = handleQuery (out); }
else if (cmd.command == "" && else if (cmd.command == "" &&
sequence.size ()) { rc = handleModify (out); } sequence.size ()) { rc = handleModify (out); }

View File

@@ -51,45 +51,6 @@
extern Context context; extern Context context;
////////////////////////////////////////////////////////////////////////////////
int handleQuery (std::string& outs)
{
int rc = 0;
// Get all the tasks.
std::vector <Task> tasks;
context.tdb.lock (context.config.getBoolean ("locking"));
handleRecurrence ();
context.tdb.load (tasks, context.filter);
context.tdb.commit ();
context.tdb.unlock ();
// Filter sequence.
if (context.sequence.size ())
context.filter.applySequence (tasks, context.sequence);
if (tasks.size () == 0)
{
std::cout << "No matches.\n";
return 1;
}
// Note: "limit:" feature not supported.
// Compose output.
std::vector <Task>::iterator t;
for (t = tasks.begin (); t != tasks.end (); ++t)
{
if (t != tasks.begin ())
outs += ",\n";
outs += t->composeJSON (true);
}
outs += "\n";
return rc;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void handleUndo () void handleUndo ()
{ {

View File

@@ -29,6 +29,7 @@ set (commands_SRCS Command.cpp Command.h
CmdLogo.cpp CmdLogo.h CmdLogo.cpp CmdLogo.h
CmdPrepend.cpp CmdPrepend.h CmdPrepend.cpp CmdPrepend.h
CmdProjects.cpp CmdProjects.h CmdProjects.cpp CmdProjects.h
CmdQuery.cpp CmdQuery.h
CmdReports.cpp CmdReports.h CmdReports.cpp CmdReports.h
CmdShell.cpp CmdShell.h CmdShell.cpp CmdShell.h
CmdShow.cpp CmdShow.h CmdShow.cpp CmdShow.h

83
src/commands/CmdQuery.cpp Normal file
View File

@@ -0,0 +1,83 @@
////////////////////////////////////////////////////////////////////////////////
// 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 <Context.h>
#include <main.h>
#include <CmdQuery.h>
extern Context context;
////////////////////////////////////////////////////////////////////////////////
CmdQuery::CmdQuery ()
{
_keyword = "_query";
_usage = "task _query <external command>";
_description = "Executes external commands and scripts";
_read_only = true;
_displays_id = true;
}
////////////////////////////////////////////////////////////////////////////////
int CmdQuery::execute (const std::string&, std::string& output)
{
int rc = 0;
// Get all the tasks.
std::vector <Task> tasks;
context.tdb.lock (context.config.getBoolean ("locking"));
handleRecurrence ();
context.tdb.load (tasks, context.filter);
context.tdb.commit ();
context.tdb.unlock ();
// Filter sequence.
if (context.sequence.size ())
context.filter.applySequence (tasks, context.sequence);
if (tasks.size () == 0)
{
context.footnote ("No matches.");
return 1;
}
// Note: "limit:" feature not supported.
// Compose output.
std::vector <Task>::iterator t;
for (t = tasks.begin (); t != tasks.end (); ++t)
{
if (t != tasks.begin ())
output += ",\n";
output += t->composeJSON (true);
}
output += "\n";
return rc;
}
////////////////////////////////////////////////////////////////////////////////

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

View File

@@ -51,6 +51,7 @@
#include <CmdLogo.h> #include <CmdLogo.h>
#include <CmdPrepend.h> #include <CmdPrepend.h>
#include <CmdProjects.h> #include <CmdProjects.h>
#include <CmdQuery.h>
#include <CmdReports.h> #include <CmdReports.h>
#include <CmdShell.h> #include <CmdShell.h>
#include <CmdShow.h> #include <CmdShow.h>
@@ -103,6 +104,7 @@ void Command::factory (std::map <std::string, Command*>& all)
c = new CmdLogo (); all[c->keyword ()] = c; c = new CmdLogo (); all[c->keyword ()] = c;
c = new CmdPrepend (); all[c->keyword ()] = c; c = new CmdPrepend (); all[c->keyword ()] = c;
c = new CmdProjects (); all[c->keyword ()] = c; c = new CmdProjects (); all[c->keyword ()] = c;
c = new CmdQuery (); all[c->keyword ()] = c;
c = new CmdReports (); all[c->keyword ()] = c; c = new CmdReports (); 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;

View File

@@ -52,7 +52,6 @@ bool nag (Task&);
// command.cpp // command.cpp
int handleDone (std::string&); int handleDone (std::string&);
int handleModify (std::string&); int handleModify (std::string&);
int handleQuery (std::string&);
int handleDelete (std::string&); int handleDelete (std::string&);
void handleUndo (); void handleUndo ();
void handleMerge (std::string&); void handleMerge (std::string&);