| OLD | NEW |
| 1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
| 2 | 2 |
| 3 #include <Wbemidl.h> | 3 #include <Wbemidl.h> |
| 4 #include <time.h> | 4 #include <time.h> |
| 5 #include "PluginIniFileW.h" | 5 #include "PluginIniFileW.h" |
| 6 #include "PluginIniFile.h" | 6 #include "PluginIniFile.h" |
| 7 #include "PluginSettings.h" | 7 #include "PluginSettings.h" |
| 8 #include "PluginDictionary.h" | 8 #include "PluginDictionary.h" |
| 9 #include "PluginClient.h" | 9 #include "PluginClient.h" |
| 10 #include "PluginChecksum.h" | 10 #include "PluginChecksum.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 | 22 |
| 23 #include <knownfolders.h> | 23 #include <knownfolders.h> |
| 24 | 24 |
| 25 class TSettings | 25 class TSettings |
| 26 { | 26 { |
| 27 DWORD processorId; | 27 DWORD processorId; |
| 28 | 28 |
| 29 char sPluginId[44]; | 29 char sPluginId[44]; |
| 30 }; | 30 }; |
| 31 | 31 |
| 32 static void SubsCallback(std::vector<AdblockPlus::SubscriptionPtr>& subscription
s); | |
| 33 | |
| 34 | 32 |
| 35 class CPluginSettingsLock : public CPluginMutex | 33 class CPluginSettingsLock : public CPluginMutex |
| 36 { | 34 { |
| 37 public: | 35 public: |
| 38 CPluginSettingsLock() : CPluginMutex("SettingsFile", PLUGIN_ERROR_MUTEX_SETTIN
GS_FILE) {} | 36 CPluginSettingsLock() : CPluginMutex("SettingsFile", PLUGIN_ERROR_MUTEX_SETTIN
GS_FILE) {} |
| 39 ~CPluginSettingsLock() {} | 37 ~CPluginSettingsLock() {} |
| 40 | 38 |
| 41 }; | 39 }; |
| 42 | 40 |
| 43 | 41 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 64 | 62 |
| 65 CPluginSettings* CPluginSettings::s_instance = NULL; | 63 CPluginSettings* CPluginSettings::s_instance = NULL; |
| 66 bool CPluginSettings::s_isLightOnly = false; | 64 bool CPluginSettings::s_isLightOnly = false; |
| 67 | 65 |
| 68 CComAutoCriticalSection CPluginSettings::s_criticalSectionLocal; | 66 CComAutoCriticalSection CPluginSettings::s_criticalSectionLocal; |
| 69 #ifdef SUPPORT_WHITELIST | 67 #ifdef SUPPORT_WHITELIST |
| 70 CComAutoCriticalSection CPluginSettings::s_criticalSectionDomainHistory; | 68 CComAutoCriticalSection CPluginSettings::s_criticalSectionDomainHistory; |
| 71 #endif | 69 #endif |
| 72 | 70 |
| 73 | 71 |
| 74 CPluginSettings::CPluginSettings() : | 72 CPluginSettings::CPluginSettings() : |
| 75 m_settingsVersion("1"), m_isDirty(false), m_isFirstRun(false), m_isFirstRunUpd
ate(false), m_dwMainProcessId(0), m_dwMainThreadId(0), m_dwWorkingThreadId(0), | 73 m_settingsVersion("1"), m_isDirty(false), m_isFirstRun(false), m_isFirstRunUpd
ate(false), m_dwMainProcessId(0), m_dwMainThreadId(0), m_dwWorkingThreadId(0), |
| 76 m_isDirtyTab(false), m_isPluginEnabledTab(true), m_tabNumber("1") | 74 m_isDirtyTab(false), m_isPluginEnabledTab(true), m_tabNumber("1") |
| 77 { | 75 { |
| 78 | 76 |
| 79 CPluginSettings *lightInstance = s_instance; | 77 CPluginSettings *lightInstance = s_instance; |
| 80 s_instance = NULL; | 78 s_instance = NULL; |
| 81 | 79 |
| 82 m_settingsFile = std::auto_ptr<CPluginIniFileW>(new CPluginIniFileW(GetDataPat
h(SETTINGS_INI_FILE), false)); | 80 m_settingsFile = std::auto_ptr<CPluginIniFileW>(new CPluginIniFileW(GetDataPat
h(SETTINGS_INI_FILE), false)); |
| 83 m_settingsFileTab = std::auto_ptr<CPluginIniFileW>(new CPluginIniFileW(GetData
Path(SETTINGS_INI_FILE_TAB), true)); | 81 m_settingsFileTab = std::auto_ptr<CPluginIniFileW>(new CPluginIniFileW(GetData
Path(SETTINGS_INI_FILE_TAB), true)); |
| 84 | 82 |
| 85 m_WindowsBuildNumber = 0; | 83 m_WindowsBuildNumber = 0; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 96 CPluginSettingsLock lock; | 94 CPluginSettingsLock lock; |
| 97 if (lock.IsLocked()) | 95 if (lock.IsLocked()) |
| 98 { | 96 { |
| 99 std::ifstream is; | 97 std::ifstream is; |
| 100 is.open(GetDataPath(SETTINGS_INI_FILE), std::ios_base::in); | 98 is.open(GetDataPath(SETTINGS_INI_FILE), std::ios_base::in); |
| 101 if (!is.is_open()) | 99 if (!is.is_open()) |
| 102 { | 100 { |
| 103 TCHAR pf[MAX_PATH]; | 101 TCHAR pf[MAX_PATH]; |
| 104 SHGetSpecialFolderPath( | 102 SHGetSpecialFolderPath( |
| 105 0, | 103 0, |
| 106 pf, | 104 pf, |
| 107 CSIDL_PROGRAM_FILESX86, | 105 CSIDL_PROGRAM_FILESX86, |
| 108 FALSE ); | 106 FALSE ); |
| 109 //No files found, copy from the dll location | 107 //No files found, copy from the dll location |
| 110 CString pathToDll; | 108 CString pathToDll; |
| 111 DWORD pathResult = GetModuleFileNameW((HINSTANCE)&__ImageBase, pathToDll
.GetBufferSetLength(MAX_PATH), MAX_PATH); | 109 DWORD pathResult = GetModuleFileNameW((HINSTANCE)&__ImageBase, pathToDll
.GetBufferSetLength(MAX_PATH), MAX_PATH); |
| 112 if (pathResult > 0) | 110 if (pathResult > 0) |
| 113 { | 111 { |
| 114 CString cpyPath; | 112 CString cpyPath; |
| 115 cpyPath = pathToDll.Left(pathToDll.ReverseFind('\\') + 1); | 113 cpyPath = pathToDll.Left(pathToDll.ReverseFind('\\') + 1); |
| 116 | 114 |
| 117 BOOL res = CopyFile(cpyPath + SETTINGS_INI_FILE, GetDataPath(SETTINGS_
INI_FILE), TRUE); | 115 BOOL res = CopyFile(cpyPath + SETTINGS_INI_FILE, GetDataPath(SETTINGS_
INI_FILE), TRUE); |
| 118 res = CopyFile(cpyPath + DICTIONARY_INI_FILE, GetDataPath(DICTIONARY_I
NI_FILE), TRUE); | 116 res = CopyFile(cpyPath + DICTIONARY_INI_FILE, GetDataPath(DICTIONARY_I
NI_FILE), TRUE); |
| 119 res = CopyFile(cpyPath + SETTING_PAGE_INI_FILE, GetDataPath(SETTING_PA
GE_INI_FILE), TRUE); | 117 res = CopyFile(cpyPath + SETTING_PAGE_INI_FILE, GetDataPath(SETTING_PA
GE_INI_FILE), TRUE); |
| 120 | 118 |
| 121 SHFILEOPSTRUCT pFileStruct; | 119 SHFILEOPSTRUCT pFileStruct; |
| 122 ZeroMemory(&pFileStruct, sizeof(SHFILEOPSTRUCT)); | 120 ZeroMemory(&pFileStruct, sizeof(SHFILEOPSTRUCT)); |
| 123 pFileStruct.hwnd = NULL; | 121 pFileStruct.hwnd = NULL; |
| 124 pFileStruct.wFunc = FO_COPY; | 122 pFileStruct.wFunc = FO_COPY; |
| 125 WCHAR fromPath[MAX_PATH + 2]; | 123 WCHAR fromPath[MAX_PATH + 2]; |
| 126 WCHAR toPath[MAX_PATH + 2]; | 124 WCHAR toPath[MAX_PATH + 2]; |
| 127 | 125 |
| 128 CString source = cpyPath + "html\\*"; | 126 CString source = cpyPath + "html\\*"; |
| 129 wcscpy(fromPath, source); | 127 wcscpy(fromPath, source); |
| 130 fromPath[source.GetLength()] = '\0'; | 128 fromPath[source.GetLength()] = '\0'; |
| 131 fromPath[source.GetLength() + 1] = '\0'; | 129 fromPath[source.GetLength() + 1] = '\0'; |
| 132 | 130 |
| 133 wcscpy(toPath, GetDataPath(L"html")); | 131 wcscpy(toPath, GetDataPath(L"html")); |
| 134 toPath[GetDataPath(L"html").GetLength()] = '\0'; | 132 toPath[GetDataPath(L"html").GetLength()] = '\0'; |
| 135 toPath[GetDataPath(L"html").GetLength() + 1] = '\0'; | 133 toPath[GetDataPath(L"html").GetLength() + 1] = '\0'; |
| 136 | 134 |
| 137 pFileStruct.pFrom = fromPath; | 135 pFileStruct.pFrom = fromPath; |
| 138 pFileStruct.pTo = toPath; | 136 pFileStruct.pTo = toPath; |
| 139 pFileStruct.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMM
KDIR | FOF_NO_UI | FOF_RENAMEONCOLLISION; | 137 pFileStruct.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMM
KDIR | FOF_NO_UI | FOF_RENAMEONCOLLISION; |
| 140 bool i = pFileStruct.fAnyOperationsAborted ; | |
| 141 SHFileOperation(&pFileStruct); | 138 SHFileOperation(&pFileStruct); |
| 142 } | 139 } |
| 143 is.open(GetDataPath(SETTINGS_INI_FILE), std::ios_base::in); | 140 is.open(GetDataPath(SETTINGS_INI_FILE), std::ios_base::in); |
| 144 if (!is.is_open()) | 141 if (!is.is_open()) |
| 145 { | 142 { |
| 146 m_isDirty = true; | 143 m_isDirty = true; |
| 147 } | 144 } |
| 148 else | 145 else |
| 149 { | 146 { |
| 150 is.close(); | 147 is.close(); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 { | 184 { |
| 188 | 185 |
| 189 if (s_dataPathParent != NULL) | 186 if (s_dataPathParent != NULL) |
| 190 { | 187 { |
| 191 delete s_dataPathParent; | 188 delete s_dataPathParent; |
| 192 } | 189 } |
| 193 s_instance = NULL; | 190 s_instance = NULL; |
| 194 } | 191 } |
| 195 | 192 |
| 196 | 193 |
| 197 CPluginSettings* CPluginSettings::GetInstance() | 194 CPluginSettings* CPluginSettings::GetInstance() |
| 198 { | 195 { |
| 199 CPluginSettings* instance = NULL; | 196 CPluginSettings* instance = NULL; |
| 200 | 197 |
| 201 s_criticalSectionLocal.Lock(); | 198 s_criticalSectionLocal.Lock(); |
| 202 { | 199 { |
| 203 if ((!s_instance) || (s_isLightOnly)) | 200 if ((!s_instance) || (s_isLightOnly)) |
| 204 { | 201 { |
| 205 s_instance = new CPluginSettings(); | 202 s_instance = new CPluginSettings(); |
| 206 #ifdef USE_CONSOLE | 203 #ifdef USE_CONSOLE |
| 207 CONSOLE("Fetching Available Subscription\n"); | 204 CONSOLE("Fetching Available Subscription\n"); |
| 208 #endif | 205 #endif |
| 209 try | 206 CPluginSettings::GetInstance()->m_subscriptions = CPluginClient::GetInstan
ce()->FetchAvailableSubscriptions(); |
| 210 { | |
| 211 CPluginSettings::GetInstance()->m_subscriptions = CPluginClient::GetInst
ance()->FetchAvailableSubscriptions(); | |
| 212 } | |
| 213 catch(std::exception ex) | |
| 214 { | |
| 215 DEBUG_GENERAL(ex.what()); | |
| 216 throw ex; | |
| 217 } | |
| 218 s_isLightOnly = false; | 207 s_isLightOnly = false; |
| 219 } | 208 } |
| 220 | 209 |
| 221 instance = s_instance; | 210 instance = s_instance; |
| 222 } | 211 } |
| 223 s_criticalSectionLocal.Unlock(); | 212 s_criticalSectionLocal.Unlock(); |
| 224 | 213 |
| 225 return instance; | 214 return instance; |
| 226 } | 215 } |
| 227 | 216 |
| 228 | 217 |
| 229 bool CPluginSettings::HasInstance() | 218 bool CPluginSettings::HasInstance() |
| 230 { | 219 { |
| 231 bool hasInstance = true; | 220 bool hasInstance = true; |
| 232 | 221 |
| 233 s_criticalSectionLocal.Lock(); | 222 s_criticalSectionLocal.Lock(); |
| 234 { | 223 { |
| 235 hasInstance = s_instance != NULL; | 224 hasInstance = s_instance != NULL; |
| 236 } | 225 } |
| 237 s_criticalSectionLocal.Unlock(); | 226 s_criticalSectionLocal.Unlock(); |
| 238 | 227 |
| 239 return hasInstance; | 228 return hasInstance; |
| 240 } | 229 } |
| 241 | 230 |
| 242 | 231 |
| 243 bool CPluginSettings::Read(bool bDebug) | 232 bool CPluginSettings::Read(bool bDebug) |
| 244 { | 233 { |
| 245 bool isRead = true; | 234 bool isRead = true; |
| 246 | 235 |
| 247 DEBUG_SETTINGS(L"Settings::Read") | 236 DEBUG_SETTINGS(L"Settings::Read") |
| 248 { | 237 { |
| 249 if (bDebug) | 238 if (bDebug) |
| 250 { | 239 { |
| 251 DEBUG_GENERAL(L"*** Loading settings:" + m_settingsFile->GetFilePath()); | 240 DEBUG_GENERAL(L"*** Loading settings:" + m_settingsFile->GetFilePath()); |
| 252 } | 241 } |
| 253 | 242 |
| 254 CPluginSettingsLock lock; | 243 CPluginSettingsLock lock; |
| 255 if (lock.IsLocked()) | 244 if (lock.IsLocked()) |
| 256 { | 245 { |
| 257 isRead = m_settingsFile->Read(); | 246 isRead = m_settingsFile->Read(); |
| 258 if (isRead) | 247 if (isRead) |
| 259 { | 248 { |
| 260 if (m_settingsFile->IsValidChecksum()) | 249 if (m_settingsFile->IsValidChecksum()) |
| 261 { | 250 { |
| 262 m_properties = m_settingsFile->GetSectionData("Settings"); | 251 m_properties = m_settingsFile->GetSectionData("Settings"); |
| 263 } | 252 } |
| 264 else | 253 else |
| 265 { | 254 { |
| 266 DEBUG_SETTINGS("Settings:Invalid checksum - Deleting file") | 255 DEBUG_SETTINGS("Settings:Invalid checksum - Deleting file") |
| 267 | 256 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 m_isDirty = true; | 344 m_isDirty = true; |
| 356 DEBUG_SETTINGS("Settings::Configuration plugin update version:" + it->seco
nd); | 345 DEBUG_SETTINGS("Settings::Configuration plugin update version:" + it->seco
nd); |
| 357 } | 346 } |
| 358 } | 347 } |
| 359 | 348 |
| 360 return true; | 349 return true; |
| 361 } | 350 } |
| 362 | 351 |
| 363 CString CPluginSettings::GetDataPathParent() | 352 CString CPluginSettings::GetDataPathParent() |
| 364 { | 353 { |
| 365 if (s_dataPathParent == NULL) | 354 if (s_dataPathParent == NULL) |
| 366 { | 355 { |
| 367 WCHAR* lpData = new WCHAR[MAX_PATH]; | 356 WCHAR* lpData = new WCHAR[MAX_PATH]; |
| 368 | 357 |
| 369 OSVERSIONINFO osVersionInfo; | 358 OSVERSIONINFO osVersionInfo; |
| 370 ::ZeroMemory(&osVersionInfo, sizeof(OSVERSIONINFO)); | 359 ::ZeroMemory(&osVersionInfo, sizeof(OSVERSIONINFO)); |
| 371 | 360 |
| 372 osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); | 361 osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
| 373 | 362 |
| 374 ::GetVersionEx(&osVersionInfo); | 363 ::GetVersionEx(&osVersionInfo); |
| 375 | 364 |
| 376 //Windows Vista» » » » - 6.0 | 365 //Windows Vista - 6.0 |
| 377 //Windows Server 2003 R2» - 5.2 | 366 //Windows Server 2003 R2 - 5.2 |
| 378 //Windows Server 2003» » - 5.2 | 367 //Windows Server 2003 - 5.2 |
| 379 //Windows XP» » » » - 5.1 | 368 //Windows XP - 5.1 |
| 380 if (osVersionInfo.dwMajorVersion >= 6) | 369 if (osVersionInfo.dwMajorVersion >= 6) |
| 381 { | 370 { |
| 382 if (::SHGetSpecialFolderPath(NULL, lpData, CSIDL_LOCAL_APPDATA, TRUE)) | 371 if (::SHGetSpecialFolderPath(NULL, lpData, CSIDL_LOCAL_APPDATA, TRUE)) |
| 383 { | 372 { |
| 384 wcscat(lpData, L"Low"); | 373 wcscat(lpData, L"Low"); |
| 385 } | 374 } |
| 386 else | 375 else |
| 387 { | 376 { |
| 388 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_SYSINFO, PLUGIN_ERROR_SYS
INFO_GET_SPECIAL_FOLDER_LOCAL, "Settings::GetDataPath failed"); | 377 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_SYSINFO, PLUGIN_ERROR_SYS
INFO_GET_SPECIAL_FOLDER_LOCAL, "Settings::GetDataPath failed"); |
| 389 } | 378 } |
| (...skipping 18 matching lines...) Expand all Loading... |
| 408 DEBUG_ERROR_LOG(errorCode, PLUGIN_ERROR_SETTINGS, PLUGIN_ERROR_SETTINGS_
CREATE_FOLDER, "Settings::CreateDirectory failed"); | 397 DEBUG_ERROR_LOG(errorCode, PLUGIN_ERROR_SETTINGS, PLUGIN_ERROR_SETTINGS_
CREATE_FOLDER, "Settings::CreateDirectory failed"); |
| 409 } | 398 } |
| 410 } | 399 } |
| 411 } | 400 } |
| 412 | 401 |
| 413 return s_dataPathParent; | 402 return s_dataPathParent; |
| 414 } | 403 } |
| 415 | 404 |
| 416 CString CPluginSettings::GetDataPath(const CString& filename) | 405 CString CPluginSettings::GetDataPath(const CString& filename) |
| 417 { | 406 { |
| 418 if (s_dataPath == NULL) | 407 if (s_dataPath == NULL) |
| 419 { | 408 { |
| 420 WCHAR* lpData = new WCHAR[MAX_PATH]; | 409 WCHAR* lpData = new WCHAR[MAX_PATH]; |
| 421 | 410 |
| 422 OSVERSIONINFO osVersionInfo; | 411 OSVERSIONINFO osVersionInfo; |
| 423 ::ZeroMemory(&osVersionInfo, sizeof(OSVERSIONINFO)); | 412 ::ZeroMemory(&osVersionInfo, sizeof(OSVERSIONINFO)); |
| 424 | 413 |
| 425 osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); | 414 osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); |
| 426 | 415 |
| 427 ::GetVersionEx(&osVersionInfo); | 416 ::GetVersionEx(&osVersionInfo); |
| 428 | 417 |
| 429 //Windows Vista» » » » - 6.0 | 418 //Windows Vista - 6.0 |
| 430 //Windows Server 2003 R2» - 5.2 | 419 //Windows Server 2003 R2 - 5.2 |
| 431 //Windows Server 2003» » - 5.2 | 420 //Windows Server 2003 - 5.2 |
| 432 //Windows XP» » » » - 5.1 | 421 //Windows XP - 5.1 |
| 433 if (osVersionInfo.dwMajorVersion >= 6) | 422 if (osVersionInfo.dwMajorVersion >= 6) |
| 434 { | 423 { |
| 435 if (::SHGetSpecialFolderPath(NULL, lpData, CSIDL_LOCAL_APPDATA, TRUE)) | 424 if (::SHGetSpecialFolderPath(NULL, lpData, CSIDL_LOCAL_APPDATA, TRUE)) |
| 436 { | 425 { |
| 437 wcscat(lpData, L"Low"); | 426 wcscat(lpData, L"Low"); |
| 438 } | 427 } |
| 439 else | 428 else |
| 440 { | 429 { |
| 441 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_SYSINFO, PLUGIN_ERROR_SYS
INFO_GET_SPECIAL_FOLDER_LOCAL, "Settings::GetDataPath failed"); | 430 DEBUG_ERROR_LOG(::GetLastError(), PLUGIN_ERROR_SYSINFO, PLUGIN_ERROR_SYS
INFO_GET_SPECIAL_FOLDER_LOCAL, "Settings::GetDataPath failed"); |
| 442 } | 431 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 return lang; | 476 return lang; |
| 488 | 477 |
| 489 } | 478 } |
| 490 | 479 |
| 491 CString CPluginSettings::GetTempPath(const CString& filename) | 480 CString CPluginSettings::GetTempPath(const CString& filename) |
| 492 { | 481 { |
| 493 CString tempPath; | 482 CString tempPath; |
| 494 | 483 |
| 495 LPWSTR pwszCacheDir = NULL; | 484 LPWSTR pwszCacheDir = NULL; |
| 496 | 485 |
| 497 HRESULT hr = ::IEGetWriteableFolderPath(FOLDERID_InternetCache, &pwszCacheDir)
; | 486 HRESULT hr = ::IEGetWriteableFolderPath(FOLDERID_InternetCache, &pwszCacheDir)
; |
| 498 if (SUCCEEDED(hr)) | 487 if (SUCCEEDED(hr)) |
| 499 { | 488 { |
| 500 tempPath = pwszCacheDir; | 489 tempPath = pwszCacheDir; |
| 501 } | 490 } |
| 502 // Not implemented in IE6 | 491 // Not implemented in IE6 |
| 503 else if (hr == E_NOTIMPL) | 492 else if (hr == E_NOTIMPL) |
| 504 { | 493 { |
| 505 TCHAR path[MAX_PATH] = _T(""); | 494 TCHAR path[MAX_PATH] = _T(""); |
| 506 | 495 |
| 507 if (::SHGetSpecialFolderPath(NULL, path, CSIDL_INTERNET_CACHE, TRUE)) | 496 if (::SHGetSpecialFolderPath(NULL, path, CSIDL_INTERNET_CACHE, TRUE)) |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 } | 553 } |
| 565 s_criticalSectionLocal.Unlock(); | 554 s_criticalSectionLocal.Unlock(); |
| 566 | 555 |
| 567 return hasKey; | 556 return hasKey; |
| 568 } | 557 } |
| 569 | 558 |
| 570 | 559 |
| 571 void CPluginSettings::Remove(const CString& key) | 560 void CPluginSettings::Remove(const CString& key) |
| 572 { | 561 { |
| 573 s_criticalSectionLocal.Lock(); | 562 s_criticalSectionLocal.Lock(); |
| 574 { | 563 { |
| 575 TProperties::iterator it = m_properties.find(key); | 564 TProperties::iterator it = m_properties.find(key); |
| 576 if (it != m_properties.end()) | 565 if (it != m_properties.end()) |
| 577 { | 566 { |
| 578 m_properties.erase(it); | 567 m_properties.erase(it); |
| 579 m_isDirty = true; | 568 m_isDirty = true; |
| 580 } | 569 } |
| 581 } | 570 } |
| 582 s_criticalSectionLocal.Unlock(); | 571 s_criticalSectionLocal.Unlock(); |
| 583 } | 572 } |
| 584 | 573 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 612 s_criticalSectionLocal.Lock(); | 601 s_criticalSectionLocal.Lock(); |
| 613 { | 602 { |
| 614 TProperties::iterator it = m_properties.find(key); | 603 TProperties::iterator it = m_properties.find(key); |
| 615 if (it != m_properties.end() && it->second != value) | 604 if (it != m_properties.end() && it->second != value) |
| 616 { | 605 { |
| 617 it->second = value; | 606 it->second = value; |
| 618 m_isDirty = true; | 607 m_isDirty = true; |
| 619 } | 608 } |
| 620 else if (it == m_properties.end()) | 609 else if (it == m_properties.end()) |
| 621 { | 610 { |
| 622 m_properties[key] = value; | 611 m_properties[key] = value; |
| 623 m_isDirty = true; | 612 m_isDirty = true; |
| 624 } | 613 } |
| 625 } | 614 } |
| 626 s_criticalSectionLocal.Unlock(); | 615 s_criticalSectionLocal.Unlock(); |
| 627 } | 616 } |
| 628 | 617 |
| 629 | 618 |
| 630 int CPluginSettings::GetValue(const CString& key, int defaultValue) const | 619 int CPluginSettings::GetValue(const CString& key, int defaultValue) const |
| 631 { | 620 { |
| 632 int val = defaultValue; | 621 int val = defaultValue; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 661 s_criticalSectionLocal.Lock(); | 650 s_criticalSectionLocal.Lock(); |
| 662 { | 651 { |
| 663 TProperties::iterator it = m_properties.find(key); | 652 TProperties::iterator it = m_properties.find(key); |
| 664 if (it != m_properties.end() && it->second != sValue) | 653 if (it != m_properties.end() && it->second != sValue) |
| 665 { | 654 { |
| 666 it->second = sValue; | 655 it->second = sValue; |
| 667 m_isDirty = true; | 656 m_isDirty = true; |
| 668 } | 657 } |
| 669 else if (it == m_properties.end()) | 658 else if (it == m_properties.end()) |
| 670 { | 659 { |
| 671 m_properties[key] = sValue; | 660 m_properties[key] = sValue; |
| 672 m_isDirty = true; | 661 m_isDirty = true; |
| 673 } | 662 } |
| 674 } | 663 } |
| 675 s_criticalSectionLocal.Unlock(); | 664 s_criticalSectionLocal.Unlock(); |
| 676 } | 665 } |
| 677 | 666 |
| 678 | 667 |
| 679 bool CPluginSettings::GetBool(const CString& key, bool defaultValue) const | 668 bool CPluginSettings::GetBool(const CString& key, bool defaultValue) const |
| 680 { | 669 { |
| 681 bool value = defaultValue; | 670 bool value = defaultValue; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 701 { | 690 { |
| 702 SetString(key, value ? "true":"false"); | 691 SetString(key, value ? "true":"false"); |
| 703 } | 692 } |
| 704 | 693 |
| 705 | 694 |
| 706 bool CPluginSettings::IsPluginEnabled() const | 695 bool CPluginSettings::IsPluginEnabled() const |
| 707 { | 696 { |
| 708 return m_isPluginEnabledTab; | 697 return m_isPluginEnabledTab; |
| 709 } | 698 } |
| 710 | 699 |
| 711 static void SubsCallback(std::vector<AdblockPlus::SubscriptionPtr>& subscription
s) | |
| 712 { | |
| 713 CPluginSettings::GetInstance()->m_subscriptions = subscriptions; | |
| 714 return; | |
| 715 } | |
| 716 | |
| 717 | 700 |
| 718 std::map<CString, CString> CPluginSettings::GetFilterLanguageTitleList() const | 701 std::map<CString, CString> CPluginSettings::GetFilterLanguageTitleList() const |
| 719 { | 702 { |
| 720 std::map<CString, CString> filterList; | 703 std::map<CString, CString> filterList; |
| 721 for (int i = 0; i < m_subscriptions.size(); i ++) | 704 for (size_t i = 0; i < m_subscriptions.size(); i ++) |
| 722 { | 705 { |
| 723 AdblockPlus::SubscriptionPtr it = m_subscriptions[i]; | 706 SubscriptionDescription it = m_subscriptions[i]; |
| 724 std::string title = ""; | 707 filterList.insert(std::make_pair(CString(CA2T(it.url.c_str(), CP_UTF8)), CSt
ring(CA2T(it.title.c_str(), CP_UTF8)))); |
| 725 std::string url = ""; | |
| 726 | |
| 727 title = it.get()->GetProperty("specialization")->AsString(); | |
| 728 url = it.get()->GetProperty("url")->AsString(); | |
| 729 | |
| 730 filterList.insert(std::make_pair(CString(CA2T(url.c_str(), CP_UTF8)), CStrin
g(CA2T(title.c_str(), CP_UTF8)))); | |
| 731 } | 708 } |
| 732 return filterList; | 709 return filterList; |
| 733 } | 710 } |
| 734 | 711 |
| 735 | 712 |
| 736 bool CPluginSettings::Write(bool isDebug) | 713 bool CPluginSettings::Write(bool isDebug) |
| 737 { | 714 { |
| 738 bool isWritten = true; | 715 bool isWritten = true; |
| 739 | 716 |
| 740 if (!m_isDirty) | 717 if (!m_isDirty) |
| 741 { | 718 { |
| 742 return isWritten; | 719 return isWritten; |
| 743 } | 720 } |
| 744 | 721 |
| 745 if (isDebug) | 722 if (isDebug) |
| 746 { | 723 { |
| 747 DEBUG_GENERAL(L"*** Writing changed settings") | 724 DEBUG_GENERAL(L"*** Writing changed settings") |
| 748 } | 725 } |
| 749 | 726 |
| 750 CPluginSettingsLock lock; | 727 CPluginSettingsLock lock; |
| 751 if (lock.IsLocked()) | 728 if (lock.IsLocked()) |
| 752 { | 729 { |
| 753 m_settingsFile->Clear(); | 730 m_settingsFile->Clear(); |
| 754 | 731 |
| 755 // Properties | 732 // Properties |
| 756 CPluginIniFileW::TSectionData settings; | 733 CPluginIniFileW::TSectionData settings; |
| 757 | 734 |
| 758 s_criticalSectionLocal.Lock(); | 735 s_criticalSectionLocal.Lock(); |
| 759 { | 736 { |
| 760 for (TProperties::iterator it = m_properties.begin(); it != m_properties.e
nd(); ++it) | 737 for (TProperties::iterator it = m_properties.begin(); it != m_properties.e
nd(); ++it) |
| 761 { | 738 { |
| 762 settings[it->first] = it->second; | 739 settings[it->first] = it->second; |
| 763 } | 740 } |
| 764 } | 741 } |
| 765 s_criticalSectionLocal.Unlock(); | 742 s_criticalSectionLocal.Unlock(); |
| 766 | 743 |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 939 { | 916 { |
| 940 bool isRead = true; | 917 bool isRead = true; |
| 941 | 918 |
| 942 DEBUG_SETTINGS(L"SettingsTab::Read tab") | 919 DEBUG_SETTINGS(L"SettingsTab::Read tab") |
| 943 | 920 |
| 944 if (bDebug) | 921 if (bDebug) |
| 945 { | 922 { |
| 946 DEBUG_GENERAL(L"*** Loading tab settings:" + m_settingsFileTab->GetFilePat
h()); | 923 DEBUG_GENERAL(L"*** Loading tab settings:" + m_settingsFileTab->GetFilePat
h()); |
| 947 } | 924 } |
| 948 | 925 |
| 949 isRead = m_settingsFileTab->Read(); | 926 isRead = m_settingsFileTab->Read(); |
| 950 if (isRead) | 927 if (isRead) |
| 951 { | 928 { |
| 952 ClearTab(); | 929 ClearTab(); |
| 953 | 930 |
| 954 if (m_settingsFileTab->IsValidChecksum()) | 931 if (m_settingsFileTab->IsValidChecksum()) |
| 955 { | 932 { |
| 956 s_criticalSectionLocal.Lock(); | 933 s_criticalSectionLocal.Lock(); |
| 957 { | 934 { |
| 958 m_propertiesTab = m_settingsFileTab->GetSectionData("Settings"); | 935 m_propertiesTab = m_settingsFileTab->GetSectionData("Settings"); |
| 959 | 936 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1002 } | 979 } |
| 1003 | 980 |
| 1004 if (isDebug) | 981 if (isDebug) |
| 1005 { | 982 { |
| 1006 DEBUG_GENERAL(L"*** Writing changed tab settings") | 983 DEBUG_GENERAL(L"*** Writing changed tab settings") |
| 1007 } | 984 } |
| 1008 | 985 |
| 1009 m_settingsFileTab->Clear(); | 986 m_settingsFileTab->Clear(); |
| 1010 | 987 |
| 1011 // Properties & errors | 988 // Properties & errors |
| 1012 CPluginIniFileW::TSectionData settings; | 989 CPluginIniFileW::TSectionData settings; |
| 1013 CPluginIniFileW::TSectionData errors; | 990 CPluginIniFileW::TSectionData errors; |
| 1014 | 991 |
| 1015 s_criticalSectionLocal.Lock(); | 992 s_criticalSectionLocal.Lock(); |
| 1016 { | 993 { |
| 1017 for (TProperties::iterator it = m_propertiesTab.begin(); it != m_propertiesT
ab.end(); ++it) | 994 for (TProperties::iterator it = m_propertiesTab.begin(); it != m_propertiesT
ab.end(); ++it) |
| 1018 { | 995 { |
| 1019 settings[it->first] = it->second; | 996 settings[it->first] = it->second; |
| 1020 } | 997 } |
| 1021 | 998 |
| 1022 for (TProperties::iterator it = m_errorsTab.begin(); it != m_errorsTab.end()
; ++it) | 999 for (TProperties::iterator it = m_errorsTab.begin(); it != m_errorsTab.end()
; ++it) |
| 1023 { | 1000 { |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1070 | 1047 |
| 1071 CString today; | 1048 CString today; |
| 1072 today.Format(L"%d-%d-%d", systemTime.wYear, systemTime.wMonth, systemTime.wD
ay); | 1049 today.Format(L"%d-%d-%d", systemTime.wYear, systemTime.wMonth, systemTime.wD
ay); |
| 1073 | 1050 |
| 1074 ReadTab(false); | 1051 ReadTab(false); |
| 1075 | 1052 |
| 1076 s_criticalSectionLocal.Lock(); | 1053 s_criticalSectionLocal.Lock(); |
| 1077 { | 1054 { |
| 1078 TProperties::iterator it = m_propertiesTab.find(SETTING_TAB_COUNT); | 1055 TProperties::iterator it = m_propertiesTab.find(SETTING_TAB_COUNT); |
| 1079 if (it != m_propertiesTab.end()) | 1056 if (it != m_propertiesTab.end()) |
| 1080 { | 1057 { |
| 1081 tabCount = _wtoi(it->second) + 1; | 1058 tabCount = _wtoi(it->second) + 1; |
| 1082 } | 1059 } |
| 1083 | 1060 |
| 1084 it = m_propertiesTab.find(SETTING_TAB_START_TIME); | 1061 it = m_propertiesTab.find(SETTING_TAB_START_TIME); |
| 1085 | 1062 |
| 1086 //Is this a first IE instance? | 1063 //Is this a first IE instance? |
| 1087 HWND ieWnd = FindWindow(L"IEFrame", NULL); | 1064 HWND ieWnd = FindWindow(L"IEFrame", NULL); |
| 1088 if (ieWnd != NULL) | 1065 if (ieWnd != NULL) |
| 1089 { | 1066 { |
| 1090 ieWnd = FindWindowEx(NULL, ieWnd, L"IEFrame", NULL); | 1067 ieWnd = FindWindowEx(NULL, ieWnd, L"IEFrame", NULL); |
| 1091 | 1068 |
| 1092 } | 1069 } |
| 1093 if ((it != m_propertiesTab.end() && it->second != today)) | 1070 if ((it != m_propertiesTab.end() && it->second != today)) |
| 1094 { | 1071 { |
| 1095 tabCount = 1; | 1072 tabCount = 1; |
| 1096 } | 1073 } |
| 1097 m_tabNumber.Format(L"%d", tabCount); | 1074 m_tabNumber.Format(L"%d", tabCount); |
| 1098 | 1075 |
| 1099 m_propertiesTab[SETTING_TAB_COUNT] = m_tabNumber; | 1076 m_propertiesTab[SETTING_TAB_COUNT] = m_tabNumber; |
| 1100 m_propertiesTab[SETTING_TAB_START_TIME] = today; | 1077 m_propertiesTab[SETTING_TAB_START_TIME] = today; |
| 1101 | 1078 |
| 1102 // Main tab? | 1079 // Main tab? |
| 1103 if (tabCount == 1) | 1080 if (tabCount == 1) |
| 1104 { | 1081 { |
| 1105 m_propertiesTab[SETTING_TAB_DICTIONARY_VERSION] = "1"; | 1082 m_propertiesTab[SETTING_TAB_DICTIONARY_VERSION] = "1"; |
| 1106 m_propertiesTab[SETTING_TAB_SETTINGS_VERSION] = "1"; | 1083 m_propertiesTab[SETTING_TAB_SETTINGS_VERSION] = "1"; |
| 1107 #ifdef SUPPORT_WHITELIST | 1084 #ifdef SUPPORT_WHITELIST |
| 1108 m_propertiesTab[SETTING_TAB_WHITELIST_VERSION] = "1"; | 1085 m_propertiesTab[SETTING_TAB_WHITELIST_VERSION] = "1"; |
| 1109 #endif | 1086 #endif |
| 1110 #ifdef SUPPORT_FILTER | 1087 #ifdef SUPPORT_FILTER |
| 1111 m_propertiesTab[SETTING_TAB_FILTER_VERSION] = "1"; | 1088 m_propertiesTab[SETTING_TAB_FILTER_VERSION] = "1"; |
| 1112 #endif | 1089 #endif |
| 1113 #ifdef SUPPORT_CONFIG | 1090 #ifdef SUPPORT_CONFIG |
| 1114 m_propertiesTab[SETTING_TAB_CONFIG_VERSION] = "1"; | 1091 m_propertiesTab[SETTING_TAB_CONFIG_VERSION] = "1"; |
| 1115 #endif | 1092 #endif |
| 1116 } | 1093 } |
| 1117 } | 1094 } |
| 1118 s_criticalSectionLocal.Unlock(); | 1095 s_criticalSectionLocal.Unlock(); |
| 1119 | 1096 |
| 1120 m_isDirtyTab = true; | 1097 m_isDirtyTab = true; |
| 1121 | 1098 |
| 1122 WriteTab(false); | 1099 WriteTab(false); |
| 1123 } | 1100 } |
| 1124 | 1101 |
| 1125 return tabCount == 1; | 1102 return tabCount == 1; |
| 1126 } | 1103 } |
| 1127 | 1104 |
| 1128 | 1105 |
| 1129 CString CPluginSettings::GetTabNumber() const | 1106 CString CPluginSettings::GetTabNumber() const |
| 1130 { | 1107 { |
| 1131 CString tabNumber; | 1108 CString tabNumber; |
| 1132 | 1109 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1170 m_propertiesTab.erase(it); | 1147 m_propertiesTab.erase(it); |
| 1171 } | 1148 } |
| 1172 | 1149 |
| 1173 it = m_propertiesTab.find(SETTING_TAB_COUNT); | 1150 it = m_propertiesTab.find(SETTING_TAB_COUNT); |
| 1174 if (it != m_propertiesTab.end()) | 1151 if (it != m_propertiesTab.end()) |
| 1175 { | 1152 { |
| 1176 m_propertiesTab.erase(it); | 1153 m_propertiesTab.erase(it); |
| 1177 } | 1154 } |
| 1178 } | 1155 } |
| 1179 | 1156 |
| 1180 m_isDirtyTab = true; | 1157 m_isDirtyTab = true; |
| 1181 } | 1158 } |
| 1182 } | 1159 } |
| 1183 s_criticalSectionLocal.Unlock(); | 1160 s_criticalSectionLocal.Unlock(); |
| 1184 | 1161 |
| 1185 WriteTab(false); | 1162 WriteTab(false); |
| 1186 } | 1163 } |
| 1187 | 1164 |
| 1188 return tabCount == 0; | 1165 return tabCount == 0; |
| 1189 } | 1166 } |
| 1190 | 1167 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1255 | 1232 |
| 1256 CPluginSettingsTabLock lock; | 1233 CPluginSettingsTabLock lock; |
| 1257 if (lock.IsLocked()) | 1234 if (lock.IsLocked()) |
| 1258 { | 1235 { |
| 1259 ReadTab(false); | 1236 ReadTab(false); |
| 1260 | 1237 |
| 1261 s_criticalSectionLocal.Lock(); | 1238 s_criticalSectionLocal.Lock(); |
| 1262 { | 1239 { |
| 1263 if (m_errorsTab.find(error) == m_errorsTab.end()) | 1240 if (m_errorsTab.find(error) == m_errorsTab.end()) |
| 1264 { | 1241 { |
| 1265 m_errorsTab[error] = errorCode; | 1242 m_errorsTab[error] = errorCode; |
| 1266 m_isDirtyTab = true; | 1243 m_isDirtyTab = true; |
| 1267 } | 1244 } |
| 1268 } | 1245 } |
| 1269 s_criticalSectionLocal.Unlock(); | 1246 s_criticalSectionLocal.Unlock(); |
| 1270 | 1247 |
| 1271 WriteTab(false); | 1248 WriteTab(false); |
| 1272 } | 1249 } |
| 1273 } | 1250 } |
| 1274 | 1251 |
| 1275 | 1252 |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1450 | 1427 |
| 1451 CString versionString; | 1428 CString versionString; |
| 1452 versionString.Format(L"%d", version); | 1429 versionString.Format(L"%d", version); |
| 1453 | 1430 |
| 1454 m_propertiesTab[key] = versionString; | 1431 m_propertiesTab[key] = versionString; |
| 1455 } | 1432 } |
| 1456 s_criticalSectionLocal.Unlock(); | 1433 s_criticalSectionLocal.Unlock(); |
| 1457 | 1434 |
| 1458 m_isDirtyTab = true; | 1435 m_isDirtyTab = true; |
| 1459 | 1436 |
| 1460 WriteTab(false); | 1437 WriteTab(false); |
| 1461 } | 1438 } |
| 1462 } | 1439 } |
| 1463 | 1440 |
| 1464 | 1441 |
| 1465 // ============================================================================ | 1442 // ============================================================================ |
| 1466 // Whitelist settings | 1443 // Whitelist settings |
| 1467 // ============================================================================ | 1444 // ============================================================================ |
| 1468 | 1445 |
| 1469 #ifdef SUPPORT_WHITELIST | 1446 #ifdef SUPPORT_WHITELIST |
| 1470 | 1447 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1488 { | 1465 { |
| 1489 DEBUG_GENERAL("*** Loading whitelist settings"); | 1466 DEBUG_GENERAL("*** Loading whitelist settings"); |
| 1490 } | 1467 } |
| 1491 | 1468 |
| 1492 CPluginSettingsWhitelistLock lock; | 1469 CPluginSettingsWhitelistLock lock; |
| 1493 if (lock.IsLocked()) | 1470 if (lock.IsLocked()) |
| 1494 { | 1471 { |
| 1495 ClearWhitelist(); | 1472 ClearWhitelist(); |
| 1496 | 1473 |
| 1497 s_criticalSectionLocal.Lock(); | 1474 s_criticalSectionLocal.Lock(); |
| 1498 try | 1475 m_whitelistedDomains = CPluginClient::GetInstance()->GetExceptionDomains()
; |
| 1499 { | |
| 1500 std::vector<AdblockPlus::FilterPtr> filters = CPluginClient::GetInstance()
->GetListedFilters(); | |
| 1501 for (int i = 0; i < filters.size(); i ++) | |
| 1502 { | |
| 1503 if (filters[i]->GetType() == AdblockPlus::Filter::Type::TYPE_EXCEPTION) | |
| 1504 { | |
| 1505 std::string text = filters[i]->GetProperty("text")->AsString(); | |
| 1506 //@@||example.com^$document | |
| 1507 size_t endPos = text.rfind("^$document"); | |
| 1508 if (endPos != std::string::npos) | |
| 1509 { | |
| 1510 size_t startPos = text.find("@@||") + 4; | |
| 1511 if (startPos != std::string::npos) | |
| 1512 { | |
| 1513 m_whitelistedDomains.push_back(text.substr(startPos, endPos - star
tPos)); | |
| 1514 } | |
| 1515 } | |
| 1516 } | |
| 1517 } | |
| 1518 } | |
| 1519 catch(std::runtime_error ex) | |
| 1520 { | |
| 1521 DEBUG_GENERAL(ex.what()); | |
| 1522 } | |
| 1523 catch(std::exception ex) | |
| 1524 { | |
| 1525 DEBUG_GENERAL(ex.what()); | |
| 1526 } | |
| 1527 s_criticalSectionLocal.Unlock(); | 1476 s_criticalSectionLocal.Unlock(); |
| 1528 } | 1477 } |
| 1529 else | 1478 else |
| 1530 { | 1479 { |
| 1531 isRead = false; | 1480 isRead = false; |
| 1532 } | 1481 } |
| 1533 | 1482 |
| 1534 return isRead; | 1483 return isRead; |
| 1535 } | 1484 } |
| 1536 | 1485 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1548 ReadWhitelist(false); | 1497 ReadWhitelist(false); |
| 1549 | 1498 |
| 1550 std::string newDomain = CW2A(domain, CP_UTF8); | 1499 std::string newDomain = CW2A(domain, CP_UTF8); |
| 1551 | 1500 |
| 1552 //Domain already present? | 1501 //Domain already present? |
| 1553 if (std::find(m_whitelistedDomains.begin(), m_whitelistedDomains.end(), newD
omain) != m_whitelistedDomains.end()) | 1502 if (std::find(m_whitelistedDomains.begin(), m_whitelistedDomains.end(), newD
omain) != m_whitelistedDomains.end()) |
| 1554 { | 1503 { |
| 1555 return; | 1504 return; |
| 1556 } | 1505 } |
| 1557 s_criticalSectionLocal.Lock(); | 1506 s_criticalSectionLocal.Lock(); |
| 1558 { | 1507 CPluginClient::GetInstance()->AddFilter(std::string("@@||").append(CW2A(doma
in)).append("^$document")); |
| 1559 AdblockPlus::FilterPtr whitelistFilter = CPluginClient::GetInstance()->Get
Filter(std::string("@@||").append(CW2A(domain)).append("^$document")); | |
| 1560 whitelistFilter->AddToList(); | |
| 1561 } | |
| 1562 s_criticalSectionLocal.Unlock(); | 1508 s_criticalSectionLocal.Unlock(); |
| 1563 | 1509 |
| 1564 } | 1510 } |
| 1565 | 1511 |
| 1566 if (isForcingUpdateOnStart) | 1512 if (isForcingUpdateOnStart) |
| 1567 { | 1513 { |
| 1568 ForceConfigurationUpdateOnStart(); | 1514 ForceConfigurationUpdateOnStart(); |
| 1569 } | 1515 } |
| 1570 } | 1516 } |
| 1571 | 1517 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1636 } | 1582 } |
| 1637 | 1583 |
| 1638 void CPluginSettings::SetSubscription(BSTR url) | 1584 void CPluginSettings::SetSubscription(BSTR url) |
| 1639 { | 1585 { |
| 1640 std::string urlConverted = CT2A(url, CP_UTF8); | 1586 std::string urlConverted = CT2A(url, CP_UTF8); |
| 1641 SetSubscription(urlConverted); | 1587 SetSubscription(urlConverted); |
| 1642 } | 1588 } |
| 1643 | 1589 |
| 1644 void CPluginSettings::SetSubscription(std::string url) | 1590 void CPluginSettings::SetSubscription(std::string url) |
| 1645 { | 1591 { |
| 1646 try | 1592 CPluginClient::GetInstance()->SetSubscription(url); |
| 1647 { | 1593 RefreshFilterlist(); |
| 1648 std::vector<AdblockPlus::SubscriptionPtr> subscriptions = CPluginClient::Get
Instance()->GetListedSubscriptions(); | 1594 RefreshWhitelist(); |
| 1649 if (subscriptions.size() > 0) | |
| 1650 { | |
| 1651 for (int i = 0; i < subscriptions.size(); i ++) | |
| 1652 { | |
| 1653 subscriptions[i]->RemoveFromList(); | |
| 1654 } | |
| 1655 } | |
| 1656 AdblockPlus::SubscriptionPtr subscription = CPluginClient::GetInstance()->Ge
tSubscription(url); | |
| 1657 subscription->AddToList(); | |
| 1658 RefreshFilterlist(); | |
| 1659 RefreshWhitelist(); | |
| 1660 } | |
| 1661 catch(std::exception ex) | |
| 1662 { | |
| 1663 DEBUG_GENERAL(ex.what()); | |
| 1664 } | |
| 1665 catch(std::runtime_error ex) | |
| 1666 { | |
| 1667 DEBUG_GENERAL(ex.what()); | |
| 1668 } | |
| 1669 } | 1595 } |
| 1670 | 1596 |
| 1671 std::vector<std::string> split(const std::string& s, char delim) { | 1597 std::vector<std::string> split(const std::string& s, char delim) { |
| 1672 std::vector<std::string> retTokens; | 1598 std::vector<std::string> retTokens; |
| 1673 std::stringstream ss(s); | 1599 std::stringstream ss(s); |
| 1674 std::string item; | 1600 std::string item; |
| 1675 while (std::getline(ss, item, delim)) { | 1601 while (std::getline(ss, item, delim)) { |
| 1676 retTokens.push_back(item); | 1602 retTokens.push_back(item); |
| 1677 } | 1603 } |
| 1678 return retTokens; | 1604 return retTokens; |
| 1679 } | 1605 } |
| 1680 | 1606 |
| 1681 | 1607 |
| 1682 void CPluginSettings::SetDefaultSubscription() | |
| 1683 { | |
| 1684 CPluginSystem* system = CPluginSystem::GetInstance(); | |
| 1685 CString lng = system->GetBrowserLanguage().Left(2); | |
| 1686 std::string browserLanguage = CW2A(lng, CP_UTF8); | |
| 1687 std::vector<SubscriptionPtr> subscriptions = CPluginClient::GetInstance()->Fet
chAvailableSubscriptions(); | |
| 1688 bool subscriptionSet = false; | |
| 1689 while (!subscriptionSet) | |
| 1690 { | |
| 1691 for (int i = 0; i < subscriptions.size(); i++) | |
| 1692 { | |
| 1693 std::string prefixes = subscriptions[i]->GetProperty("prefixes")->AsString
(); | |
| 1694 std::vector<std::string> tokens = split(prefixes, ','); | |
| 1695 for (int j = 0; j < tokens.size(); j ++) | |
| 1696 { | |
| 1697 if (tokens[j] == browserLanguage) | |
| 1698 { | |
| 1699 SetSubscription(subscriptions[i]->GetProperty("url")->AsString()); | |
| 1700 subscriptionSet = true; | |
| 1701 } | |
| 1702 } | |
| 1703 } | |
| 1704 | |
| 1705 if (browserLanguage == "en") | |
| 1706 break; | |
| 1707 // failed to set the subscription for browser language. Try "en" | |
| 1708 browserLanguage = "en"; | |
| 1709 | |
| 1710 } | |
| 1711 } | |
| 1712 | |
| 1713 CString CPluginSettings::GetSubscription() | 1608 CString CPluginSettings::GetSubscription() |
| 1714 { | 1609 { |
| 1715 try | 1610 std::vector<SubscriptionDescription> subscriptions = CPluginClient::GetInstanc
e()->GetListedSubscriptions(); |
| 1716 { | 1611 if (subscriptions.size() > 0) |
| 1717 std::vector<AdblockPlus::SubscriptionPtr> subscriptions = CPluginClient::GetI
nstance()->GetListedSubscriptions(); | 1612 return CString(CA2T(subscriptions.front().url.c_str(), CP_UTF8)); |
| 1718 | 1613 else |
| 1719 if (subscriptions.size() == 0) | 1614 return CString(L""); |
| 1720 { | |
| 1721 SetDefaultSubscription(); | |
| 1722 subscriptions = CPluginClient::GetInstance()->GetListedSubscriptions(); | |
| 1723 } | |
| 1724 for (int i = 0; i < subscriptions.size(); i ++) | |
| 1725 { | |
| 1726 return CString(CA2T(subscriptions[i]->GetProperty("url")->AsString().c_str
(), CP_UTF8)); | |
| 1727 } | |
| 1728 } | |
| 1729 catch(std::exception ex) | |
| 1730 { | |
| 1731 DEBUG_GENERAL(ex.what()); | |
| 1732 } | |
| 1733 catch(std::runtime_error ex) | |
| 1734 { | |
| 1735 DEBUG_GENERAL(ex.what()); | |
| 1736 } | |
| 1737 return CString(L""); | |
| 1738 } | 1615 } |
| 1739 | 1616 |
| 1740 | 1617 |
| 1741 void CPluginSettings::RefreshFilterlist() | 1618 void CPluginSettings::RefreshFilterlist() |
| 1742 { | 1619 { |
| 1743 try | 1620 CPluginClient::GetInstance()->UpdateAllSubscriptions(); |
| 1744 { | |
| 1745 // Make sure at least the default subscription is set | |
| 1746 CPluginSettings* settings = CPluginSettings::GetInstance(); | |
| 1747 settings->GetSubscription(); | |
| 1748 | |
| 1749 std::vector<AdblockPlus::SubscriptionPtr> subscriptions = CPluginClient::Get
Instance()->GetListedSubscriptions(); | |
| 1750 for (int i = 0; i < subscriptions.size(); i ++) | |
| 1751 { | |
| 1752 subscriptions[i]->UpdateFilters(); | |
| 1753 } | |
| 1754 } | |
| 1755 catch(std::exception ex) | |
| 1756 { | |
| 1757 DEBUG_GENERAL(ex.what()); | |
| 1758 } | |
| 1759 catch(std::runtime_error ex) | |
| 1760 { | |
| 1761 DEBUG_GENERAL(ex.what()); | |
| 1762 } | |
| 1763 } | 1621 } |
| 1764 | 1622 |
| 1765 #endif // SUPPORT_WHITELIST | 1623 #endif // SUPPORT_WHITELIST |
| OLD | NEW |