| Index: src/plugin/AdblockPlusClient.cpp |
| =================================================================== |
| --- a/src/plugin/AdblockPlusClient.cpp |
| +++ b/src/plugin/AdblockPlusClient.cpp |
| @@ -73,16 +73,47 @@ namespace |
| } |
| } |
| catch(std::exception e) |
| { |
| DEBUG_GENERAL(e.what()); |
| } |
| return result; |
| } |
| + |
| + std::vector<std::string> ReadStrings(Communication::InputBuffer& message) |
| + { |
| + int32_t count; |
| + message >> count; |
| + |
| + std::vector<std::string> result; |
| + for (int32_t i = 0; i < count; i++) |
| + { |
| + std::string str; |
| + message >> str; |
| + result.push_back(str); |
| + } |
| + return result; |
| + } |
| + |
| + std::vector<SubscriptionDescription> ReadSubscriptions(Communication::InputBuffer& message) |
| + { |
| + int32_t count; |
| + message >> count; |
| + |
| + std::vector<SubscriptionDescription> result; |
| + for (int32_t i = 0; i < count; i++) |
| + { |
| + SubscriptionDescription description; |
| + message >> description.url >> description.title |
| + >> description.specialization >> description.listed; |
| + result.push_back(description); |
| + } |
| + return result; |
| + } |
| } |
| CAdblockPlusClient* CAdblockPlusClient::s_instance = NULL; |
| CAdblockPlusClient::CAdblockPlusClient() : CPluginClientBase() |
| { |
| m_filter = std::auto_ptr<CPluginFilter>(new CPluginFilter()); |
| } |
| @@ -212,16 +243,23 @@ int CAdblockPlusClient::GetIEVersion() |
| Communication::InputBuffer CallAdblockPlusEngineProcedure(Communication::OutputBuffer& message) |
| { |
| std::auto_ptr<Communication::Pipe> pipe = OpenAdblockPlusEnginePipe(); |
| pipe->WriteMessage(message); |
| return pipe->ReadMessage(); |
| } |
| +Communication::InputBuffer CallAdblockPlusEngineProcedure(const std::string& proc) |
| +{ |
| + Communication::OutputBuffer message; |
| + message << proc; |
| + return CallAdblockPlusEngineProcedure(message); |
| +} |
| + |
| bool CAdblockPlusClient::Matches(const std::string& url, const std::string& contentType, const std::string& domain) |
| { |
| Communication::OutputBuffer request; |
| request << std::string("Matches") << url << contentType << domain; |
| try |
| { |
| Communication::InputBuffer response = CallAdblockPlusEngineProcedure(request); |
| @@ -240,56 +278,101 @@ bool CAdblockPlusClient::Matches(const s |
| std::vector<std::string> CAdblockPlusClient::GetElementHidingSelectors(const std::string& domain) |
| { |
| Communication::OutputBuffer request; |
| request << std::string("GetElementHidingSelectors") << domain; |
| try |
| { |
| Communication::InputBuffer response = CallAdblockPlusEngineProcedure(request); |
| - |
| - std::vector<std::string> selectors; |
| - int32_t length; |
| - response >> length; |
| - for (int32_t i = 0; i < length; i++) |
| - { |
| - std::string selector; |
| - response >> selector; |
| - selectors.push_back(selector); |
| - } |
| - return selectors; |
| + return ReadStrings(response); |
| } |
| catch (const std::exception& e) |
| { |
| DEBUG_GENERAL(e.what()); |
| return std::vector<std::string>(); |
| } |
| } |
| -std::vector<AdblockPlus::SubscriptionPtr> CAdblockPlusClient::FetchAvailableSubscriptions() |
| +std::vector<SubscriptionDescription> CAdblockPlusClient::FetchAvailableSubscriptions() |
| { |
| - //TODO: implement this |
| - return std::vector<AdblockPlus::SubscriptionPtr>(); |
| + try |
| + { |
| + Communication::InputBuffer response = CallAdblockPlusEngineProcedure("FetchAvailableSubscriptions"); |
| + return ReadSubscriptions(response); |
| + } |
| + catch (const std::exception& e) |
| + { |
| + DEBUG_GENERAL(e.what()); |
| + return std::vector<SubscriptionDescription>(); |
| + } |
| } |
| -std::vector<AdblockPlus::FilterPtr> CAdblockPlusClient::GetListedFilters() |
| +std::vector<SubscriptionDescription> CAdblockPlusClient::GetListedSubscriptions() |
| { |
| - //TODO: implement this |
| - return std::vector<AdblockPlus::FilterPtr>(); |
| + try |
| + { |
| + Communication::InputBuffer response = CallAdblockPlusEngineProcedure("GetListedSubscriptions"); |
| + return ReadSubscriptions(response); |
| + } |
| + catch (const std::exception& e) |
| + { |
| + DEBUG_GENERAL(e.what()); |
| + return std::vector<SubscriptionDescription>(); |
| + } |
| } |
| -AdblockPlus::FilterPtr CAdblockPlusClient::GetFilter(std::string text) |
| +void CAdblockPlusClient::SetSubscription(std::string url) |
| { |
| - //TODO: implement this |
| - return AdblockPlus::FilterPtr(); |
| + Communication::OutputBuffer request; |
| + request << std::string("SetSubscription") << url; |
| + |
| + try |
| + { |
| + CallAdblockPlusEngineProcedure(request); |
| + } |
| + catch (const std::exception& e) |
| + { |
| + DEBUG_GENERAL(e.what()); |
| + } |
| } |
| -std::vector<AdblockPlus::SubscriptionPtr> CAdblockPlusClient::GetListedSubscriptions() |
| +void CAdblockPlusClient::UpdateAllSubscriptions() |
| { |
| - //TODO: implement this |
| - return std::vector<AdblockPlus::SubscriptionPtr>(); |
| + try |
| + { |
| + CallAdblockPlusEngineProcedure("UpdateAllSubscriptions"); |
| + } |
| + catch (const std::exception& e) |
| + { |
| + DEBUG_GENERAL(e.what()); |
| + } |
| } |
| -AdblockPlus::SubscriptionPtr CAdblockPlusClient::GetSubscription(std::string url) |
| +std::vector<std::string> CAdblockPlusClient::GetExceptionDomains() |
| { |
| - //TODO: imlement this |
| - return AdblockPlus::SubscriptionPtr(); |
| + try |
| + { |
| + Communication::InputBuffer response = CallAdblockPlusEngineProcedure("GetExceptionDomains"); |
| + return ReadStrings(response); |
| + } |
| + catch (const std::exception& e) |
| + { |
| + DEBUG_GENERAL(e.what()); |
| + return std::vector<std::string>(); |
| + } |
| } |
| + |
| +void CAdblockPlusClient::AddFilter(const std::string& text) |
| +{ |
| + Communication::OutputBuffer request; |
| + request << std::string("AddFilter") << text; |
| + |
| + try |
| + { |
| + CallAdblockPlusEngineProcedure(request); |
| + } |
| + catch (const std::exception& e) |
| + { |
| + DEBUG_GENERAL(e.what()); |
| + } |
| +} |
| + |