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))); |