| 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()); |
| +} |