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 bool ETagDB::ETagExists(wxString Filename){
111 // Lock or wait if it is already locked.
115 bool FileResult = FALSE;
117 if (FilenameETag.find(Filename) != FilenameETag.end()){
129 ProcessLock->unlock();
133 std::map<wxString,wxString>* ETagDB::GetFilenamePointer(){
135 return &FilenameETag;
139 wxString ETagDB::GetETag(wxString Filename){
141 // Lock or wait if it is already locked.
144 std::map<wxString,wxString>::iterator IterwxS;
150 //IterwxS = FilenameETag.find(Filename);
152 if (FilenameETag.find(Filename) != FilenameETag.end()){
154 IterwxS = FilenameETag.find(Filename);
156 ETagOut = IterwxS->second;
162 ProcessLock->unlock();
168 wxString ETagDB::GetETagOriginal(wxString Filename){
170 // Lock or wait if it is already locked.
172 wxString ETagOrigOut;
173 std::map<wxString,wxString>::iterator IterwxS;
179 //IterwxS = FilenameETag.find(Filename);
181 if (FilenameETagOriginal.find(Filename) != FilenameETagOriginal.end()){
183 IterwxS = FilenameETagOriginal.find(Filename);
185 ETagOrigOut = IterwxS->second;
191 ProcessLock->unlock();
197 bool ETagDB::WriteETagDB(){
199 // Lock or wait if it is already locked.
203 // Write the ETag database.
205 wxString AccountETagDB;
206 std::map<wxString,wxString>::iterator IterwxS;
211 #if defined(__HAIKU__)
213 //preffilename = wxT("noo");
215 #elif defined(__WIN32__)
217 AccountETagDB.Clear();
218 AccountETagDB = GetAccountDir(AccountDir, FALSE);
219 AccountETagDB.Append(wxT("\\etag.db"));
223 // This entry applies to OSX as well.
225 AccountETagDB.Clear();
226 AccountETagDB = GetAccountDir(AccountDir, FALSE);
227 AccountETagDB.Append(wxT("/etag.db"));
231 wxTextFile ETagDBFile;
232 wxString SettingLine;
234 if (wxFileExists(AccountETagDB) == FALSE){
236 if (ETagDBFile.Create(AccountETagDB) == FALSE){
237 ////ProcessLock.unlock();
243 if (ETagDBFile.Open(AccountETagDB) == FALSE){
244 ////ProcessLock.unlock();
252 for (std::map<wxString,wxString>::iterator iter = FilenameETag.begin();
253 iter != FilenameETag.end(); ++iter){
255 // Get Original ETag as well.
257 IterwxS = FilenameETagOriginal.find(iter->first);
259 if (iter->first.IsEmpty()){
263 SettingLine = iter->first + wxT("|") + iter->second + wxT("|") + IterwxS->second;
265 ETagDBFile.InsertLine(SettingLine, LineSeek);
277 ProcessLock->unlock();
283 bool ETagDB::LoadETagDB(){
285 // Lock or wait if it is already locked.
289 // Load the ETag database.
291 wxString AccountETagDB;
292 wxString AccountDirPath;
294 #if defined(__HAIKU__)
296 //preffilename = wxT("noo");
298 #elif defined(__WIN32__)
300 AccountDirPath = GetAccountDir(AccountDir, FALSE);
302 AccountETagDB = AccountDirPath;
303 AccountETagDB.Append(wxT("\\etag.db"));
307 AccountDirPath = GetAccountDir(AccountDir, FALSE);
309 AccountETagDB = AccountDirPath;
310 AccountETagDB.Append(wxT("/etag.db"));
314 wxTextFile ETagDBFile;
316 if (wxFileExists(AccountETagDB) == FALSE){
318 if (ETagDBFile.Create(AccountETagDB) == FALSE){
319 ////ProcessLock.unlock();
320 //ProcessLock->unlock();
326 if (ETagDBFile.Open(AccountETagDB, wxConvUTF8) == FALSE){
327 ////ProcessLock.unlock();
328 //ProcessLock->unlock();
334 wxString wxSFilename;
336 wxString ETagContactFilename;
338 for (wxStringTokenizer ETagDBLine(ETagDBFile.GetFirstLine(), wxT("|"));
339 !ETagDBFile.Eof(); ETagDBLine.SetString(ETagDBFile.GetNextLine(), wxT("|"), wxTOKEN_DEFAULT) )
342 // Split the file into three.
344 wxSFilename = ETagDBLine.GetNextToken();
348 wxSValue = ETagDBLine.GetNextToken();
349 FilenameETag.insert(std::make_pair(wxSFilename, wxSValue));
351 // Get the original ETag.
353 wxSValue = ETagDBLine.GetNextToken();
355 FilenameETagOriginal.insert(std::make_pair(wxSFilename, wxSValue));
361 ProcessLock->unlock();
367 void ETagDB::DeleteETagDB(){
369 // Lock or wait if it is already locked.
373 wxString AccountETagDB;
375 // Delete the ETagDB.
377 #if defined(__HAIKU__)
379 //preffilename = wxT("noo");
381 #elif defined(__WIN32__)
383 AccountETagDB.Clear();
384 AccountETagDB = GetAccountDir(AccountDir, FALSE);
385 AccountETagDB.Append(wxT("\\etag.db"));
387 wxRemoveFile(AccountETagDB);
391 AccountETagDB.Clear();
392 AccountETagDB = GetAccountDir(AccountDir, FALSE);
393 AccountETagDB.Append(wxT("/etag.db"));
395 wxRemoveFile(AccountETagDB);
401 ProcessLock->unlock();
405 bool ETagDB::CheckETagExists(wxString Filename){
407 if (FilenameETag.find(Filename) == FilenameETag.end()){
419 std::map<wxString,ETagData> ETagDB::GetETagData(){
421 // Lock the database.
425 // Go through each of the ETags and process them accordingly.
427 std::map<wxString,ETagData> DataSet;
429 for (std::map<wxString,wxString>::iterator iter = FilenameETag.begin();
430 iter != FilenameETag.end(); ++iter){
432 std::map<wxString,wxString>::iterator origiter = FilenameETagOriginal.find(iter->first);
436 etd.ETagValue = iter->second;
437 etd.ETagOrigValue = origiter->second;
439 DataSet.insert(std::make_pair(iter->first, etd));
443 // Unlock the database.
445 ProcessLock->unlock();
451 bool ETagDB::GetWriteStatus(){