| OLD | NEW | 
 | (Empty) | 
|    1 #include "PluginStdAfx.h" |  | 
|    2  |  | 
|    3 #include <ctime> |  | 
|    4  |  | 
|    5 #include "PluginClass.h" |  | 
|    6 #include "PluginSettings.h" |  | 
|    7 #include "PluginSystem.h" |  | 
|    8 #include "PluginConfiguration.h" |  | 
|    9 #ifdef SUPPORT_FILTER |  | 
|   10 #include "PluginFilter.h" |  | 
|   11 #endif |  | 
|   12 #ifdef SUPPORT_CONFIG |  | 
|   13 #include "PluginConfig.h" |  | 
|   14 #endif |  | 
|   15 #include "PluginMimeFilterClient.h" |  | 
|   16  |  | 
|   17 #include "PluginClient.h" |  | 
|   18 #include "PluginClientFactory.h" |  | 
|   19 #include "PluginWbPassThrough.h" |  | 
|   20 #include "PluginHttpRequest.h" |  | 
|   21  |  | 
|   22 #include "ProtocolImpl.h" |  | 
|   23 #include "ProtocolCF.h" |  | 
|   24  |  | 
|   25 HANDLE CPluginClass::s_hMainThread = NULL; |  | 
|   26 bool CPluginClass::s_isMainThreadDone = false; |  | 
|   27  |  | 
|   28  |  | 
|   29 DWORD WINAPI CPluginClass::MainThreadProc(LPVOID pParam) |  | 
|   30 { |  | 
|   31  |  | 
|   32   CPluginTab* tab = static_cast<CPluginTab*>(pParam); |  | 
|   33  |  | 
|   34   // Force loading/creation of settings |  | 
|   35   CPluginSettings* settings = CPluginSettings::GetInstance(); |  | 
|   36  |  | 
|   37   CPluginSystem* system = CPluginSystem::GetInstance(); |  | 
|   38  |  | 
|   39   settings->SetMainThreadId(); |  | 
|   40  |  | 
|   41   CString debugText; |  | 
|   42  |  | 
|   43   CString threadInfo; |  | 
|   44   threadInfo.Format(L"%d.%d", ::GetCurrentProcessId(), ::GetCurrentThreadId()); |  | 
|   45  |  | 
|   46   debugText += L"===============================================================
     ================="; |  | 
|   47   debugText += L"\nMAIN THREAD " + threadInfo + L" Plugin version:" + CString(IE
     PLUGIN_VERSION); |  | 
|   48   debugText += L"\n=============================================================
     ==================="; |  | 
|   49  |  | 
|   50   debugText += L"\nPlugin version:    " + CString(IEPLUGIN_VERSION); |  | 
|   51   debugText += L"\nBrowser version:   " + system->GetBrowserVersion(); |  | 
|   52   debugText += L"\nBrowser language:  " + system->GetBrowserLanguage(); |  | 
|   53  |  | 
|   54   DWORD osVersion = ::GetVersion(); |  | 
|   55  |  | 
|   56   CString ver; |  | 
|   57   ver.Format(L"%d.%d", LOBYTE(LOWORD(osVersion)), HIBYTE(LOWORD(osVersion))); |  | 
|   58  |  | 
|   59  |  | 
|   60   debugText += L"\nWindows version:   " + ver; |  | 
|   61  |  | 
|   62   CString proxyName; |  | 
|   63   CString proxyBypass; |  | 
|   64  |  | 
|   65   if (CPluginHttpRequest::GetProxySettings(proxyName, proxyBypass)) |  | 
|   66   { |  | 
|   67     if (!proxyName.IsEmpty()) |  | 
|   68     { |  | 
|   69       debugText += L"\nHTTP proxy name:   " + proxyName; |  | 
|   70     } |  | 
|   71     if (!proxyBypass.IsEmpty()) |  | 
|   72     { |  | 
|   73       debugText += L"\nHTTP proxy bypass: " + proxyBypass; |  | 
|   74     } |  | 
|   75   } |  | 
|   76  |  | 
|   77   debugText += L"\n=============================================================
     ==================="; |  | 
|   78  |  | 
|   79   DEBUG_GENERAL(debugText) |  | 
|   80  |  | 
|   81     HANDLE hMainThread = GetMainThreadHandle(); |  | 
|   82  |  | 
|   83   CPluginClient* client = CPluginClient::GetInstance(); |  | 
|   84   client->SetLocalization(); |  | 
|   85  |  | 
|   86   DWORD nNextUserTimerBase = GetTickCount() / TIMER_INTERVAL_USER_REGISTRATION +
      1; |  | 
|   87   DWORD nUserTimerBaseStep = 1; |  | 
|   88  |  | 
|   89   bool isConfigutationLoaded = false; |  | 
|   90  |  | 
|   91   std::auto_ptr<CPluginConfiguration> configuration = std::auto_ptr<CPluginConfi
     guration>(new CPluginConfiguration); |  | 
|   92  |  | 
|   93   // -------------------------------------------------------------------- |  | 
|   94   // Welcome / Info page |  | 
|   95   // -------------------------------------------------------------------- |  | 
|   96  |  | 
|   97   DEBUG_THREAD("Thread::Set welcome/info page"); |  | 
|   98  |  | 
|   99   if (!IsMainThreadDone(hMainThread)) |  | 
|  100   { |  | 
|  101     WORD wInfo = 0; |  | 
|  102     WORD wInfoSettings = 0; |  | 
|  103  |  | 
|  104     wInfo = wInfoSettings = settings->GetValue(SETTING_PLUGIN_INFO_PANEL, 0); |  | 
|  105     if (wInfo == 1) |  | 
|  106     { |  | 
|  107       DEBUG_GENERAL("*** Display welcome page") |  | 
|  108     } |  | 
|  109     else if (wInfo == 2) |  | 
|  110     { |  | 
|  111       DEBUG_GENERAL("*** Display update page") |  | 
|  112     } |  | 
|  113     else if (wInfo != 0) |  | 
|  114     { |  | 
|  115       DEBUG_GENERAL("*** Display info page") |  | 
|  116     } |  | 
|  117  |  | 
|  118     if (wInfo != 0) |  | 
|  119     { |  | 
|  120       DEBUG_THREAD("Thread::Set info page (action)"); |  | 
|  121  |  | 
|  122       s_criticalSectionLocal.Lock(); |  | 
|  123       { |  | 
|  124         ::PostMessage(tab->m_plugin->m_hPaneWnd, WM_LAUNCH_INFO, wInfo, NULL); |  | 
|  125       } |  | 
|  126       s_criticalSectionLocal.Unlock(); |  | 
|  127  |  | 
|  128       if (wInfoSettings == wInfo) |  | 
|  129       { |  | 
|  130         settings->Remove(SETTING_PLUGIN_INFO_PANEL); |  | 
|  131         settings->Write(); |  | 
|  132       } |  | 
|  133     } |  | 
|  134   } |  | 
|  135  |  | 
|  136   // -------------------------------------------------------------------- |  | 
|  137   // Main loop |  | 
|  138   // -------------------------------------------------------------------- |  | 
|  139  |  | 
|  140   DWORD mainLoopIteration = 1; |  | 
|  141  |  | 
|  142   while (!IsMainThreadDone(hMainThread)) |  | 
|  143   { |  | 
|  144     CString sMainLoopIteration; |  | 
|  145     sMainLoopIteration.Format(L"%u", mainLoopIteration); |  | 
|  146  |  | 
|  147     CString debugText; |  | 
|  148  |  | 
|  149     debugText += L"-------------------------------------------------------------
     -------------------"; |  | 
|  150     debugText += L"\nLoop iteration " + sMainLoopIteration; |  | 
|  151     debugText += L"\n-----------------------------------------------------------
     ---------------------"; |  | 
|  152  |  | 
|  153     DEBUG_GENERAL(debugText) |  | 
|  154  |  | 
|  155       // -------------------------------------------------------------------- |  | 
|  156       // Update settings |  | 
|  157       // -------------------------------------------------------------------- |  | 
|  158  |  | 
|  159       if (!IsMainThreadDone(hMainThread)) |  | 
|  160       { |  | 
|  161         DEBUG_THREAD("Thread::Update settings"); |  | 
|  162  |  | 
|  163         if (configuration->IsValid()) |  | 
|  164         { |  | 
|  165           bool isNewDictionaryVersion = false; |  | 
|  166 #ifdef SUPPORT_FILTER |  | 
|  167           bool isNewFilterVersion = false; |  | 
|  168 #endif |  | 
|  169 #ifdef SUPPORT_CONFIG |  | 
|  170           bool isNewConfig = false; |  | 
|  171 #endif |  | 
|  172  |  | 
|  173           DEBUG_THREAD("Thread::Update settings (action)"); |  | 
|  174  |  | 
|  175           settings->ForceConfigurationUpdateOnStart(false); |  | 
|  176  |  | 
|  177           if (configuration->IsValidPluginInfoPanel()) |  | 
|  178           { |  | 
|  179             settings->SetValue(SETTING_PLUGIN_INFO_PANEL, configuration->GetPlug
     inInfoPanel()); |  | 
|  180           } |  | 
|  181  |  | 
|  182 #ifdef SUPPORT_FILTER |  | 
|  183           // Update filter URL list |  | 
|  184           if (configuration->IsValidFilter()) |  | 
|  185           { |  | 
|  186             isNewFilterVersion = true; |  | 
|  187           } |  | 
|  188 #endif // SUPPORT_FILTER |  | 
|  189  |  | 
|  190           settings->Write(); |  | 
|  191  |  | 
|  192           configuration->Invalidate(); |  | 
|  193  |  | 
|  194 #ifdef SUPPORT_FILTER |  | 
|  195           DEBUG_GENERAL("*** before isNewFilterVersion"); |  | 
|  196  |  | 
|  197           // Update filters, if needed (5 days * (random() * 0.4 + 0.8)) |  | 
|  198           if (isNewFilterVersion) |  | 
|  199           { |  | 
|  200  |  | 
|  201             DEBUG_GENERAL("*** before CheckFilterAndDownload"); |  | 
|  202             settings->RefreshFilterlist(); |  | 
|  203  |  | 
|  204  |  | 
|  205             settings->Write(); |  | 
|  206  |  | 
|  207             tab->OnUpdate(); |  | 
|  208           } |  | 
|  209 #endif // SUPPORT_FILTER |  | 
|  210         } |  | 
|  211       } |  | 
|  212  |  | 
|  213  |  | 
|  214       // ---------------------------------------------------------------- |  | 
|  215       // End loop |  | 
|  216       // ---------------------------------------------------------------- |  | 
|  217  |  | 
|  218       if (!IsMainThreadDone(hMainThread)) |  | 
|  219       { |  | 
|  220         bool isDone = false; |  | 
|  221         DWORD sleepLoopIteration = 1; |  | 
|  222  |  | 
|  223         // Sleep loop |  | 
|  224         while (!isDone && !IsMainThreadDone(hMainThread)) |  | 
|  225         { |  | 
|  226           // Non-hanging sleep |  | 
|  227           Sleep(5000); |  | 
|  228  |  | 
|  229           if (sleepLoopIteration++ % (TIMER_THREAD_SLEEP_USER_REGISTRATION) == 0
     ) |  | 
|  230           { |  | 
|  231             isDone = true; |  | 
|  232           } |  | 
|  233         } |  | 
|  234       } |  | 
|  235  |  | 
|  236       mainLoopIteration++; |  | 
|  237   } |  | 
|  238  |  | 
|  239   return 0; |  | 
|  240 } |  | 
|  241  |  | 
|  242  |  | 
|  243 HANDLE CPluginClass::GetMainThreadHandle() |  | 
|  244 { |  | 
|  245   HANDLE handle = NULL; |  | 
|  246  |  | 
|  247   s_criticalSectionLocal.Lock(); |  | 
|  248   { |  | 
|  249     handle = s_hMainThread; |  | 
|  250   } |  | 
|  251   s_criticalSectionLocal.Unlock(); |  | 
|  252  |  | 
|  253   return handle; |  | 
|  254 } |  | 
|  255  |  | 
|  256  |  | 
|  257 bool CPluginClass::IsMainThreadDone(HANDLE mainThread) |  | 
|  258 { |  | 
|  259   bool isDone = false; |  | 
|  260  |  | 
|  261   s_criticalSectionLocal.Lock(); |  | 
|  262   { |  | 
|  263     isDone = s_isMainThreadDone || mainThread != s_hMainThread; |  | 
|  264   } |  | 
|  265   s_criticalSectionLocal.Unlock(); |  | 
|  266  |  | 
|  267   return isDone; |  | 
|  268 } |  | 
| OLD | NEW |