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();
135 std::map<wxString,wxString>* ETagDB::GetFilenamePointer(){
137 return &FilenameETag;
141 wxString ETagDB::GetETag(wxString Filename){
143 // Lock or wait if it is already locked.
146 std::map<wxString,wxString>::iterator IterwxS;
152 //IterwxS = FilenameETag.find(Filename);
154 if (FilenameETag.find(Filename) != FilenameETag.end()){
156 IterwxS = FilenameETag.find(Filename);
158 ETagOut = IterwxS->second;
164 ProcessLock->unlock();
170 wxString ETagDB::GetETagOriginal(wxString Filename){
172 // Lock or wait if it is already locked.
174 wxString ETagOrigOut;
175 std::map<wxString,wxString>::iterator IterwxS;
181 //IterwxS = FilenameETag.find(Filename);
183 if (FilenameETagOriginal.find(Filename) != FilenameETagOriginal.end()){
185 IterwxS = FilenameETagOriginal.find(Filename);
187 ETagOrigOut = IterwxS->second;
193 ProcessLock->unlock();
199 bool ETagDB::WriteETagDB(){
201 // Lock or wait if it is already locked.
205 // Write the ETag database.
207 wxString AccountETagDB;
208 std::map<wxString,wxString>::iterator IterwxS;
213 #if defined(__HAIKU__)
215 //preffilename = wxT("noo");
217 #elif defined(__WIN32__)
219 AccountETagDB.Clear();
220 AccountETagDB = GetAccountDir(AccountDir, FALSE);
221 AccountETagDB.Append(wxT("\\etag.db"));
225 // This entry applies to OSX as well.
227 AccountETagDB.Clear();
228 AccountETagDB = GetAccountDir(AccountDir, FALSE);
229 AccountETagDB.Append(wxT("/etag.db"));
233 wxTextFile ETagDBFile;
234 wxString SettingLine;
236 if (wxFileExists(AccountETagDB) == FALSE){
238 if (ETagDBFile.Create(AccountETagDB) == FALSE){
239 ////ProcessLock.unlock();
245 if (ETagDBFile.Open(AccountETagDB) == FALSE){
246 ////ProcessLock.unlock();
254 for (std::map<wxString,wxString>::iterator iter = FilenameETag.begin();
255 iter != FilenameETag.end(); ++iter){
257 // Get Original ETag as well.
259 IterwxS = FilenameETagOriginal.find(iter->first);
261 if (iter->first.IsEmpty()){
265 SettingLine = iter->first + wxT("|") + iter->second + wxT("|") + IterwxS->second;
267 ETagDBFile.InsertLine(SettingLine, LineSeek);
279 ProcessLock->unlock();
285 bool ETagDB::LoadETagDB(){
287 // Lock or wait if it is already locked.
291 // Load the ETag database.
293 wxString AccountETagDB;
294 wxString AccountDirPath;
296 #if defined(__HAIKU__)
298 //preffilename = wxT("noo");
300 #elif defined(__WIN32__)
302 AccountDirPath = GetAccountDir(AccountDir, FALSE);
304 AccountETagDB = AccountDirPath;
305 AccountETagDB.Append(wxT("\\etag.db"));
309 AccountDirPath = GetAccountDir(AccountDir, FALSE);
311 AccountETagDB = AccountDirPath;
312 AccountETagDB.Append(wxT("/etag.db"));
316 wxTextFile ETagDBFile;
318 if (wxFileExists(AccountETagDB) == FALSE){
320 if (ETagDBFile.Create(AccountETagDB) == FALSE){
321 ////ProcessLock.unlock();
322 //ProcessLock->unlock();
328 if (ETagDBFile.Open(AccountETagDB, wxConvUTF8) == FALSE){
329 ////ProcessLock.unlock();
330 //ProcessLock->unlock();
336 wxString wxSFilename;
338 wxString ETagContactFilename;
340 for (wxStringTokenizer ETagDBLine(ETagDBFile.GetFirstLine(), wxT("|"));
341 !ETagDBFile.Eof(); ETagDBLine.SetString(ETagDBFile.GetNextLine(), wxT("|"), wxTOKEN_DEFAULT) )
344 // Split the file into three.
346 wxSFilename = ETagDBLine.GetNextToken();
350 wxSValue = ETagDBLine.GetNextToken();
351 FilenameETag.insert(std::make_pair(wxSFilename, wxSValue));
353 // Get the original ETag.
355 wxSValue = ETagDBLine.GetNextToken();
357 FilenameETagOriginal.insert(std::make_pair(wxSFilename, wxSValue));
363 ProcessLock->unlock();
369 void ETagDB::DeleteETagDB(){
371 // Lock or wait if it is already locked.
375 wxString AccountETagDB;
377 // Delete the ETagDB.
379 #if defined(__HAIKU__)
381 //preffilename = wxT("noo");
383 #elif defined(__WIN32__)
385 AccountETagDB.Clear();
386 AccountETagDB = GetAccountDir(AccountDir, FALSE);
387 AccountETagDB.Append(wxT("\\etag.db"));
389 wxRemoveFile(AccountETagDB);
393 AccountETagDB.Clear();
394 AccountETagDB = GetAccountDir(AccountDir, FALSE);
395 AccountETagDB.Append(wxT("/etag.db"));
397 wxRemoveFile(AccountETagDB);
403 ProcessLock->unlock();
407 bool ETagDB::CheckETagExists(wxString Filename){
409 if (FilenameETag.find(Filename) == FilenameETag.end()){
421 std::map<wxString,ETagData> ETagDB::GetETagData(){
423 // Lock the database.
427 // Go through each of the ETags and process them accordingly.
429 std::map<wxString,ETagData> DataSet;
431 for (std::map<wxString,wxString>::iterator iter = FilenameETag.begin();
432 iter != FilenameETag.end(); ++iter){
434 std::map<wxString,wxString>::iterator origiter = FilenameETagOriginal.find(iter->first);
438 etd.ETagValue = iter->second;
439 etd.ETagOrigValue = origiter->second;
441 DataSet.insert(std::make_pair(iter->first, etd));
445 // Unlock the database.
447 ProcessLock->unlock();
453 bool ETagDB::GetWriteStatus(){