2 #include "../common/dirs.h"
6 // Write out the database to file.
8 ProcessLock->try_lock();
10 if (NeedsWrite == TRUE){
16 ProcessLock->unlock();
20 void ETagDB::SetupDB(wxString AccountDirInc){
22 AccountDir = AccountDirInc;
27 void ETagDB::AddETag(wxString Filename, wxString ETag, wxString ETagOriginal){
29 // Lock or wait if it is already locked.
33 // Process the ETag addition.
35 FilenameETag.insert(std::make_pair(Filename, ETag));
36 FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal));
42 ProcessLock->unlock();
46 void ETagDB::RemoveETag(wxString Filename){
48 // Lock or wait if it is already locked.
56 FilenameETag.erase(Filename);
57 FilenameETagOriginal.erase(Filename);
63 ProcessLock->unlock();
67 void ETagDB::UpdateETag(wxString Filename, wxString ETag){
69 // Lock or wait if it is already locked.
75 FilenameETag.erase(Filename);
76 FilenameETag.insert(std::make_pair(Filename, ETag));
82 ProcessLock->unlock();
86 void ETagDB::UpdateETag(wxString Filename, wxString ETag, wxString ETagOriginal){
88 // Lock or wait if it is already locked.
94 FilenameETag.erase(Filename);
95 FilenameETagOriginal.erase(Filename);
96 FilenameETag.insert(std::make_pair(Filename, ETag));
97 FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal));
99 std::map<wxString,wxString>::iterator IterWxS;
100 IterWxS = FilenameETagOriginal.find(Filename);
105 ProcessLock->unlock();
109 std::map<wxString,wxString>* ETagDB::GetFilenamePointer(){
111 return &FilenameETag;
115 wxString ETagDB::GetETag(wxString Filename){
117 // Lock or wait if it is already locked.
120 std::map<wxString,wxString>::iterator IterwxS;
126 //IterwxS = FilenameETag.find(Filename);
128 if (FilenameETag.find(Filename) != FilenameETag.end()){
130 IterwxS = FilenameETag.find(Filename);
132 ETagOut = IterwxS->second;
138 ProcessLock->unlock();
144 wxString ETagDB::GetETagOriginal(wxString Filename){
146 // Lock or wait if it is already locked.
148 wxString ETagOrigOut;
149 std::map<wxString,wxString>::iterator IterwxS;
155 //IterwxS = FilenameETag.find(Filename);
157 if (FilenameETagOriginal.find(Filename) != FilenameETagOriginal.end()){
159 IterwxS = FilenameETagOriginal.find(Filename);
161 ETagOrigOut = IterwxS->second;
167 ProcessLock->unlock();
173 bool ETagDB::WriteETagDB(){
175 // Lock or wait if it is already locked.
179 // Write the ETag database.
181 wxString AccountETagDB;
182 std::map<wxString,wxString>::iterator IterwxS;
187 #if defined(__HAIKU__)
189 //preffilename = wxT("noo");
191 #elif defined(__WIN32__)
193 AccountETagDB.Clear();
194 AccountETagDB = GetAccountDir(AccountDir, FALSE);
195 AccountETagDB.Append(wxT("\\etag.db"));
199 // This entry applies to OSX as well.
201 AccountETagDB.Clear();
202 AccountETagDB = GetAccountDir(AccountDir, FALSE);
203 AccountETagDB.Append(wxT("/etag.db"));
207 wxTextFile ETagDBFile;
208 wxString SettingLine;
210 if (wxFileExists(AccountETagDB) == FALSE){
212 if (ETagDBFile.Create(AccountETagDB) == FALSE){
213 ////ProcessLock.unlock();
219 if (ETagDBFile.Open(AccountETagDB) == FALSE){
220 ////ProcessLock.unlock();
228 for (std::map<wxString,wxString>::iterator iter = FilenameETag.begin();
229 iter != FilenameETag.end(); ++iter){
231 // Get Original ETag as well.
233 IterwxS = FilenameETagOriginal.find(iter->first);
235 if (iter->first.IsEmpty()){
239 SettingLine = iter->first + wxT("|") + iter->second + wxT("|") + IterwxS->second;
241 ETagDBFile.InsertLine(SettingLine, LineSeek);
253 ProcessLock->unlock();
259 bool ETagDB::LoadETagDB(){
261 // Lock or wait if it is already locked.
265 // Load the ETag database.
267 wxString AccountETagDB;
268 wxString AccountDirPath;
270 #if defined(__HAIKU__)
272 //preffilename = wxT("noo");
274 #elif defined(__WIN32__)
276 AccountDirPath = GetAccountDir(AccountDir, FALSE);
278 AccountETagDB = AccountDirPath;
279 AccountETagDB.Append(wxT("\\etag.db"));
283 AccountDirPath = GetAccountDir(AccountDir, FALSE);
285 AccountETagDB = AccountDirPath;
286 AccountETagDB.Append(wxT("/etag.db"));
290 wxTextFile ETagDBFile;
292 if (wxFileExists(AccountETagDB) == FALSE){
294 if (ETagDBFile.Create(AccountETagDB) == FALSE){
295 ////ProcessLock.unlock();
296 //ProcessLock->unlock();
302 if (ETagDBFile.Open(AccountETagDB, wxConvUTF8) == FALSE){
303 ////ProcessLock.unlock();
304 //ProcessLock->unlock();
310 wxString wxSFilename;
312 wxString ETagContactFilename;
314 for (wxStringTokenizer ETagDBLine(ETagDBFile.GetFirstLine(), wxT("|"));
315 !ETagDBFile.Eof(); ETagDBLine.SetString(ETagDBFile.GetNextLine(), wxT("|"), wxTOKEN_DEFAULT) )
318 // Split the file into three.
320 wxSFilename = ETagDBLine.GetNextToken();
324 wxSValue = ETagDBLine.GetNextToken();
325 FilenameETag.insert(std::make_pair(wxSFilename, wxSValue));
327 // Get the original ETag.
329 wxSValue = ETagDBLine.GetNextToken();
331 FilenameETagOriginal.insert(std::make_pair(wxSFilename, wxSValue));
337 ProcessLock->unlock();
343 void ETagDB::DeleteETagDB(){
345 // Lock or wait if it is already locked.
349 wxString AccountETagDB;
351 // Delete the ETagDB.
353 #if defined(__HAIKU__)
355 //preffilename = wxT("noo");
357 #elif defined(__WIN32__)
359 AccountETagDB.Clear();
360 AccountETagDB = GetAccountDir(AccountDir, FALSE);
361 AccountETagDB.Append(wxT("\\etag.db"));
363 wxRemoveFile(AccountETagDB);
367 AccountETagDB.Clear();
368 AccountETagDB = GetAccountDir(AccountDir, FALSE);
369 AccountETagDB.Append(wxT("/etag.db"));
371 wxRemoveFile(AccountETagDB);
377 ProcessLock->unlock();
381 bool ETagDB::CheckETagExists(wxString Filename){
383 if (FilenameETag.find(Filename) == FilenameETag.end()){
395 std::map<wxString,ETagData> ETagDB::GetETagData(){
397 // Lock the database.
401 // Go through each of the ETags and process them accordingly.
403 std::map<wxString,ETagData> DataSet;
405 for (std::map<wxString,wxString>::iterator iter = FilenameETag.begin();
406 iter != FilenameETag.end(); ++iter){
408 std::map<wxString,wxString>::iterator origiter = FilenameETagOriginal.find(iter->first);
412 etd.ETagValue = iter->second;
413 etd.ETagOrigValue = origiter->second;
415 DataSet.insert(std::make_pair(iter->first, etd));
419 // Unlock the database.
421 ProcessLock->unlock();
427 bool ETagDB::GetWriteStatus(){