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 |