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" |
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 | 371 |
372 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo); | 372 AdblockPlus::JsEnginePtr jsEngine = AdblockPlus::JsEngine::New(appInfo); |
373 jsEngine->SetEventCallback("updateAvailable", &OnUpdateAvailable); | 373 jsEngine->SetEventCallback("updateAvailable", &OnUpdateAvailable); |
374 | 374 |
375 std::string dataPath = ToUtf8String(GetAppDataPath()); | 375 std::string dataPath = ToUtf8String(GetAppDataPath()); |
376 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get())
->SetBasePath(dataPath); | 376 dynamic_cast<AdblockPlus::DefaultFileSystem*>(jsEngine->GetFileSystem().get())
->SetBasePath(dataPath); |
377 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE
ngine(jsEngine)); | 377 std::auto_ptr<AdblockPlus::FilterEngine> filterEngine(new AdblockPlus::FilterE
ngine(jsEngine)); |
378 return filterEngine; | 378 return filterEngine; |
379 } | 379 } |
380 | 380 |
| 381 LRESULT CALLBACK NotificationWindowThread(HWND window, UINT message, |
| 382 WPARAM wParam, LPARAM lParam) |
| 383 { |
| 384 switch (message) |
| 385 { |
| 386 case WM_CLOSE: |
| 387 // Make sure that all our C streams will be flushed and closed correctly (no
corrupt files) |
| 388 exit(0); |
| 389 break; |
| 390 } |
| 391 return DefWindowProc(window, message, wParam, lParam); |
| 392 } |
| 393 |
| 394 |
| 395 DWORD WINAPI NotificationWindowStart(void*) |
| 396 { |
| 397 const std::wstring windowClassName = L"ABP_NOTIFICATION_WINDOW"; |
| 398 WNDCLASSEXW windowClass = {}; |
| 399 windowClass.cbSize = sizeof(windowClass); |
| 400 windowClass.lpfnWndProc = NotificationWindowThread; |
| 401 windowClass.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_MENU + 1); |
| 402 windowClass.lpszClassName = windowClassName.c_str(); |
| 403 windowClass.hInstance = GetModuleHandle(NULL); |
| 404 RegisterClassEx(&windowClass); |
| 405 |
| 406 CreateWindowExW(WS_EX_TOPMOST, windowClassName.c_str(), 0, 0, 0, 0, 0, 0, 0, 0
, 0, 0); |
| 407 |
| 408 // Main message loop: |
| 409 MSG msg; |
| 410 while (GetMessage(&msg, NULL, 0, 0)) |
| 411 { |
| 412 TranslateMessage(&msg); |
| 413 DispatchMessage(&msg); |
| 414 } |
| 415 return (int)msg.wParam; |
| 416 } |
381 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) | 417 int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) |
382 { | 418 { |
383 AutoHandle mutex(CreateMutexW(0, false, L"AdblockPlusEngine")); | 419 AutoHandle mutex(CreateMutexW(0, false, L"AdblockPlusEngine")); |
384 if (!mutex) | 420 if (!mutex) |
385 { | 421 { |
386 DebugLastError("CreateMutex failed"); | 422 DebugLastError("CreateMutex failed"); |
387 return 1; | 423 return 1; |
388 } | 424 } |
389 | 425 |
390 if (GetLastError() == ERROR_ALREADY_EXISTS) | 426 if (GetLastError() == ERROR_ALREADY_EXISTS) |
391 { | 427 { |
392 DebugLastError("Named pipe exists, another engine instance appears to be run
ning"); | 428 DebugLastError("Named pipe exists, another engine instance appears to be run
ning"); |
393 return 1; | 429 return 1; |
394 } | 430 } |
395 | 431 |
396 int argc; | 432 int argc; |
397 LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); | 433 LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc); |
398 std::wstring locale(argc >= 2 ? argv[1] : L""); | 434 std::wstring locale(argc >= 2 ? argv[1] : L""); |
399 LocalFree(argv); | 435 LocalFree(argv); |
400 Dictionary::Create(locale); | 436 Dictionary::Create(locale); |
401 filterEngine = CreateFilterEngine(locale); | 437 filterEngine = CreateFilterEngine(locale); |
402 updater.reset(new Updater(filterEngine->GetJsEngine())); | 438 updater.reset(new Updater(filterEngine->GetJsEngine())); |
403 | 439 |
| 440 CreateThread(NULL, NULL, &NotificationWindowStart, NULL, NULL, NULL); |
404 for (;;) | 441 for (;;) |
405 { | 442 { |
406 try | 443 try |
407 { | 444 { |
408 Communication::Pipe* pipe = new Communication::Pipe(Communication::pipeNam
e, | 445 Communication::Pipe* pipe = new Communication::Pipe(Communication::pipeNam
e, |
409 Communication::Pipe::MODE_CREATE); | 446 Communication::Pipe::MODE_CREATE); |
410 | 447 |
411 AutoHandle thread(CreateThread(0, 0, ClientThread, static_cast<LPVOID>(pip
e), 0, 0)); | 448 AutoHandle thread(CreateThread(0, 0, ClientThread, static_cast<LPVOID>(pip
e), 0, 0)); |
412 if (!thread) | 449 if (!thread) |
413 { | 450 { |
414 delete pipe; | 451 delete pipe; |
415 DebugLastError("CreateThread failed"); | 452 DebugLastError("CreateThread failed"); |
416 return 1; | 453 return 1; |
417 } | 454 } |
418 } | 455 } |
419 catch (std::runtime_error e) | 456 catch (std::runtime_error e) |
420 { | 457 { |
421 DebugException(e); | 458 DebugException(e); |
422 return 1; | 459 return 1; |
423 } | 460 } |
424 } | 461 } |
425 | 462 |
426 return 0; | 463 return 0; |
427 } | 464 } |
OLD | NEW |