| Index: src/FilterEngine.cpp |
| =================================================================== |
| --- a/src/FilterEngine.cpp |
| +++ b/src/FilterEngine.cpp |
| @@ -16,16 +16,17 @@ |
| */ |
| #include <algorithm> |
| #include <cctype> |
| #include <functional> |
| #include <string> |
| #include <AdblockPlus.h> |
| +#include "Thread.h" |
| using namespace AdblockPlus; |
| extern std::string jsSources[]; |
| Filter::Filter(JsValuePtr value) |
| : JsValue(value) |
| { |
| @@ -127,25 +128,32 @@ bool Subscription::IsUpdating() |
| return result->AsBool(); |
| } |
| bool Subscription::operator==(const Subscription& subscription) const |
| { |
| return GetProperty("url")->AsString() == subscription.GetProperty("url")->AsString(); |
| } |
| -FilterEngine::FilterEngine(JsEnginePtr jsEngine) : jsEngine(jsEngine) |
| +FilterEngine::FilterEngine(JsEnginePtr jsEngine) |
| + : jsEngine(jsEngine), initialized(false) |
| { |
| + jsEngine->SetEventCallback("init", std::tr1::bind(&FilterEngine::InitDone, this)); |
| for (int i = 0; !jsSources[i].empty(); i += 2) |
| jsEngine->Evaluate(jsSources[i + 1], jsSources[i]); |
| + |
| + // TODO: This should really be implemented via a conditional variable |
| + while (!initialized) |
| + ::Sleep(10); |
| } |
| -bool FilterEngine::IsInitialized() const |
| +void FilterEngine::InitDone() |
| { |
| - return jsEngine->Evaluate("_abpInitialized")->AsBool(); |
| + jsEngine->RemoveEventCallback("init"); |
| + initialized = true; |
| } |
| FilterPtr FilterEngine::GetFilter(const std::string& text) |
| { |
| JsValuePtr func = jsEngine->Evaluate("API.getFilterFromText"); |
| JsValueList params; |
| params.push_back(jsEngine->NewValue(text)); |
| return FilterPtr(new Filter(func->Call(params))); |