LEFT | RIGHT |
(no file at all) | |
1 #include <iostream> | 1 #include <iostream> |
2 #include <sstream> | 2 #include <sstream> |
3 | 3 |
4 #include "SubscriptionsCommand.h" | 4 #include "SubscriptionsCommand.h" |
5 | 5 |
6 SubscriptionsCommand::SubscriptionsCommand(AdblockPlus::JsEngine& jsEngine) | 6 namespace |
7 : Command("subscriptions"), jsEngine(jsEngine) | 7 { |
| 8 typedef std::vector<AdblockPlus::Subscription> SubscriptionList; |
| 9 |
| 10 void ShowSubscriptionList(const SubscriptionList& subscriptions) |
| 11 { |
| 12 for (SubscriptionList::const_iterator it = subscriptions.begin(); |
| 13 it != subscriptions.end(); it++) |
| 14 std::cout << it->title << " - " << it->url << std::endl; |
| 15 } |
| 16 } |
| 17 |
| 18 SubscriptionsCommand::SubscriptionsCommand( |
| 19 AdblockPlus::FilterEngine& filterEngine) |
| 20 : Command("subscriptions"), filterEngine(filterEngine) |
8 { | 21 { |
9 } | 22 } |
10 | 23 |
11 void SubscriptionsCommand::operator()(const std::string& arguments) | 24 void SubscriptionsCommand::operator()(const std::string& arguments) |
12 { | 25 { |
13 std::istringstream argumentStream(arguments); | 26 std::istringstream argumentStream(arguments); |
14 std::string action; | 27 std::string action; |
15 argumentStream >> action; | 28 argumentStream >> action; |
16 if (!action.size()) | 29 if (!action.size()) |
17 { | 30 { |
18 ShowSubscriptions(); | 31 ShowSubscriptions(); |
19 return; | 32 return; |
20 } | 33 } |
21 | 34 |
22 if (action == "update") | |
23 { | |
24 UpdateSubscriptions(); | |
25 return; | |
26 } | |
27 | |
28 std::string url; | |
29 argumentStream >> url; | |
30 | |
31 if (action == "add") | 35 if (action == "add") |
32 { | 36 { |
33 AddSubscription(url); | 37 std::string url; |
34 return; | 38 argumentStream >> url; |
| 39 std::string title; |
| 40 std::getline(argumentStream, title); |
| 41 if (url.size() || title.size()) |
| 42 AddSubscription(url, title); |
| 43 else |
| 44 ShowUsage(); |
35 } | 45 } |
36 | 46 else if (action == "remove") |
37 if (action == "remove") | |
38 { | 47 { |
39 RemoveSubscription(url); | 48 std::string url; |
40 return; | 49 argumentStream >> url; |
| 50 if (url.size()) |
| 51 RemoveSubscription(url); |
| 52 else |
| 53 ShowUsage(); |
41 } | 54 } |
42 | 55 else if (action == "update") |
43 throw NoSuchCommandError(name + " " + action); | 56 UpdateSubscriptions(); |
| 57 else if (action == "fetch") |
| 58 FetchSubscriptions(); |
| 59 else |
| 60 throw NoSuchCommandError(name + " " + action); |
44 } | 61 } |
45 | 62 |
46 std::string SubscriptionsCommand::GetDescription() const | 63 std::string SubscriptionsCommand::GetDescription() const |
47 { | 64 { |
48 return "List and manage subscriptions"; | 65 return "List and manage subscriptions"; |
49 } | 66 } |
50 | 67 |
51 std::string SubscriptionsCommand::GetUsage() const | 68 std::string SubscriptionsCommand::GetUsage() const |
52 { | 69 { |
53 return name + " [add URL|remove URL|update]"; | 70 return name + " [add URL TITLE|remove URL|update|fetch]"; |
54 } | 71 } |
55 | 72 |
56 void SubscriptionsCommand::ShowSubscriptions() | 73 void SubscriptionsCommand::ShowSubscriptions() |
57 { | 74 { |
58 // TODO: List all subscriptions | 75 ShowSubscriptionList(filterEngine.GetSubscriptions()); |
59 } | 76 } |
60 | 77 |
61 void SubscriptionsCommand::AddSubscription(const std::string& url) | 78 void SubscriptionsCommand::AddSubscription(const std::string& url, |
| 79 const std::string& title) |
62 { | 80 { |
63 // TODO: Add a subscriptions | 81 filterEngine.AddSubscription(AdblockPlus::Subscription(url, title)); |
64 } | 82 } |
65 | 83 |
66 void SubscriptionsCommand::RemoveSubscription(const std::string& url) | 84 void SubscriptionsCommand::RemoveSubscription(const std::string& url) |
67 { | 85 { |
68 // TODO: Remove a subscription | 86 const AdblockPlus::Subscription* const subscription = |
| 87 filterEngine.FindSubscription(url); |
| 88 if (!subscription) |
| 89 { |
| 90 std::cout << "No subscription with URL '" << url << "'" << std::endl; |
| 91 return; |
| 92 } |
| 93 filterEngine.RemoveSubscription(*subscription); |
69 } | 94 } |
70 | 95 |
71 void SubscriptionsCommand::UpdateSubscriptions() | 96 void SubscriptionsCommand::UpdateSubscriptions() |
72 { | 97 { |
73 // TODO: Update all subscriptions | 98 const SubscriptionList& subscriptions = filterEngine.GetSubscriptions(); |
| 99 for (SubscriptionList::const_iterator it = subscriptions.begin(); |
| 100 it != subscriptions.end(); it++) |
| 101 filterEngine.UpdateSubscriptionFilters(*it); |
74 } | 102 } |
| 103 |
| 104 void SubscriptionsCommand::FetchSubscriptions() |
| 105 { |
| 106 ShowSubscriptionList(filterEngine.FetchAvailableSubscriptions()); |
| 107 } |
LEFT | RIGHT |