Index: shell/src/SubscriptionsCommand.cpp |
=================================================================== |
--- a/shell/src/SubscriptionsCommand.cpp |
+++ b/shell/src/SubscriptionsCommand.cpp |
@@ -3,8 +3,21 @@ |
#include "SubscriptionsCommand.h" |
-SubscriptionsCommand::SubscriptionsCommand(AdblockPlus::JsEngine& jsEngine) |
- : Command("subscriptions"), jsEngine(jsEngine) |
+namespace |
+{ |
+ typedef std::vector<AdblockPlus::Subscription> SubscriptionList; |
+ |
+ void ShowSubscriptionList(const SubscriptionList& subscriptions) |
+ { |
+ for (SubscriptionList::const_iterator it = subscriptions.begin(); |
+ it != subscriptions.end(); it++) |
+ std::cout << it->title << " - " << it->url << std::endl; |
+ } |
+} |
+ |
+SubscriptionsCommand::SubscriptionsCommand( |
+ AdblockPlus::FilterEngine& filterEngine) |
+ : Command("subscriptions"), filterEngine(filterEngine) |
{ |
} |
@@ -19,28 +32,32 @@ |
return; |
} |
- if (action == "update") |
- { |
- UpdateSubscriptions(); |
- return; |
- } |
- |
- std::string url; |
- argumentStream >> url; |
- |
if (action == "add") |
{ |
- AddSubscription(url); |
- return; |
+ std::string url; |
+ argumentStream >> url; |
+ std::string title; |
+ std::getline(argumentStream, title); |
+ if (url.size() || title.size()) |
+ AddSubscription(url, title); |
+ else |
+ ShowUsage(); |
} |
- |
- if (action == "remove") |
+ else if (action == "remove") |
{ |
- RemoveSubscription(url); |
- return; |
+ std::string url; |
+ argumentStream >> url; |
+ if (url.size()) |
+ RemoveSubscription(url); |
+ else |
+ ShowUsage(); |
} |
- |
- throw NoSuchCommandError(name + " " + action); |
+ else if (action == "update") |
+ UpdateSubscriptions(); |
+ else if (action == "fetch") |
+ FetchSubscriptions(); |
+ else |
+ throw NoSuchCommandError(name + " " + action); |
} |
std::string SubscriptionsCommand::GetDescription() const |
@@ -50,25 +67,41 @@ |
std::string SubscriptionsCommand::GetUsage() const |
{ |
- return name + " [add URL|remove URL|update]"; |
+ return name + " [add URL TITLE|remove URL|update|fetch]"; |
} |
void SubscriptionsCommand::ShowSubscriptions() |
{ |
- // TODO: List all subscriptions |
+ ShowSubscriptionList(filterEngine.GetSubscriptions()); |
} |
-void SubscriptionsCommand::AddSubscription(const std::string& url) |
+void SubscriptionsCommand::AddSubscription(const std::string& url, |
+ const std::string& title) |
{ |
- // TODO: Add a subscriptions |
+ filterEngine.AddSubscription(AdblockPlus::Subscription(url, title)); |
} |
void SubscriptionsCommand::RemoveSubscription(const std::string& url) |
{ |
- // TODO: Remove a subscription |
+ const AdblockPlus::Subscription* const subscription = |
+ filterEngine.FindSubscription(url); |
+ if (!subscription) |
+ { |
+ std::cout << "No subscription with URL '" << url << "'" << std::endl; |
+ return; |
+ } |
+ filterEngine.RemoveSubscription(*subscription); |
} |
void SubscriptionsCommand::UpdateSubscriptions() |
{ |
- // TODO: Update all subscriptions |
+ const SubscriptionList& subscriptions = filterEngine.GetSubscriptions(); |
+ for (SubscriptionList::const_iterator it = subscriptions.begin(); |
+ it != subscriptions.end(); it++) |
+ filterEngine.UpdateSubscriptionFilters(*it); |
} |
+ |
+void SubscriptionsCommand::FetchSubscriptions() |
+{ |
+ ShowSubscriptionList(filterEngine.FetchAvailableSubscriptions()); |
+} |