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 "PluginSettings.h" | 5 #include "PluginSettings.h" |
6 #include "PluginClient.h" | 6 #include "PluginClient.h" |
7 #include "PluginSystem.h" | 7 #include "PluginSystem.h" |
8 #ifdef SUPPORT_FILTER | 8 #ifdef SUPPORT_FILTER |
9 #include "PluginFilter.h" | 9 #include "PluginFilter.h" |
10 #endif | 10 #endif |
11 #include "PluginMutex.h" | 11 #include "PluginMutex.h" |
12 #include "../shared/Utils.h" | 12 #include "../shared/Utils.h" |
13 #include <memory> | 13 #include <memory> |
14 | 14 |
15 | 15 |
16 // IE functions | 16 // IE functions |
17 #pragma comment(lib, "iepmapi.lib") | 17 #pragma comment(lib, "iepmapi.lib") |
18 | 18 |
19 #include <knownfolders.h> | 19 #include <knownfolders.h> |
20 | 20 |
21 namespace | 21 namespace |
22 { | 22 { |
23 std::wstring CreateDomainWhitelistingFilter(const CString domain) | 23 std::wstring CreateDomainWhitelistingFilter(const std::wstring domain) |
24 { | 24 { |
25 return std::wstring(L"@@||") + domain.GetString() + std::wstring(L"^$documen
t"); | 25 return L"@@||" + domain + L"^$document"; |
26 } | 26 } |
27 } | 27 } |
28 | 28 |
29 class TSettings | 29 class TSettings |
30 { | 30 { |
31 DWORD processorId; | 31 DWORD processorId; |
32 | 32 |
33 char sPluginId[44]; | 33 char sPluginId[44]; |
34 }; | 34 }; |
35 | 35 |
36 | 36 |
37 class CPluginSettingsLock : public CPluginMutex | 37 class CPluginSettingsLock : public CPluginMutex |
38 { | 38 { |
39 public: | 39 public: |
40 CPluginSettingsLock() : CPluginMutex("SettingsFile", PLUGIN_ERROR_MUTEX_SETTIN
GS_FILE) {} | 40 CPluginSettingsLock() : CPluginMutex( L"SettingsFile", PLUGIN_ERROR_MUTEX_SETT
INGS_FILE ) {} |
41 ~CPluginSettingsLock() {} | 41 ~CPluginSettingsLock() {} |
42 | 42 |
43 }; | 43 }; |
44 | 44 |
45 | 45 |
46 class CPluginSettingsTabLock : public CPluginMutex | 46 class CPluginSettingsTabLock : public CPluginMutex |
47 { | 47 { |
48 public: | 48 public: |
49 CPluginSettingsTabLock() : CPluginMutex("SettingsFileTab", PLUGIN_ERROR_MUTEX_
SETTINGS_FILE_TAB) {} | 49 CPluginSettingsTabLock() : CPluginMutex( L"SettingsFileTab", PLUGIN_ERROR_MUTE
X_SETTINGS_FILE_TAB ) {} |
50 ~CPluginSettingsTabLock() {} | 50 ~CPluginSettingsTabLock() {} |
51 }; | 51 }; |
52 | 52 |
53 #ifdef SUPPORT_WHITELIST | 53 #ifdef SUPPORT_WHITELIST |
54 | 54 |
55 class CPluginSettingsWhitelistLock : public CPluginMutex | 55 class CPluginSettingsWhitelistLock : public CPluginMutex |
56 { | 56 { |
57 public: | 57 public: |
58 CPluginSettingsWhitelistLock() : CPluginMutex("SettingsFileWhitelist", PLUGIN_
ERROR_MUTEX_SETTINGS_FILE_WHITELIST) {} | 58 CPluginSettingsWhitelistLock() : CPluginMutex( L"SettingsFileWhitelist", PLUGI
N_ERROR_MUTEX_SETTINGS_FILE_WHITELIST ) {} |
59 ~CPluginSettingsWhitelistLock() {} | 59 ~CPluginSettingsWhitelistLock() {} |
60 }; | 60 }; |
61 | 61 |
62 #endif | 62 #endif |
63 | 63 |
64 CPluginSettings* CPluginSettings::s_instance = NULL; | 64 CPluginSettings* CPluginSettings::s_instance = NULL; |
65 | 65 |
66 CComAutoCriticalSection CPluginSettings::s_criticalSectionLocal; | 66 CComAutoCriticalSection CPluginSettings::s_criticalSectionLocal; |
67 | 67 |
68 | 68 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 | 109 |
110 s_criticalSectionLocal.Lock(); | 110 s_criticalSectionLocal.Lock(); |
111 { | 111 { |
112 hasInstance = s_instance != NULL; | 112 hasInstance = s_instance != NULL; |
113 } | 113 } |
114 s_criticalSectionLocal.Unlock(); | 114 s_criticalSectionLocal.Unlock(); |
115 | 115 |
116 return hasInstance; | 116 return hasInstance; |
117 } | 117 } |
118 | 118 |
119 | 119 std::wstring CPluginSettings::GetDataPath(const std::wstring & filename) |
120 | |
121 CString CPluginSettings::GetDataPath(const CString& filename) | |
122 { | 120 { |
123 std::wstring path = ::GetAppDataPath() + L"\\" + static_cast<LPCWSTR>(filename
); | 121 return ::GetAppDataPath() + L"\\" + filename; |
124 return CString(path.c_str()); | |
125 } | 122 } |
126 | 123 |
127 CString CPluginSettings::GetSystemLanguage() | 124 std::wstring CPluginSettings::GetSystemLanguage() |
128 { | 125 { |
129 CString language; | 126 DWORD bufSize = 256; |
130 CString country; | 127 std::unique_ptr< wchar_t > buffer( new wchar_t[ bufSize ] ); |
| 128 int ccBuf = GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO639LANGNAME, buff
er.get(), bufSize); |
| 129 std::wstring language( buffer.get() ); |
| 130 ccBuf = GetLocaleInfoW(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO3166CTRYNAME, buffer.
get(), bufSize); |
| 131 std::wstring country( buffer.get() ); |
131 | 132 |
132 DWORD bufSize = 256; | 133 if ((country.empty()) || (language.empty())) |
133 int ccBuf = GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO639LANGNAME, langu
age.GetBufferSetLength(bufSize), bufSize); | |
134 ccBuf = GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SISO3166CTRYNAME, country.
GetBufferSetLength(bufSize), bufSize); | |
135 | |
136 if ((country.IsEmpty()) || (language.IsEmpty())) | |
137 { | 134 { |
138 return CString(); | 135 return L""; |
139 } | 136 } |
140 CString lang; | 137 return language + L"-" + country; |
141 lang.Append(language); | |
142 lang.Append(L"-"); | |
143 lang.Append(country); | |
144 | |
145 return lang; | |
146 | |
147 } | 138 } |
148 | 139 |
149 | 140 |
150 bool CPluginSettings::IsPluginEnabled() const | 141 bool CPluginSettings::IsPluginEnabled() const |
151 { | 142 { |
152 return GetPluginEnabled(); | 143 return GetPluginEnabled(); |
153 } | 144 } |
154 | 145 |
155 | 146 |
156 std::map<CString, CString> CPluginSettings::GetFilterLanguageTitleList() const | 147 std::map< std::wstring, std::wstring > CPluginSettings::GetFilterLanguageTitleLi
st() const |
157 { | 148 { |
158 std::vector<SubscriptionDescription> subscriptions = CPluginClient::GetInstanc
e()->FetchAvailableSubscriptions(); | 149 std::vector<SubscriptionDescription> subscriptions = CPluginClient::GetInstanc
e()->FetchAvailableSubscriptions(); |
159 | 150 |
160 std::map<CString, CString> filterList; | 151 std::map< std::wstring, std::wstring > filterList; |
161 for (size_t i = 0; i < subscriptions.size(); i ++) | 152 for (size_t i = 0; i < subscriptions.size(); i ++) |
162 { | 153 { |
163 SubscriptionDescription it = subscriptions[i]; | 154 SubscriptionDescription it = subscriptions[i]; |
164 filterList.insert(std::make_pair(CString(it.url.c_str()), CString(it.title.c
_str()))); | 155 filterList.insert(std::make_pair(it.url, it.title)); |
165 } | 156 } |
166 return filterList; | 157 return filterList; |
167 } | 158 } |
168 | 159 |
169 bool CPluginSettings::IsWorkingThread(DWORD dwThreadId) const | 160 bool CPluginSettings::IsWorkingThread(DWORD dwThreadId) const |
170 { | 161 { |
171 if (dwThreadId == 0) | 162 if (dwThreadId == 0) |
172 { | 163 { |
173 dwThreadId = ::GetCurrentThreadId(); | 164 dwThreadId = ::GetCurrentThreadId(); |
174 } | 165 } |
(...skipping 13 matching lines...) Expand all Loading... |
188 void CPluginSettings::TogglePluginEnabled() | 179 void CPluginSettings::TogglePluginEnabled() |
189 { | 180 { |
190 CPluginClient::GetInstance()->TogglePluginEnabled(); | 181 CPluginClient::GetInstance()->TogglePluginEnabled(); |
191 } | 182 } |
192 bool CPluginSettings::GetPluginEnabled() const | 183 bool CPluginSettings::GetPluginEnabled() const |
193 { | 184 { |
194 return CPluginClient::GetInstance()->GetPref(L"enabled", true); | 185 return CPluginClient::GetInstance()->GetPref(L"enabled", true); |
195 } | 186 } |
196 | 187 |
197 | 188 |
198 void CPluginSettings::AddError(const CString& error, const CString& errorCode) | 189 void CPluginSettings::AddError(const std::wstring & error, const std::wstring &
errorCode) |
199 { | 190 { |
200 DEBUG_SETTINGS(L"SettingsTab::AddError error:" + error + " code:" + errorCode) | 191 DEBUG_SETTINGS( L"SettingsTab::AddError error:" + error + L" code:" + errorCod
e ) |
201 } | 192 } |
202 | 193 |
203 | 194 |
204 // ============================================================================ | 195 // ============================================================================ |
205 // Whitelist settings | 196 // Whitelist settings |
206 // ============================================================================ | 197 // ============================================================================ |
207 | 198 |
208 #ifdef SUPPORT_WHITELIST | 199 #ifdef SUPPORT_WHITELIST |
209 | 200 |
210 void CPluginSettings::ClearWhitelist() | 201 void CPluginSettings::ClearWhitelist() |
211 { | 202 { |
212 s_criticalSectionLocal.Lock(); | 203 s_criticalSectionLocal.Lock(); |
213 { | 204 { |
214 m_whitelistedDomains.clear(); | 205 m_whitelistedDomains.clear(); |
215 } | 206 } |
216 s_criticalSectionLocal.Unlock(); | 207 s_criticalSectionLocal.Unlock(); |
217 } | 208 } |
218 | 209 |
219 | 210 |
220 bool CPluginSettings::ReadWhitelist(bool isDebug) | 211 bool CPluginSettings::ReadWhitelist(bool isDebug) |
221 { | 212 { |
222 bool isRead = true; | 213 bool isRead = true; |
223 | 214 |
224 DEBUG_SETTINGS("SettingsWhitelist::Read") | 215 DEBUG_SETTINGS("SettingsWhitelist::Read") |
225 | 216 |
226 if (isDebug) | 217 if (isDebug) |
227 { | 218 { |
228 DEBUG_GENERAL("*** Loading whitelist settings"); | 219 DEBUG_GENERAL(L"*** Loading whitelist settings"); |
229 } | 220 } |
230 | 221 |
231 CPluginSettingsWhitelistLock lock; | 222 CPluginSettingsWhitelistLock lock; |
232 if (lock.IsLocked()) | 223 if (lock.IsLocked()) |
233 { | 224 { |
234 ClearWhitelist(); | 225 ClearWhitelist(); |
235 | 226 |
236 s_criticalSectionLocal.Lock(); | 227 s_criticalSectionLocal.Lock(); |
237 m_whitelistedDomains = CPluginClient::GetInstance()->GetExceptionDomains()
; | 228 m_whitelistedDomains = CPluginClient::GetInstance()->GetExceptionDomains()
; |
238 s_criticalSectionLocal.Unlock(); | 229 s_criticalSectionLocal.Unlock(); |
239 } | 230 } |
240 else | 231 else |
241 { | 232 { |
242 isRead = false; | 233 isRead = false; |
243 } | 234 } |
244 | 235 |
245 return isRead; | 236 return isRead; |
246 } | 237 } |
247 | 238 |
248 | 239 |
249 void CPluginSettings::AddWhiteListedDomain(const CString& domain) | 240 void CPluginSettings::AddWhiteListedDomain(const std::wstring & domain) |
250 { | 241 { |
251 DEBUG_SETTINGS("SettingsWhitelist::AddWhiteListedDomain domain:" + domain) | 242 DEBUG_SETTINGS("SettingsWhitelist::AddWhiteListedDomain domain:" + domain) |
252 CPluginClient::GetInstance()->AddFilter(CreateDomainWhitelistingFilter(domain)
); | 243 CPluginClient::GetInstance()->AddFilter(CreateDomainWhitelistingFilter(domain)
); |
253 } | 244 } |
254 | 245 |
255 void CPluginSettings::RemoveWhiteListedDomain(const CString& domain) | 246 void CPluginSettings::RemoveWhiteListedDomain(const std::wstring & domain) |
256 { | 247 { |
257 DEBUG_SETTINGS("SettingsWhitelist::RemoveWhiteListedDomain domain:" + domain) | 248 DEBUG_SETTINGS("SettingsWhitelist::RemoveWhiteListedDomain domain:" + domain) |
258 CPluginClient::GetInstance()->RemoveFilter(CreateDomainWhitelistingFilter(doma
in)); | 249 CPluginClient::GetInstance()->RemoveFilter(CreateDomainWhitelistingFilter(doma
in)); |
259 } | 250 } |
260 | 251 |
261 int CPluginSettings::GetWhiteListedDomainCount() const | 252 int CPluginSettings::GetWhiteListedDomainCount() const |
262 { | 253 { |
263 int count = 0; | 254 int count = 0; |
264 | 255 |
265 s_criticalSectionLocal.Lock(); | 256 s_criticalSectionLocal.Lock(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
309 | 300 |
310 return m_WindowsBuildNumber; | 301 return m_WindowsBuildNumber; |
311 } | 302 } |
312 | 303 |
313 void CPluginSettings::SetSubscription(const std::wstring& url) | 304 void CPluginSettings::SetSubscription(const std::wstring& url) |
314 { | 305 { |
315 CPluginClient::GetInstance()->SetSubscription(url); | 306 CPluginClient::GetInstance()->SetSubscription(url); |
316 RefreshWhitelist(); | 307 RefreshWhitelist(); |
317 } | 308 } |
318 | 309 |
319 CString CPluginSettings::GetSubscription() | 310 std::wstring CPluginSettings::GetSubscription() |
320 { | 311 { |
321 std::vector<SubscriptionDescription> subscriptions = CPluginClient::GetInstanc
e()->GetListedSubscriptions(); | 312 std::vector<SubscriptionDescription> subscriptions = CPluginClient::GetInstanc
e()->GetListedSubscriptions(); |
322 if (subscriptions.size() > 0) | 313 if (subscriptions.size() > 0) |
323 return CString(subscriptions.front().url.c_str()); | 314 return subscriptions.front().url; |
324 else | 315 else |
325 return CString(L""); | 316 return L""; |
326 } | 317 } |
327 | 318 |
328 CString CPluginSettings::GetAppLocale() | 319 std::wstring CPluginSettings::GetAppLocale() |
329 { | 320 { |
330 return CPluginSystem::GetInstance()->GetBrowserLanguage(); | 321 return CPluginSystem::GetInstance()->GetBrowserLanguage(); |
331 } | 322 } |
332 | 323 |
333 CString CPluginSettings::GetDocumentationLink() | 324 std::wstring CPluginSettings::GetDocumentationLink() |
334 { | 325 { |
335 return CString(CPluginClient::GetInstance()->GetDocumentationLink().c_str()); | 326 return CPluginClient::GetInstance()->GetDocumentationLink(); |
336 } | 327 } |
337 | 328 |
338 | 329 |
339 | 330 |
340 #endif // SUPPORT_WHITELIST | 331 #endif // SUPPORT_WHITELIST |
OLD | NEW |