| Left: | ||
| Right: |
| OLD | NEW |
|---|---|
| 1 #include <AdblockPlus.h> | 1 #include <AdblockPlus.h> |
| 2 #include <functional> | 2 #include <functional> |
| 3 #include <vector> | 3 #include <vector> |
| 4 #include <Windows.h> | 4 #include <Windows.h> |
| 5 | 5 |
| 6 #include "../shared/AutoHandle.h" | 6 #include "../shared/AutoHandle.h" |
| 7 #include "../shared/Communication.h" | 7 #include "../shared/Communication.h" |
| 8 #include "../shared/Dictionary.h" | 8 #include "../shared/Dictionary.h" |
| 9 #include "../shared/Utils.h" | 9 #include "../shared/Utils.h" |
| 10 #include "../shared/Version.h" | 10 #include "../shared/Version.h" |
| 11 #include "../shared/CriticalSection.h" | 11 #include "../shared/CriticalSection.h" |
| 12 #include "Debug.h" | 12 #include "Debug.h" |
| 13 #include "Updater.h" | 13 #include "Updater.h" |
| 14 | 14 |
|
Felix Dahlke
2013/09/11 15:22:59
Super nit, but I think a single empty line between
| |
| 15 | |
| 16 | |
| 15 namespace | 17 namespace |
| 16 { | 18 { |
| 17 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; | 19 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; |
| 18 std::auto_ptr<Updater> updater; | 20 std::auto_ptr<Updater> updater; |
| 19 int activeConnections = 0; | 21 int activeConnections = 0; |
| 20 CriticalSection activeConnectionsLock; | 22 CriticalSection activeConnectionsLock; |
| 23 HWND callbackWindow; | |
| 21 | 24 |
| 22 void WriteStrings(Communication::OutputBuffer& response, | 25 void WriteStrings(Communication::OutputBuffer& response, |
| 23 const std::vector<std::string>& strings) | 26 const std::vector<std::string>& strings) |
| 24 { | 27 { |
| 25 int32_t count = static_cast<int32_t>(strings.size()); | 28 int32_t count = static_cast<int32_t>(strings.size()); |
| 26 response << count; | 29 response << count; |
| 27 for (int32_t i = 0; i < count; i++) | 30 for (int32_t i = 0; i < count; i++) |
| 28 response << strings[i]; | 31 response << strings[i]; |
| 29 } | 32 } |
| 30 | 33 |
| 31 void WriteSubscriptions(Communication::OutputBuffer& response, | 34 void WriteSubscriptions(Communication::OutputBuffer& response, |
| 32 const std::vector<AdblockPlus::SubscriptionPtr>& subscriptions) | 35 const std::vector<AdblockPlus::SubscriptionPtr>& subscriptions) |
| 33 { | 36 { |
| 34 int32_t count = static_cast<int32_t>(subscriptions.size()); | 37 int32_t count = static_cast<int32_t>(subscriptions.size()); |
| 35 response << count; | 38 response << count; |
| 36 for (int32_t i = 0; i < count; i++) | 39 for (int32_t i = 0; i < count; i++) |
| 37 { | 40 { |
| 38 AdblockPlus::SubscriptionPtr subscription = subscriptions[i]; | 41 AdblockPlus::SubscriptionPtr subscription = subscriptions[i]; |
| 39 response << subscription->GetProperty("url")->AsString() | 42 response << subscription->GetProperty("url")->AsString() |
| 40 << subscription->GetProperty("title")->AsString() | 43 << subscription->GetProperty("title")->AsString() |
| 41 << subscription->GetProperty("specialization")->AsString() | 44 << subscription->GetProperty("specialization")->AsString() |
| 42 << subscription->IsListed(); | 45 << subscription->IsListed(); |
| 43 } | 46 } |
| 44 } | 47 } |
| 45 | 48 |
| 46 bool updateAvailable; | 49 bool updateAvailable; |
| 50 volatile bool checkingForUpdate = false; | |
|
Felix Dahlke
2013/09/11 15:22:59
Why use the volatile keyword here? I doubt it's wh
| |
| 47 void UpdateCallback(const std::string res) | 51 void UpdateCallback(const std::string res) |
| 48 { | 52 { |
| 53 checkingForUpdate = false; | |
|
Wladimir Palant
2013/09/11 13:07:06
This needs to be set when the function is finished
| |
| 49 if (updateAvailable) | 54 if (updateAvailable) |
| 55 { | |
| 56 if (callbackWindow != 0) | |
| 57 { | |
| 58 SendMessage(callbackWindow, WM_DOWNLOADING_UPDATE, 0, 0); | |
| 59 callbackWindow = 0; | |
| 60 } | |
| 50 return; | 61 return; |
| 62 } | |
| 51 Dictionary* dictionary = Dictionary::GetInstance(); | 63 Dictionary* dictionary = Dictionary::GetInstance(); |
|
Wladimir Palant
2013/09/11 13:07:06
The dictionary is no longer being used.
| |
| 52 if (res.length() == 0) | 64 if (res.length() == 0) |
| 53 { | 65 { |
| 54 std::wstring upToDateText = dictionary->Lookup("updater", "update-already- up-to-date-text"); | 66 if (callbackWindow != 0) |
| 55 std::wstring upToDateTitle = dictionary->Lookup("updater", "update-already -up-to-date-title"); | 67 { |
| 56 MessageBoxW(NULL, upToDateText.c_str(), upToDateTitle.c_str(), MB_OK); | 68 SendMessage(callbackWindow, WM_ALREADY_UP_TO_DATE, 0, 0); |
| 69 } | |
| 57 } | 70 } |
| 58 else | 71 else |
| 59 { | 72 { |
| 60 std::wstring errorText = dictionary->Lookup("updater", "update-error-text" ); | 73 if (callbackWindow != 0) |
| 61 std::wstring errorTitle = dictionary->Lookup("updater", "update-error-titl e"); | 74 { |
| 62 ReplaceString(errorText, L"?1?", ToUtf16String(res)); | 75 SendMessage(callbackWindow, WM_UPDATE_CHECK_ERROR, 0, 0); |
| 63 MessageBoxW(NULL, errorText.c_str(), errorTitle.c_str(), MB_OK); | 76 } |
| 64 } | 77 } |
| 78 callbackWindow = 0; | |
| 65 return; | 79 return; |
| 66 } | 80 } |
| 67 | 81 |
| 68 | 82 |
| 69 CriticalSection firstRunLock; | 83 CriticalSection firstRunLock; |
| 70 bool firstRunActionExecuted = false; | 84 bool firstRunActionExecuted = false; |
| 71 Communication::OutputBuffer HandleRequest(Communication::InputBuffer& request) | 85 Communication::OutputBuffer HandleRequest(Communication::InputBuffer& request) |
| 72 { | 86 { |
| 73 Communication::OutputBuffer response; | 87 Communication::OutputBuffer response; |
| 74 | 88 |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 236 } | 250 } |
| 237 else | 251 else |
| 238 { | 252 { |
| 239 // Report failure | 253 // Report failure |
| 240 response << false; | 254 response << false; |
| 241 } | 255 } |
| 242 break; | 256 break; |
| 243 } | 257 } |
| 244 case Communication::PROC_CHECK_FOR_UPDATES: | 258 case Communication::PROC_CHECK_FOR_UPDATES: |
| 245 { | 259 { |
| 260 request >> (int32_t&)callbackWindow; | |
| 246 updateAvailable = false; | 261 updateAvailable = false; |
|
Wladimir Palant
2013/09/11 13:07:06
Setting updateAvailable definitely belongs into th
| |
| 247 filterEngine->ForceUpdateCheck(UpdateCallback); | 262 if (!checkingForUpdate) |
| 263 { | |
| 264 checkingForUpdate = true; | |
|
Wladimir Palant
2013/09/11 13:07:06
This is a race condition - another PROC_CHECK_FOR_
| |
| 265 filterEngine->ForceUpdateCheck(UpdateCallback); | |
| 266 } | |
| 248 break; | 267 break; |
| 249 } | 268 } |
| 250 case Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED: | 269 case Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED: |
| 251 { | 270 { |
| 252 CriticalSection::Lock lock(firstRunLock); | 271 CriticalSection::Lock lock(firstRunLock); |
| 253 if (!firstRunActionExecuted && filterEngine->IsFirstRun()) | 272 if (!firstRunActionExecuted && filterEngine->IsFirstRun()) |
| 254 { | 273 { |
| 255 response << true; | 274 response << true; |
| 256 firstRunActionExecuted = true; | 275 firstRunActionExecuted = true; |
| 257 } | 276 } |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 406 } | 425 } |
| 407 catch (std::runtime_error e) | 426 catch (std::runtime_error e) |
| 408 { | 427 { |
| 409 DebugException(e); | 428 DebugException(e); |
| 410 return 1; | 429 return 1; |
| 411 } | 430 } |
| 412 } | 431 } |
| 413 | 432 |
| 414 return 0; | 433 return 0; |
| 415 } | 434 } |
| OLD | NEW |