diff --git a/src/gui/handler.cpp b/src/gui/handler.cpp index 40257062..eb3fa58d 100644 --- a/src/gui/handler.cpp +++ b/src/gui/handler.cpp @@ -33,6 +33,8 @@ #include #include #include +#include +#include "include/wrapper/cef_closure_task.h" #include #include @@ -68,7 +70,6 @@ namespace loot { const CefString& request, bool persistent, CefRefPtr callback) { - if (request == "openReadme") { try { OpenReadme(); @@ -179,8 +180,7 @@ namespace loot { return true; } else if (request == "sortPlugins") { - callback->Success(SortPlugins()); - return true; + return CefPostTask(TID_FILE, base::Bind(&Handler::SortPlugins, base::Unretained(this), callback)); } else if (request == "getInitErrors") { YAML::Node node(g_app_state.InitErrors()); @@ -843,7 +843,7 @@ namespace loot { return "[]"; } - std::string Handler::SortPlugins() { + void Handler::SortPlugins(CefRefPtr callback) { //Set language. unsigned int language; if (g_app_state.GetSettings()["language"]) @@ -870,9 +870,9 @@ namespace loot { } if (node.size() > 0) - return JSON::stringify(node); + callback->Success(JSON::stringify(node)); else - return "null"; + callback->Success("null"); } YAML::Node Handler::GenerateDerivedMetadata(const Plugin& file, const Plugin& masterlist, const Plugin& userlist) { diff --git a/src/gui/handler.h b/src/gui/handler.h index d7d52ff3..8b556b5e 100644 --- a/src/gui/handler.h +++ b/src/gui/handler.h @@ -59,7 +59,7 @@ namespace loot { std::string GetGameData(); std::string UpdateMasterlist(); std::string ClearAllMetadata(); - std::string SortPlugins(); + void SortPlugins(CefRefPtr callback); // Handle queries with input arguments. bool HandleComplexQuery(CefRefPtr browser, YAML::Node& request, @@ -75,7 +75,9 @@ namespace loot { YAML::Node Handler::GenerateDerivedMetadata(const std::string& pluginName); YAML::Node Handler::GenerateDerivedMetadata(const Plugin& file, const Plugin& masterlist, const Plugin& userlist); - void CopyToClipboard(const std::string& text); + void CopyToClipboard(const std::string& text); + private: + IMPLEMENT_REFCOUNTING(Handler); }; class LootHandler : public CefClient,