2 #include "../common/dirs.h"
6 // Write out the database to file.
10 if (NeedsWrite == TRUE){
16 ProcessLock->unlock();
20 void ETagDB::SetupDB(wxString AccountDirInc){
22 AccountDir = AccountDirInc;
24 //ProcessLock = ProcessLockInc;
28 void ETagDB::AddETag(wxString Filename, wxString ETag, wxString ETagOriginal){
30 // Lock or wait if it is already locked.
34 // Process the ETag addition.
36 FilenameETag.insert(std::make_pair(Filename, ETag));
37 FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal));
43 ProcessLock->unlock();
47 void ETagDB::RemoveETag(wxString Filename){
49 // Lock or wait if it is already locked.
57 FilenameETag.erase(Filename);
58 FilenameETagOriginal.erase(Filename);
64 ProcessLock->unlock();
68 void ETagDB::UpdateETag(wxString Filename, wxString ETag){
70 // Lock or wait if it is already locked.
76 FilenameETag.erase(Filename);
77 FilenameETag.insert(std::make_pair(Filename, ETag));
83 ProcessLock->unlock();
87 void ETagDB::UpdateETag(wxString Filename, wxString ETag, wxString ETagOriginal){
89 // Lock or wait if it is already locked.
95 FilenameETag.erase(Filename);
96 FilenameETagOriginal.erase(Filename);
97 FilenameETag.insert(std::make_pair(Filename, ETag));
98 FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal));
100 std::map<wxString,wxString>::iterator IterWxS;
101 IterWxS = FilenameETagOriginal.find(Filename);
106 ProcessLock->unlock();
110 std::map<wxString,wxString>* ETagDB::GetFilenamePointer(){
112 return &FilenameETag;
116 wxString ETagDB::GetETag(wxString Filename){
118 // Lock or wait if it is already locked.
121 std::map<wxString,wxString>::iterator IterwxS;
127 //IterwxS = FilenameETag.find(Filename);
129 if (FilenameETag.find(Filename) != FilenameETag.end()){
131 IterwxS = FilenameETag.find(Filename);
133 ETagOut = IterwxS->second;
139 ProcessLock->unlock();
145 wxString ETagDB::GetETagOriginal(wxString Filename){
147 // Lock or wait if it is already locked.
149 wxString ETagOrigOut;
150 std::map<wxString,wxString>::iterator IterwxS;
156 //IterwxS = FilenameETag.find(Filename);
158 if (FilenameETagOriginal.find(Filename) != FilenameETagOriginal.end()){
160 IterwxS = FilenameETagOriginal.find(Filename);
162 ETagOrigOut = IterwxS->second;
168 ProcessLock->unlock();
174 bool ETagDB::WriteETagDB(){
176 // Lock or wait if it is already locked.
180 // Write the ETag database.
182 wxString AccountETagDB;
183 std::map<wxString,wxString>::iterator IterwxS;
188 #if defined(__HAIKU__)
190 //preffilename = wxT("noo");
192 #elif defined(__WIN32__)
194 AccountETagDB.Clear();
195 AccountETagDB = GetAccountDir(AccountDir, FALSE);
196 AccountETagDB.Append(wxT("\\etag.db"));
200 AccountETagDB.Clear();
201 AccountETagDB = GetAccountDir(AccountDir, FALSE);
202 AccountETagDB.Append(wxT("/etag.db"));
206 wxTextFile ETagDBFile;
207 wxString SettingLine;
209 if (wxFileExists(AccountETagDB) == FALSE){
211 if (ETagDBFile.Create(AccountETagDB) == FALSE){
212 ////ProcessLock.unlock();
218 if (ETagDBFile.Open(AccountETagDB) == FALSE){
219 ////ProcessLock.unlock();
227 for (std::map<wxString,wxString>::iterator iter = FilenameETag.begin();
228 iter != FilenameETag.end(); ++iter){
230 // Get Original ETag as well.
232 IterwxS = FilenameETagOriginal.find(iter->first);
234 if (iter->first.IsEmpty()){
238 SettingLine = iter->first + wxT("|") + iter->second + wxT("|") + IterwxS->second;
240 ETagDBFile.InsertLine(SettingLine, LineSeek);
252 ProcessLock->unlock();
258 bool ETagDB::LoadETagDB(){
260 // Lock or wait if it is already locked.
264 // Load the ETag database.
266 wxString AccountETagDB;
267 wxString AccountDirPath;
269 #if defined(__HAIKU__)
271 //preffilename = wxT("noo");
273 #elif defined(__WIN32__)
275 AccountDirPath = GetAccountDir(AccountDir, FALSE);
277 AccountETagDB = AccountDirPath;
278 AccountETagDB.Append(wxT("\\etag.db"));
282 AccountDirPath = GetAccountDir(AccountDir, bool FALSE);
284 AccountETagDB = AccountDirPath;
285 AccountETagDB.Append(wxT("/etag.db"));
289 wxTextFile ETagDBFile;
291 if (wxFileExists(AccountETagDB) == FALSE){
293 if (ETagDBFile.Create(AccountETagDB) == FALSE){
294 ////ProcessLock.unlock();
295 //ProcessLock->unlock();
301 if (ETagDBFile.Open(AccountETagDB, wxConvUTF8) == FALSE){
302 ////ProcessLock.unlock();
303 //ProcessLock->unlock();
309 wxString wxSFilename;
311 wxString ETagContactFilename;
313 for (wxStringTokenizer ETagDBLine(ETagDBFile.GetFirstLine(), wxT("|"));
314 !ETagDBFile.Eof(); ETagDBLine.SetString(ETagDBFile.GetNextLine(), wxT("|"), wxTOKEN_DEFAULT) )
317 // Split the file into three.
319 wxSFilename = ETagDBLine.GetNextToken();
323 wxSValue = ETagDBLine.GetNextToken();
324 FilenameETag.insert(std::make_pair(wxSFilename, wxSValue));
326 // Get the original ETag.
328 wxSValue = ETagDBLine.GetNextToken();
330 FilenameETagOriginal.insert(std::make_pair(wxSFilename, wxSValue));
336 ProcessLock->unlock();
342 void ETagDB::DeleteETagDB(){
344 // Lock or wait if it is already locked.
348 wxString AccountETagDB;
350 // Delete the ETagDB.
352 #if defined(__HAIKU__)
354 //preffilename = wxT("noo");
356 #elif defined(__WIN32__)
358 AccountETagDB.Clear();
359 AccountETagDB = GetAccountDir(AccountDir, FALSE);
360 AccountETagDB.Append(wxT("\\etag.db"));
362 wxRemoveFile(AccountETagDB);
366 AccountETagDB.Clear();
367 AccountETagDB = GetAccountDir(AccountDir, FALSE);
368 AccountETagDB.Append(wxT("/etag.db"));
370 wxRemoveFile(AccountETagDB);
376 ProcessLock->unlock();
380 bool ETagDB::CheckETagExists(wxString Filename){
382 if (FilenameETag.find(Filename) == FilenameETag.end()){
394 std::map<wxString,ETagData> ETagDB::GetETagData(){
396 // Lock the database.
400 // Go through each of the ETags and process them accordingly.
402 std::map<wxString,ETagData> DataSet;
404 for (std::map<wxString,wxString>::iterator iter = FilenameETag.begin();
405 iter != FilenameETag.end(); ++iter){
407 std::map<wxString,wxString>::iterator origiter = FilenameETagOriginal.find(iter->first);
411 etd.ETagValue = iter->second;
412 etd.ETagOrigValue = origiter->second;
414 DataSet.insert(std::make_pair(iter->first, etd));
418 // Unlock the database.
420 ProcessLock->unlock();
426 bool ETagDB::GetWriteStatus(){