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 |
15 namespace | 15 namespace |
16 { | 16 { |
17 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; | 17 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine; |
18 std::auto_ptr<Updater> updater; | 18 std::auto_ptr<Updater> updater; |
19 int activeConnections = 0; | 19 int activeConnections = 0; |
20 CriticalSection activeConnectionsLock; | 20 CriticalSection activeConnectionsLock; |
| 21 HWND callbackWindow; |
21 | 22 |
22 void WriteStrings(Communication::OutputBuffer& response, | 23 void WriteStrings(Communication::OutputBuffer& response, |
23 const std::vector<std::string>& strings) | 24 const std::vector<std::string>& strings) |
24 { | 25 { |
25 int32_t count = static_cast<int32_t>(strings.size()); | 26 int32_t count = static_cast<int32_t>(strings.size()); |
26 response << count; | 27 response << count; |
27 for (int32_t i = 0; i < count; i++) | 28 for (int32_t i = 0; i < count; i++) |
28 response << strings[i]; | 29 response << strings[i]; |
29 } | 30 } |
30 | 31 |
31 void WriteSubscriptions(Communication::OutputBuffer& response, | 32 void WriteSubscriptions(Communication::OutputBuffer& response, |
32 const std::vector<AdblockPlus::SubscriptionPtr>& subscriptions) | 33 const std::vector<AdblockPlus::SubscriptionPtr>& subscriptions) |
33 { | 34 { |
34 int32_t count = static_cast<int32_t>(subscriptions.size()); | 35 int32_t count = static_cast<int32_t>(subscriptions.size()); |
35 response << count; | 36 response << count; |
36 for (int32_t i = 0; i < count; i++) | 37 for (int32_t i = 0; i < count; i++) |
37 { | 38 { |
38 AdblockPlus::SubscriptionPtr subscription = subscriptions[i]; | 39 AdblockPlus::SubscriptionPtr subscription = subscriptions[i]; |
39 response << subscription->GetProperty("url")->AsString() | 40 response << subscription->GetProperty("url")->AsString() |
40 << subscription->GetProperty("title")->AsString() | 41 << subscription->GetProperty("title")->AsString() |
41 << subscription->GetProperty("specialization")->AsString() | 42 << subscription->GetProperty("specialization")->AsString() |
42 << subscription->IsListed(); | 43 << subscription->IsListed(); |
43 } | 44 } |
44 } | 45 } |
45 | 46 |
46 bool updateAvailable; | 47 bool updateAvailable; |
| 48 bool checkingForUpdate = false; |
47 void UpdateCallback(const std::string res) | 49 void UpdateCallback(const std::string res) |
48 { | 50 { |
| 51 UINT message; |
49 if (updateAvailable) | 52 if (updateAvailable) |
50 return; | |
51 Dictionary* dictionary = Dictionary::GetInstance(); | |
52 if (res.length() == 0) | |
53 { | 53 { |
54 std::wstring upToDateText = dictionary->Lookup("updater", "update-already-
up-to-date-text"); | 54 message = WM_DOWNLOADING_UPDATE; |
55 std::wstring upToDateTitle = dictionary->Lookup("updater", "update-already
-up-to-date-title"); | |
56 MessageBoxW(NULL, upToDateText.c_str(), upToDateTitle.c_str(), MB_OK); | |
57 } | 55 } |
58 else | 56 else if (res.length() == 0) |
59 { | 57 { |
60 std::wstring errorText = dictionary->Lookup("updater", "update-error-text"
); | 58 message = WM_ALREADY_UP_TO_DATE; |
61 std::wstring errorTitle = dictionary->Lookup("updater", "update-error-titl
e"); | 59 } |
62 ReplaceString(errorText, L"?1?", ToUtf16String(res)); | 60 else |
63 MessageBoxW(NULL, errorText.c_str(), errorTitle.c_str(), MB_OK); | 61 { |
| 62 message = WM_UPDATE_CHECK_ERROR; |
| 63 } |
| 64 if (callbackWindow) |
| 65 { |
| 66 SendMessage(callbackWindow, message, 0, 0); |
| 67 checkingForUpdate = false; |
| 68 callbackWindow = 0; |
64 } | 69 } |
65 return; | 70 return; |
66 } | 71 } |
67 | 72 |
68 | 73 |
69 CriticalSection firstRunLock; | 74 CriticalSection firstRunLock; |
| 75 CriticalSection updateCheckLock; |
70 bool firstRunActionExecuted = false; | 76 bool firstRunActionExecuted = false; |
71 Communication::OutputBuffer HandleRequest(Communication::InputBuffer& request) | 77 Communication::OutputBuffer HandleRequest(Communication::InputBuffer& request) |
72 { | 78 { |
73 Communication::OutputBuffer response; | 79 Communication::OutputBuffer response; |
74 | 80 |
75 Communication::ProcType procedure; | 81 Communication::ProcType procedure; |
76 request >> procedure; | 82 request >> procedure; |
77 switch (procedure) | 83 switch (procedure) |
78 { | 84 { |
79 case Communication::PROC_MATCHES: | 85 case Communication::PROC_MATCHES: |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } | 242 } |
237 else | 243 else |
238 { | 244 { |
239 // Report failure | 245 // Report failure |
240 response << false; | 246 response << false; |
241 } | 247 } |
242 break; | 248 break; |
243 } | 249 } |
244 case Communication::PROC_CHECK_FOR_UPDATES: | 250 case Communication::PROC_CHECK_FOR_UPDATES: |
245 { | 251 { |
246 updateAvailable = false; | 252 request >> (int32_t&)callbackWindow; |
247 filterEngine->ForceUpdateCheck(UpdateCallback); | 253 CriticalSection::Lock lock(updateCheckLock); |
| 254 if (!checkingForUpdate) |
| 255 { |
| 256 updateAvailable = false; |
| 257 checkingForUpdate = true; |
| 258 filterEngine->ForceUpdateCheck(UpdateCallback); |
| 259 } |
248 break; | 260 break; |
249 } | 261 } |
250 case Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED: | 262 case Communication::PROC_IS_FIRST_RUN_ACTION_NEEDED: |
251 { | 263 { |
252 CriticalSection::Lock lock(firstRunLock); | 264 CriticalSection::Lock lock(firstRunLock); |
253 if (!firstRunActionExecuted && filterEngine->IsFirstRun()) | 265 if (!firstRunActionExecuted && filterEngine->IsFirstRun()) |
254 { | 266 { |
255 response << true; | 267 response << true; |
256 firstRunActionExecuted = true; | 268 firstRunActionExecuted = true; |
257 } | 269 } |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 } | 418 } |
407 catch (std::runtime_error e) | 419 catch (std::runtime_error e) |
408 { | 420 { |
409 DebugException(e); | 421 DebugException(e); |
410 return 1; | 422 return 1; |
411 } | 423 } |
412 } | 424 } |
413 | 425 |
414 return 0; | 426 return 0; |
415 } | 427 } |
OLD | NEW |