| Index: shell/src/FiltersCommand.cpp | 
| =================================================================== | 
| new file mode 100644 | 
| --- /dev/null | 
| +++ b/shell/src/FiltersCommand.cpp | 
| @@ -0,0 +1,90 @@ | 
| +#include <iostream> | 
| +#include <sstream> | 
| + | 
| +#include "FiltersCommand.h" | 
| + | 
| +namespace | 
| +{ | 
| +  typedef std::vector<AdblockPlus::Filter*> FilterList; | 
| + | 
| +  void ShowFilterList(const FilterList& filters) | 
| +  { | 
| +    for (FilterList::const_iterator it = filters.begin(); | 
| +         it != filters.end(); it++) | 
| +    { | 
| +      std::cout << (*it)->GetProperty("text", "(no text)") << " - " << | 
| +          (*it)->GetProperty("type", "(no type)") << std::endl; | 
| +    } | 
| +  } | 
| +} | 
| + | 
| +FiltersCommand::FiltersCommand( | 
| +  AdblockPlus::FilterEngine& filterEngine) | 
| +  : Command("filters"), filterEngine(filterEngine) | 
| +{ | 
| +} | 
| + | 
| +void FiltersCommand::operator()(const std::string& arguments) | 
| +{ | 
| +  std::istringstream argumentStream(arguments); | 
| +  std::string action; | 
| +  argumentStream >> action; | 
| +  if (!action.size()) | 
| +  { | 
| +    ShowFilters(); | 
| +    return; | 
| +  } | 
| + | 
| +  if (action == "add") | 
| +  { | 
| +    std::string text; | 
| +    std::getline(argumentStream, text); | 
| +    if (text.size()) | 
| +      AddFilter(text); | 
| +    else | 
| +      ShowUsage(); | 
| +  } | 
| +  else if (action == "remove") | 
| +  { | 
| +    std::string text; | 
| +    std::getline(argumentStream, text); | 
| +    if (text.size()) | 
| +      RemoveFilter(text); | 
| +    else | 
| +      ShowUsage(); | 
| +  } | 
| +  else | 
| +    throw NoSuchCommandError(name + " " + action); | 
| +} | 
| + | 
| +std::string FiltersCommand::GetDescription() const | 
| +{ | 
| +  return "List and manage custom filters"; | 
| +} | 
| + | 
| +std::string FiltersCommand::GetUsage() const | 
| +{ | 
| +  return name + " [add FILTER|remove FILTER]"; | 
| +} | 
| + | 
| +void FiltersCommand::ShowFilters() | 
| +{ | 
| +  ShowFilterList(filterEngine.GetListedFilters()); | 
| +} | 
| + | 
| +void FiltersCommand::AddFilter(const std::string& text) | 
| +{ | 
| +  AdblockPlus::Filter& filter = filterEngine.GetFilter(text); | 
| +  filter.AddToList(); | 
| +} | 
| + | 
| +void FiltersCommand::RemoveFilter(const std::string& text) | 
| +{ | 
| +  AdblockPlus::Filter& filter = filterEngine.GetFilter(text); | 
| +  if (!filter.IsListed()) | 
| +  { | 
| +    std::cout << "No such filter '" << text << "'" << std::endl; | 
| +    return; | 
| +  } | 
| +  filter.RemoveFromList(); | 
| +} | 
|  |