| OLD | NEW |
| (Empty) |
| 1 #include "PluginStdAfx.h" | |
| 2 | |
| 3 #include "PluginDictionary.h" | |
| 4 #include "PluginClient.h" | |
| 5 #include "PluginSettings.h" | |
| 6 #include "PluginMutex.h" | |
| 7 | |
| 8 | |
| 9 class CPluginDictionaryLock : public CPluginMutex | |
| 10 { | |
| 11 public: | |
| 12 CPluginDictionaryLock() : CPluginMutex("DictionaryFile", PLUGIN_ERROR_MUTEX_DI
CTIONARY_FILE) {} | |
| 13 ~CPluginDictionaryLock() {} | |
| 14 }; | |
| 15 | |
| 16 | |
| 17 CPluginDictionary* CPluginDictionary::s_instance = NULL; | |
| 18 | |
| 19 CComAutoCriticalSection CPluginDictionary::s_criticalSectionDictionary; | |
| 20 | |
| 21 | |
| 22 CPluginDictionary::CPluginDictionary(bool forceCreate) : m_dictionaryLanguage("e
n") | |
| 23 { | |
| 24 DEBUG_GENERAL("*** Initializing dictionary") | |
| 25 | |
| 26 m_dictionaryConversions[L"UPDATE"] = L"MENU_UPDATE"; | |
| 27 m_dictionaryConversions[L"ABOUT"] = L"MENU_ABOUT"; | |
| 28 m_dictionaryConversions[L"FAQ"] = L"MENU_FAQ"; | |
| 29 m_dictionaryConversions[L"FEEDBACK"] = L"MENU_FEEDBACK"; | |
| 30 m_dictionaryConversions[L"INVITE_FRIENDS"] = L"MENU_INVITE_FRIENDS"; | |
| 31 m_dictionaryConversions[L"UPGRADE"] = L"MENU_UPGRADE"; | |
| 32 m_dictionaryConversions[L"SETTINGS"] = L"MENU_SETTINGS"; | |
| 33 m_dictionaryConversions[L"ENABLE"] = L"MENU_ENABLE"; | |
| 34 m_dictionaryConversions[L"DISABLE"] = L"MENU_DISABLE"; | |
| 35 m_dictionaryConversions[L"DISABLE_ON"] = L"MENU_DISABLE_ON"; | |
| 36 | |
| 37 m_dictionaryConversions[L"YES"] = L"GENERAL_YES"; | |
| 38 m_dictionaryConversions[L"NO"] = L"GENERAL_NO"; | |
| 39 m_dictionaryConversions[L"CANCEL"] = L"GENERAL_CANCEL"; | |
| 40 | |
| 41 CString lang = CPluginSettings::GetSystemLanguage(); | |
| 42 | |
| 43 bool isExisting = true; | |
| 44 { | |
| 45 CPluginDictionaryLock lock; | |
| 46 if (lock.IsLocked()) | |
| 47 { | |
| 48 std::ifstream is; | |
| 49 is.open(CPluginSettings::GetDataPath(DICTIONARY_INI_FILE), std::ios_base::
in); | |
| 50 if (!is.is_open()) | |
| 51 { | |
| 52 DEBUG_DICTIONARY("Dictionary::Constructor - Exists:no") | |
| 53 isExisting = false; | |
| 54 } | |
| 55 else | |
| 56 { | |
| 57 DEBUG_DICTIONARY("Dictionary::Constructor - Exists:yes") | |
| 58 is.close(); | |
| 59 } | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 if (!isExisting || forceCreate) | |
| 64 { | |
| 65 Create(forceCreate); | |
| 66 } | |
| 67 } | |
| 68 | |
| 69 | |
| 70 CPluginDictionary::~CPluginDictionary() | |
| 71 { | |
| 72 s_criticalSectionDictionary.Lock(); | |
| 73 { | |
| 74 s_instance = NULL; | |
| 75 } | |
| 76 s_criticalSectionDictionary.Unlock(); | |
| 77 } | |
| 78 | |
| 79 | |
| 80 CPluginDictionary* CPluginDictionary::GetInstance(bool forceCreate) | |
| 81 { | |
| 82 CPluginDictionary* instance = NULL; | |
| 83 | |
| 84 s_criticalSectionDictionary.Lock(); | |
| 85 { | |
| 86 if (!s_instance) | |
| 87 { | |
| 88 DEBUG_DICTIONARY("Dictionary::GetInstance - creating") | |
| 89 s_instance = new CPluginDictionary(forceCreate); | |
| 90 } | |
| 91 | |
| 92 instance = s_instance; | |
| 93 } | |
| 94 s_criticalSectionDictionary.Unlock(); | |
| 95 | |
| 96 return instance; | |
| 97 } | |
| 98 | |
| 99 | |
| 100 bool CPluginDictionary::IsLanguageSupported(const CString& lang) | |
| 101 { | |
| 102 bool hasLanguage = false; | |
| 103 | |
| 104 CPluginDictionaryLock lock; | |
| 105 if (lock.IsLocked()) | |
| 106 { | |
| 107 CPluginIniFileW iniFile(CPluginSettings::GetDataPath(DICTIONARY_INI_FILE)); | |
| 108 | |
| 109 iniFile.Read(); | |
| 110 | |
| 111 hasLanguage = iniFile.HasSection(lang); | |
| 112 } | |
| 113 | |
| 114 return hasLanguage; | |
| 115 } | |
| 116 | |
| 117 | |
| 118 void CPluginDictionary::SetLanguage(const CString& lang) | |
| 119 { | |
| 120 DEBUG_GENERAL(L"*** Loading dictionary:" + CPluginSettings::GetDataPath(DICTIO
NARY_INI_FILE)) | |
| 121 | |
| 122 CPluginDictionaryLock lock; | |
| 123 if (lock.IsLocked()) | |
| 124 { | |
| 125 CPluginIniFileW iniFile(CPluginSettings::GetDataPath(DICTIONARY_INI_FILE)); | |
| 126 | |
| 127 if (!iniFile.Read()) | |
| 128 { | |
| 129 DEBUG_ERROR_LOG(iniFile.GetLastError(), PLUGIN_ERROR_DICTIONARY, PLUGIN_ER
ROR_DICTIONARY_READ_FILE, "Dictionary::SetLanguage - Read") | |
| 130 return; | |
| 131 } | |
| 132 | |
| 133 s_criticalSectionDictionary.Lock(); | |
| 134 { | |
| 135 if (iniFile.HasSection(lang)) | |
| 136 { | |
| 137 m_dictionaryLanguage = lang; | |
| 138 | |
| 139 m_dictionary = iniFile.GetSectionData(lang); | |
| 140 | |
| 141 CString dicEl; | |
| 142 dicEl.Format(L"%d", m_dictionary.size()); | |
| 143 | |
| 144 DEBUG_GENERAL(L"*** Using dictionary section [" + lang + "] - " + dicEl
+ L" elements") | |
| 145 } | |
| 146 else | |
| 147 { | |
| 148 m_dictionary = iniFile.GetSectionData(L"en"); | |
| 149 m_dictionaryLanguage = L"en"; | |
| 150 | |
| 151 CString dicEl; | |
| 152 dicEl.Format(L"%d", m_dictionary.size()); | |
| 153 | |
| 154 DEBUG_GENERAL(L"*** Using dictionary section [en] instead of [" + lang +
"] - " + dicEl + L" elements") | |
| 155 } | |
| 156 | |
| 157 // Dictionary conversions | |
| 158 for (std::map<CString,CString>::iterator it = m_dictionaryConversions.begi
n(); it != m_dictionaryConversions.end(); ++it) | |
| 159 { | |
| 160 CPluginIniFileW::TSectionData::iterator itDic = m_dictionary.find(it->fi
rst); | |
| 161 if (itDic != m_dictionary.end()) | |
| 162 { | |
| 163 m_dictionary[it->second] = itDic->second; | |
| 164 } | |
| 165 } | |
| 166 | |
| 167 #ifdef ENABLE_DEBUG_DICTIONARY | |
| 168 for (CPluginIniFileW::TSectionData::iterator it = m_dictionary.begin(); it
!= m_dictionary.end(); ++it) | |
| 169 { | |
| 170 DEBUG_DICTIONARY("- " + it->first + " -> " + it->second) | |
| 171 } | |
| 172 #endif | |
| 173 } | |
| 174 s_criticalSectionDictionary.Unlock(); | |
| 175 } | |
| 176 } | |
| 177 | |
| 178 | |
| 179 CString CPluginDictionary::Lookup(const CString& key) | |
| 180 { | |
| 181 CString value = key; | |
| 182 | |
| 183 s_criticalSectionDictionary.Lock(); | |
| 184 { | |
| 185 CPluginIniFileW::TSectionData::iterator it = m_dictionary.find(key); | |
| 186 if (it != m_dictionary.end()) | |
| 187 { | |
| 188 value = it->second; | |
| 189 } | |
| 190 #ifdef DEBUG_ERROR_LOG | |
| 191 else | |
| 192 { | |
| 193 DWORD dwErrorCode = 0; | |
| 194 | |
| 195 dwErrorCode |= m_dictionaryLanguage.GetAt(0) << 24; | |
| 196 dwErrorCode |= m_dictionaryLanguage.GetAt(1) << 16; | |
| 197 dwErrorCode |= key.GetAt(0) << 8; | |
| 198 dwErrorCode |= key.GetAt(1); | |
| 199 | |
| 200 DEBUG_ERROR_LOG(dwErrorCode, PLUGIN_ERROR_DICTIONARY, PLUGIN_ERROR_DICTION
ARY_LOOKUP, L"Dictionary::Lookup - " + key) | |
| 201 } | |
| 202 #endif | |
| 203 } | |
| 204 s_criticalSectionDictionary.Unlock(); | |
| 205 | |
| 206 DEBUG_DICTIONARY("Dictionary::Lookup key:" + key + " value:" + value) | |
| 207 | |
| 208 return value; | |
| 209 } | |
| 210 | |
| 211 | |
| 212 void CPluginDictionary::Create(bool forceCreate) | |
| 213 { | |
| 214 DEBUG_GENERAL(L"*** Creating dictionary:" + CPluginSettings::GetDataPath(DICTI
ONARY_INI_FILE)) | |
| 215 | |
| 216 CPluginDictionaryLock lock; | |
| 217 if (lock.IsLocked()) | |
| 218 { | |
| 219 CPluginIniFileW iniFile(CPluginSettings::GetDataPath(DICTIONARY_INI_FILE)); | |
| 220 | |
| 221 CPluginSettings* settings = CPluginSettings::GetInstance(); | |
| 222 | |
| 223 if (forceCreate) | |
| 224 { | |
| 225 } | |
| 226 else if (iniFile.Exists() || !settings->IsMainProcess()) | |
| 227 { | |
| 228 return; | |
| 229 } | |
| 230 | |
| 231 int dictionaryVersion = 1; | |
| 232 | |
| 233 s_criticalSectionDictionary.Lock(); | |
| 234 { | |
| 235 m_dictionary.clear(); | |
| 236 | |
| 237 #if (defined PRODUCT_ADBLOCKPLUS) | |
| 238 | |
| 239 // Popup menu | |
| 240 m_dictionary["MENU_UPDATE"] = "Update Adblock Plus to newest version"; | |
| 241 m_dictionary["MENU_ABOUT"] = "About Adblock Plus"; | |
| 242 m_dictionary["MENU_ACTIVATE"] = "Activate Adblock Plus"; | |
| 243 m_dictionary["MENU_FAQ"] = "Frequently Asked Questions"; | |
| 244 m_dictionary["MENU_FEEDBACK"] = "Feedback"; | |
| 245 m_dictionary["MENU_INVITE_FRIENDS"] = "Invite friends"; | |
| 246 m_dictionary["MENU_SETTINGS"] = "Settings"; | |
| 247 m_dictionary["MENU_ENABLE"] = "Enable Adblock Plus"; | |
| 248 m_dictionary["MENU_DISABLE"] = "Disable Adblock Plus"; | |
| 249 m_dictionary["MENU_DISABLE_ON"] = "Disable Adblock Plus on..."; | |
| 250 | |
| 251 // Update dialog | |
| 252 m_dictionary["UPDATE_TITLE"] = "Update Adblock Plus"; | |
| 253 m_dictionary["UPDATE_NEW_VERSION_EXISTS"] = "A new version of Adblock Plus
is available"; | |
| 254 m_dictionary["UPDATE_DO_YOU_WISH_TO_DOWNLOAD"] = "Do you wish to download
it now?"; | |
| 255 | |
| 256 // Download update dialog | |
| 257 m_dictionary["DOWNLOAD_UPDATE_TITLE"] = "Download Adblock Plus"; | |
| 258 m_dictionary["DOWNLOAD_UPDATE_BUTTON"] = "Update"; | |
| 259 m_dictionary["DOWNLOAD_PLEASE_WAIT"] = "Please wait..."; | |
| 260 m_dictionary["DOWNLOAD_UPDATE_ERROR_TEXT"] = "Error downloading installer"
; | |
| 261 m_dictionary["DOWNLOAD_UPDATE_SUCCESS_TEXT"] = "If you choose to update Ad
block Plus, your Internet Explorer will close before installation"; | |
| 262 | |
| 263 // Various dialogs | |
| 264 m_dictionary["ERROR_STATUS_BAR_DISABLED"] = "The plugin menu is located in
the statusbar, would you like to enable Internet Explorer's statusbar?"; | |
| 265 m_dictionary["ERROR_STATUS_BAR_DISABLED_TITLE"] = "Enable status bar?"; | |
| 266 m_dictionary["ERROR_CAN_NOT_ENABLE_STATUS_BAR"] = "The plugin menu is loca
ted in the statusbar. Please enable it under View->Toolbars->Status bar"; | |
| 267 m_dictionary["ERROR_CAN_NOT_ENABLE_STATUS_BAR_TITLE"] = "Please enable sta
tus bar"; | |
| 268 | |
| 269 #endif | |
| 270 // General texts | |
| 271 m_dictionary["GENERAL_YES"] = "Yes"; | |
| 272 m_dictionary["GENERAL_NO"] = "No"; | |
| 273 m_dictionary["GENERAL_CANCEL"] = "Cancel"; | |
| 274 m_dictionary["GENERAL_CLOSE"] = "Close"; | |
| 275 | |
| 276 iniFile.UpdateSection("en", m_dictionary); | |
| 277 } | |
| 278 s_criticalSectionDictionary.Unlock(); | |
| 279 | |
| 280 if (iniFile.Write()) | |
| 281 { | |
| 282 CPluginSettings* settings = CPluginSettings::GetInstance(); | |
| 283 | |
| 284 settings->SetValue(SETTING_DICTIONARY_VERSION, dictionaryVersion); | |
| 285 settings->Write(); | |
| 286 } | |
| 287 else | |
| 288 { | |
| 289 DEBUG_ERROR_LOG(iniFile.GetLastError(), PLUGIN_ERROR_DICTIONARY, PLUGIN_ER
ROR_DICTIONARY_CREATE_FILE, L"Dictionary::Create - Write") | |
| 290 } | |
| 291 #ifdef PRODUCT_ADBLOCKPLUS | |
| 292 // Delete old | |
| 293 ::DeleteFile(CPluginSettings::GetDataPath(L"dictionary.ini")); | |
| 294 #endif | |
| 295 } | |
| 296 } | |
| OLD | NEW |