| OLD | NEW |
| 1 #include "PluginStdAfx.h" | 1 #include "PluginStdAfx.h" |
| 2 #include "PluginUserSettings.h" | 2 #include "PluginUserSettings.h" |
| 3 #include <algorithm> | 3 #include <algorithm> |
| 4 #include "PluginSettings.h" | 4 #include "PluginSettings.h" |
| 5 #include "PluginClient.h" | 5 #include "PluginClient.h" |
| 6 #include "COM_Client.h" |
| 6 #include "../shared/Dictionary.h" | 7 #include "../shared/Dictionary.h" |
| 7 | 8 |
| 8 static const CString s_GetMessage = L"GetMessage"; | 9 static const std::wstring s_GetMessage = L"GetMessage"; |
| 9 static const CString s_GetLanguageCount = L"GetLanguageCount"; | 10 static const std::wstring s_GetLanguageCount = L"GetLanguageCount"; |
| 10 static const CString s_GetLanguageByIndex = L"GetLanguageByIndex"; | 11 static const std::wstring s_GetLanguageByIndex = L"GetLanguageByIndex"; |
| 11 static const CString s_GetLanguageTitleByIndex = L"GetLanguageTitleByIndex"; | 12 static const std::wstring s_GetLanguageTitleByIndex = L"GetLanguageTitleByIndex"
; |
| 12 static const CString s_SetLanguage = L"SetLanguage"; | 13 static const std::wstring s_SetLanguage = L"SetLanguage"; |
| 13 static const CString s_GetLanguage = L"GetLanguage"; | 14 static const std::wstring s_GetLanguage = L"GetLanguage"; |
| 14 static const CString s_GetWhitelistDomains = L"GetWhitelistDomains"; | 15 static const std::wstring s_GetWhitelistDomains = L"GetWhitelistDomains"; |
| 15 static const CString s_AddWhitelistDomain = L"AddWhitelistDomain"; | 16 static const std::wstring s_AddWhitelistDomain = L"AddWhitelistDomain"; |
| 16 static const CString s_RemoveWhitelistDomain = L"RemoveWhitelistDomain"; | 17 static const std::wstring s_RemoveWhitelistDomain = L"RemoveWhitelistDomain"; |
| 17 static const CString s_GetAppLocale = L"GetAppLocale"; | 18 static const std::wstring s_GetAppLocale = L"GetAppLocale"; |
| 18 static const CString s_GetDocumentationLink = L"GetDocumentationLink"; | 19 static const std::wstring s_GetDocumentationLink = L"GetDocumentationLink"; |
| 19 | 20 |
| 20 static const CString s_Methods[] = {s_GetMessage, s_GetLanguageCount, s_GetLangu
ageByIndex, s_GetLanguageTitleByIndex, s_SetLanguage, s_GetLanguage, s_GetWhitel
istDomains, s_AddWhitelistDomain, s_RemoveWhitelistDomain, s_GetAppLocale, s_Get
DocumentationLink}; | 21 static const std::wstring s_Methods[] = {s_GetMessage, s_GetLanguageCount, s_Get
LanguageByIndex, s_GetLanguageTitleByIndex, s_SetLanguage, s_GetLanguage, s_GetW
hitelistDomains, s_AddWhitelistDomain, s_RemoveWhitelistDomain, s_GetAppLocale,
s_GetDocumentationLink}; |
| 21 | 22 |
| 22 CPluginUserSettings::CPluginUserSettings() | 23 CPluginUserSettings::CPluginUserSettings() |
| 23 { | 24 { |
| 24 } | 25 } |
| 25 | 26 |
| 26 | 27 |
| 27 STDMETHODIMP CPluginUserSettings::QueryInterface(REFIID riid, void **ppvObj) | 28 STDMETHODIMP CPluginUserSettings::QueryInterface(REFIID riid, void **ppvObj) |
| 28 { | 29 { |
| 29 if (IID_IUnknown == riid || IID_IDispatch == riid) | 30 if (IID_IUnknown == riid || IID_IDispatch == riid) |
| 30 { | 31 { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 | 86 |
| 86 if (indxMethod == countof(s_Methods)) | 87 if (indxMethod == countof(s_Methods)) |
| 87 return DISP_E_MEMBERNOTFOUND; | 88 return DISP_E_MEMBERNOTFOUND; |
| 88 | 89 |
| 89 *rgdispid = static_cast<DISPID>(indxMethod); | 90 *rgdispid = static_cast<DISPID>(indxMethod); |
| 90 | 91 |
| 91 return S_OK; | 92 return S_OK; |
| 92 } | 93 } |
| 93 | 94 |
| 94 | 95 |
| 95 static CString sGetLanguage() | 96 static std::wstring sGetLanguage() |
| 96 { | 97 { |
| 97 CPluginSettings* settings = CPluginSettings::GetInstance(); | 98 CPluginSettings* settings = CPluginSettings::GetInstance(); |
| 98 return settings->GetSubscription(); | 99 return settings->GetSubscription(); |
| 99 } | 100 } |
| 100 | 101 |
| 101 | 102 |
| 102 CStringW sGetMessage(const CString& section, const CString& key) | |
| 103 { | |
| 104 Dictionary* dictionary = Dictionary::GetInstance(); | |
| 105 return CStringW(dictionary->Lookup(std::string(CW2A(section)), std::string(CW2
A(key))).c_str()); | |
| 106 } | |
| 107 | |
| 108 std::wstring sGetMessage(const std::string& section, const std::string& key) | 103 std::wstring sGetMessage(const std::string& section, const std::string& key) |
| 109 { | 104 { |
| 110 Dictionary* dictionary = Dictionary::GetInstance(); | 105 Dictionary* dictionary = Dictionary::GetInstance(); |
| 111 return dictionary->Lookup(section, key); | 106 return dictionary->Lookup(section, key); |
| 112 } | 107 } |
| 113 | 108 |
| 114 | 109 |
| 115 STDMETHODIMP CPluginUserSettings::Invoke(DISPID dispidMember, REFIID riid, LCID
lcid, WORD wFlags, DISPPARAMS* pDispparams, VARIANT* pVarResult, | 110 STDMETHODIMP CPluginUserSettings::Invoke(DISPID dispidMember, REFIID riid, LCID
lcid, WORD wFlags, DISPPARAMS* pDispparams, VARIANT* pVarResult, |
| 116 EXCEPINFO* pExcepinfo, UINT* pArgErr) | 111 EXCEPINFO* pExcepinfo, UINT* pArgErr) |
| 117 { | 112 { |
| 118 if (!pDispparams) | 113 if (!pDispparams) |
| 119 return E_POINTER; | 114 return E_POINTER; |
| 120 | 115 |
| 121 if (!pExcepinfo) | 116 if (!pExcepinfo) |
| 122 return E_POINTER; | 117 return E_POINTER; |
| 123 | 118 |
| 124 if (pDispparams->cNamedArgs) | 119 if (pDispparams->cNamedArgs) |
| 125 return DISP_E_NONAMEDARGS; | 120 return DISP_E_NONAMEDARGS; |
| 126 | 121 |
| 127 CPluginSettings* settings = CPluginSettings::GetInstance(); | 122 CPluginSettings* settings = CPluginSettings::GetInstance(); |
| 128 | 123 |
| 129 if (dispidMember < 0 || dispidMember >= countof(s_Methods)) | 124 if (dispidMember < 0 || dispidMember >= countof(s_Methods)) |
| 130 return DISP_E_BADINDEX; | 125 return DISP_E_BADINDEX; |
| 131 | 126 |
| 132 const CString& method = s_Methods[dispidMember]; | 127 const std::wstring method = s_Methods[dispidMember]; |
| 133 | 128 |
| 134 if (s_GetMessage == method) | 129 if (s_GetMessage == method) |
| 135 { | 130 { |
| 136 if (2 != pDispparams->cArgs) | 131 if (2 != pDispparams->cArgs) |
| 137 return DISP_E_BADPARAMCOUNT; | 132 return DISP_E_BADPARAMCOUNT; |
| 138 | 133 |
| 139 if (VT_BSTR != pDispparams->rgvarg[0].vt) | 134 if (VT_BSTR != pDispparams->rgvarg[0].vt) |
| 140 return DISP_E_TYPEMISMATCH; | 135 return DISP_E_TYPEMISMATCH; |
| 141 | 136 |
| 142 if (pVarResult) | 137 if (pVarResult) |
| 143 { | 138 { |
| 144 CComBSTR key = pDispparams->rgvarg[0].bstrVal; | 139 std::wstring key = Incoming_BSTR( pDispparams->rgvarg[0].bstrVal ); |
| 145 CComBSTR section = pDispparams->rgvarg[1].bstrVal; | 140 std::wstring section = Incoming_BSTR( pDispparams->rgvarg[1].bstrVal ); |
| 146 CStringW message = sGetMessage((BSTR)section, (BSTR)key); | 141 // [EH] We should change the interface to Dictionary to accept wstring arg
uments. |
| 142 std::wstring message = sGetMessage( ABP::debug::narrow( section ), ABP::de
bug::narrow( key ) ); |
| 147 | 143 |
| 148 pVarResult->vt = VT_BSTR; | 144 invoke_result_wstring( *pVarResult, message ); |
| 149 pVarResult->bstrVal = SysAllocString(message); | |
| 150 } | 145 } |
| 151 } | 146 } |
| 152 else if (s_GetLanguageCount == method) | 147 else if (s_GetLanguageCount == method) |
| 153 { | 148 { |
| 154 if (pDispparams->cArgs) | 149 if (pDispparams->cArgs) |
| 155 return DISP_E_BADPARAMCOUNT; | 150 return DISP_E_BADPARAMCOUNT; |
| 156 | 151 |
| 157 if (pVarResult) | 152 if (pVarResult) |
| 158 { | 153 { |
| 159 std::map<CString, CString> languageList = settings->GetFilterLanguageTitle
List(); | 154 std::map<std::wstring, std::wstring> languageList = settings->GetFilterLan
guageTitleList(); |
| 160 | 155 |
| 161 pVarResult->vt = VT_I4; | 156 pVarResult->vt = VT_I4; |
| 162 pVarResult->lVal = static_cast<LONG>(languageList.size()); | 157 pVarResult->lVal = static_cast<LONG>(languageList.size()); |
| 163 } | 158 } |
| 164 } | 159 } |
| 165 else if (s_GetLanguageByIndex == method) | 160 else if (s_GetLanguageByIndex == method) |
| 166 { | 161 { |
| 167 if (1 != pDispparams->cArgs) | 162 if (1 != pDispparams->cArgs) |
| 168 return DISP_E_BADPARAMCOUNT; | 163 return DISP_E_BADPARAMCOUNT; |
| 169 | 164 |
| 170 if (VT_I4 != pDispparams->rgvarg[0].vt) | 165 if (VT_I4 != pDispparams->rgvarg[0].vt) |
| 171 return DISP_E_TYPEMISMATCH; | 166 return DISP_E_TYPEMISMATCH; |
| 172 | 167 |
| 173 if (pVarResult) | 168 if (pVarResult) |
| 174 { | 169 { |
| 175 int indx = pDispparams->rgvarg[0].lVal; | 170 int indx = pDispparams->rgvarg[0].lVal; |
| 176 | 171 |
| 177 std::map<CString, CString> languageTitleList = settings->GetFilterLanguage
TitleList(); | 172 std::map<std::wstring, std::wstring> languageTitleList = settings->GetFilt
erLanguageTitleList(); |
| 178 | 173 |
| 179 if (indx < 0 || indx >= (int)languageTitleList.size()) | 174 if (indx < 0 || indx >= (int)languageTitleList.size()) |
| 180 return DISP_E_EXCEPTION; | 175 return DISP_E_EXCEPTION; |
| 181 | 176 |
| 182 CString language; | 177 std::wstring language; |
| 183 | 178 |
| 184 int curIndx = 0; | 179 int curIndx = 0; |
| 185 for(std::map<CString, CString>::const_iterator it = languageTitleList.begi
n(); it != languageTitleList.end(); ++it) | 180 for(std::map<std::wstring, std::wstring>::const_iterator it = languageTitl
eList.begin(); it != languageTitleList.end(); ++it) |
| 186 { | 181 { |
| 187 if (curIndx == indx) | 182 if (curIndx == indx) |
| 188 { | 183 { |
| 189 language = it->first; | 184 language = it->first; |
| 190 break; | 185 break; |
| 191 } | 186 } |
| 192 | 187 |
| 193 curIndx++; | 188 curIndx++; |
| 194 } | 189 } |
| 195 | 190 invoke_result_wstring( *pVarResult, language ); |
| 196 pVarResult->vt = VT_BSTR; | |
| 197 pVarResult->bstrVal = SysAllocString(language); | |
| 198 } | 191 } |
| 199 } | 192 } |
| 200 else if (s_GetLanguageTitleByIndex == method) | 193 else if (s_GetLanguageTitleByIndex == method) |
| 201 { | 194 { |
| 202 if (1 != pDispparams->cArgs) | 195 if (1 != pDispparams->cArgs) |
| 203 return DISP_E_BADPARAMCOUNT; | 196 return DISP_E_BADPARAMCOUNT; |
| 204 | 197 |
| 205 if (VT_I4 != pDispparams->rgvarg[0].vt) | 198 if (VT_I4 != pDispparams->rgvarg[0].vt) |
| 206 return DISP_E_TYPEMISMATCH; | 199 return DISP_E_TYPEMISMATCH; |
| 207 | 200 |
| 208 if (pVarResult) | 201 if (pVarResult) |
| 209 { | 202 { |
| 210 int indx = pDispparams->rgvarg[0].lVal; | 203 int indx = pDispparams->rgvarg[0].lVal; |
| 211 | 204 |
| 212 std::map<CString, CString> languageTitleList = settings->GetFilterLanguage
TitleList(); | 205 std::map<std::wstring, std::wstring> languageTitleList = settings->GetFilt
erLanguageTitleList(); |
| 213 | 206 |
| 214 if (indx < 0 || indx >= (int)languageTitleList.size()) | 207 if (indx < 0 || indx >= (int)languageTitleList.size()) |
| 215 return DISP_E_EXCEPTION; | 208 return DISP_E_EXCEPTION; |
| 216 | 209 |
| 217 CString languageTitle; | 210 std::wstring languageTitle; |
| 218 | 211 |
| 219 int curIndx = 0; | 212 int curIndx = 0; |
| 220 for(std::map<CString, CString>::const_iterator it = languageTitleList.begi
n(); it != languageTitleList.end(); ++it) | 213 for(std::map<std::wstring, std::wstring>::const_iterator it = languageTitl
eList.begin(); it != languageTitleList.end(); ++it) |
| 221 { | 214 { |
| 222 if (curIndx == indx) | 215 if (curIndx == indx) |
| 223 { | 216 { |
| 224 languageTitle = it->second; | 217 languageTitle = it->second; |
| 225 break; | 218 break; |
| 226 } | 219 } |
| 227 | 220 |
| 228 curIndx++; | 221 curIndx++; |
| 229 } | 222 } |
| 230 | 223 invoke_result_wstring( *pVarResult, languageTitle ); |
| 231 pVarResult->vt = VT_BSTR; | |
| 232 pVarResult->bstrVal = SysAllocString(languageTitle); | |
| 233 } | 224 } |
| 234 } | 225 } |
| 235 else if (s_SetLanguage == method) | 226 else if (s_SetLanguage == method) |
| 236 { | 227 { |
| 237 if (1 != pDispparams->cArgs) | 228 if (1 != pDispparams->cArgs) |
| 238 return DISP_E_BADPARAMCOUNT; | 229 return DISP_E_BADPARAMCOUNT; |
| 239 | 230 |
| 240 if (VT_BSTR != pDispparams->rgvarg[0].vt) | 231 if (VT_BSTR != pDispparams->rgvarg[0].vt) |
| 241 return DISP_E_TYPEMISMATCH; | 232 return DISP_E_TYPEMISMATCH; |
| 242 | 233 |
| 243 CComBSTR url = pDispparams->rgvarg[0].bstrVal; | 234 std::wstring url = Incoming_BSTR( pDispparams->rgvarg[0].bstrVal ); |
| 244 | 235 settings->SetSubscription( url ); |
| 245 settings->SetSubscription((BSTR)url); | |
| 246 } | 236 } |
| 247 else if (s_GetLanguage == method) | 237 else if (s_GetLanguage == method) |
| 248 { | 238 { |
| 249 if (pDispparams->cArgs) | 239 if (pDispparams->cArgs) |
| 250 return DISP_E_BADPARAMCOUNT; | 240 return DISP_E_BADPARAMCOUNT; |
| 251 | 241 |
| 252 if (pVarResult) | 242 if (pVarResult) |
| 253 { | 243 { |
| 254 CString url = settings->GetSubscription(); | 244 invoke_result_wstring( *pVarResult, settings->GetSubscription() ); |
| 255 | |
| 256 pVarResult->vt = VT_BSTR; | |
| 257 pVarResult->bstrVal = SysAllocString(url); | |
| 258 } | 245 } |
| 259 } | 246 } |
| 260 else if (s_GetWhitelistDomains == method) | 247 else if (s_GetWhitelistDomains == method) |
| 261 { | 248 { |
| 262 if (pDispparams->cArgs) | 249 if (pDispparams->cArgs) |
| 263 return DISP_E_BADPARAMCOUNT; | 250 return DISP_E_BADPARAMCOUNT; |
| 264 | 251 |
| 265 if (pVarResult) | 252 if (pVarResult) |
| 266 { | 253 { |
| 267 std::vector<std::wstring> whiteList = settings->GetWhiteListedDomainList()
; | 254 std::vector<std::wstring> whiteList = settings->GetWhiteListedDomainList()
; |
| 268 CString sWhiteList; | 255 std::wstring whitelist_csv; |
| 269 for (size_t i = 0; i < whiteList.size(); i++) | 256 for (size_t i = 0; i < whiteList.size(); i++) |
| 270 { | 257 { |
| 271 if (!sWhiteList.IsEmpty()) | 258 if ( !whitelist_csv.empty() ) |
| 272 { | 259 { |
| 273 sWhiteList += ','; | 260 whitelist_csv += ','; |
| 274 } | 261 } |
| 275 sWhiteList += CString(whiteList[i].c_str()); | 262 whitelist_csv += whiteList[i]; |
| 276 } | 263 } |
| 277 | 264 invoke_result_wstring( *pVarResult, whitelist_csv ); |
| 278 pVarResult->vt = VT_BSTR; | |
| 279 pVarResult->bstrVal = SysAllocString(sWhiteList); | |
| 280 } | 265 } |
| 281 } | 266 } |
| 282 else if (s_AddWhitelistDomain == method) | 267 else if (s_AddWhitelistDomain == method) |
| 283 { | 268 { |
| 284 if (1 != pDispparams->cArgs) | 269 if (1 != pDispparams->cArgs) |
| 285 return DISP_E_BADPARAMCOUNT; | 270 return DISP_E_BADPARAMCOUNT; |
| 286 | 271 |
| 287 if (VT_BSTR != pDispparams->rgvarg[0].vt) | 272 if (VT_BSTR != pDispparams->rgvarg[0].vt) |
| 288 return DISP_E_TYPEMISMATCH; | 273 return DISP_E_TYPEMISMATCH; |
| 289 | 274 |
| 290 CComBSTR domain = pDispparams->rgvarg[0].bstrVal; | 275 std::wstring domain = Incoming_BSTR( pDispparams->rgvarg[0].bstrVal ); |
| 291 if (domain.Length()) | 276 if ( !domain.empty() ) |
| 292 { | 277 { |
| 293 settings->AddWhiteListedDomain((BSTR)domain); | 278 settings->AddWhiteListedDomain( domain ); |
| 294 } | 279 } |
| 295 } | 280 } |
| 296 else if (s_RemoveWhitelistDomain == method) | 281 else if (s_RemoveWhitelistDomain == method) |
| 297 { | 282 { |
| 298 if (1 != pDispparams->cArgs) | 283 if (1 != pDispparams->cArgs) |
| 299 return DISP_E_BADPARAMCOUNT; | 284 return DISP_E_BADPARAMCOUNT; |
| 300 | 285 |
| 301 if (VT_BSTR != pDispparams->rgvarg[0].vt) | 286 if (VT_BSTR != pDispparams->rgvarg[0].vt) |
| 302 return DISP_E_TYPEMISMATCH; | 287 return DISP_E_TYPEMISMATCH; |
| 303 | 288 |
| 304 CComBSTR domain = pDispparams->rgvarg[0].bstrVal; | 289 std::wstring domain = Incoming_BSTR( pDispparams->rgvarg[0].bstrVal ); |
| 305 if (domain.Length()) | 290 if ( !domain.empty() ) |
| 306 { | 291 { |
| 307 settings->RemoveWhiteListedDomain((BSTR)domain); | 292 settings->RemoveWhiteListedDomain( domain ); |
| 308 } | 293 } |
| 309 } | 294 } |
| 310 else if (s_GetAppLocale == method) | 295 else if (s_GetAppLocale == method) |
| 311 { | 296 { |
| 312 if (0 != pDispparams->cArgs) | 297 if (0 != pDispparams->cArgs) |
| 313 return DISP_E_BADPARAMCOUNT; | 298 return DISP_E_BADPARAMCOUNT; |
| 314 | 299 |
| 315 pVarResult->vt = VT_BSTR; | 300 if ( pVarResult ) |
| 316 pVarResult->bstrVal = SysAllocString(settings->GetAppLocale()); | 301 { |
| 302 invoke_result_wstring( *pVarResult, settings->GetAppLocale() ); |
| 303 } |
| 317 } | 304 } |
| 318 else if (s_GetDocumentationLink == method) | 305 else if (s_GetDocumentationLink == method) |
| 319 { | 306 { |
| 320 if (0 != pDispparams->cArgs) | 307 if (0 != pDispparams->cArgs) |
| 321 return DISP_E_BADPARAMCOUNT; | 308 return DISP_E_BADPARAMCOUNT; |
| 322 | 309 |
| 323 pVarResult->vt = VT_BSTR; | 310 if ( pVarResult ) |
| 324 pVarResult->bstrVal = SysAllocString(settings->GetDocumentationLink()); | 311 { |
| 312 invoke_result_wstring( *pVarResult, settings->GetDocumentationLink() ); |
| 313 } |
| 325 } | 314 } |
| 326 else | 315 else |
| 327 return DISP_E_MEMBERNOTFOUND; | 316 return DISP_E_MEMBERNOTFOUND; |
| 328 | 317 |
| 329 return S_OK; | 318 return S_OK; |
| 330 } | 319 } |
| 331 | 320 |
| OLD | NEW |