X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fcommon%2Fetag.cpp;h=e22a40a32e01d3f12a73711cd723a776f2703801;hb=a23e50effb7909d2217c6364b31f258bb9c55ff2;hp=12777b056fcfc3fabafbdb171009f2928010207a;hpb=45729fca56479bd9158486e0cda0c4a94b4dd1dc;p=xestiaab%2F.git
diff --git a/source/common/etag.cpp b/source/common/etag.cpp
index 12777b0..e22a40a 100644
--- a/source/common/etag.cpp
+++ b/source/common/etag.cpp
@@ -1,430 +1,475 @@
-#include "etag.h"
+// etag.cpp - ETag subroutines.
+//
+// (c) 2012-2015 Xestia Software Development.
+//
+// This file is part of Xestia Address Book.
+//
+// Xestia Address Book is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by the
+// Free Software Foundation, version 3 of the license.
+//
+// Xestia Address Book is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with Xestia Address Book. If not, see
+
+#include "etag.h"
#include "../common/dirs.h"
ETagDB::~ETagDB(){
-
- // Write out the database to file.
-
- ProcessLock->lock();
-
- if (NeedsWrite == TRUE){
-
- WriteETagDB();
-
- }
-
- ProcessLock->unlock();
-
+
+ // Write out the database to file.
+
+ ProcessLock->try_lock();
+
+ if (NeedsWrite == TRUE){
+
+ WriteETagDB();
+
+ }
+
+ ProcessLock->unlock();
+
}
void ETagDB::SetupDB(wxString AccountDirInc){
-
- AccountDir = AccountDirInc;
- LoadETagDB();
- //ProcessLock = ProcessLockInc;
-
+
+ AccountDir = AccountDirInc;
+ LoadETagDB();
+
}
void ETagDB::AddETag(wxString Filename, wxString ETag, wxString ETagOriginal){
-
- // Lock or wait if it is already locked.
-
- ProcessLock->lock();
-
- // Process the ETag addition.
-
- FilenameETag.insert(std::make_pair(Filename, ETag));
- FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal));
-
- NeedsWrite = TRUE;
-
- // Unlock.
-
- ProcessLock->unlock();
-
+
+ // Lock or wait if it is already locked.
+
+ ProcessLock->lock();
+
+ // Process the ETag addition.
+
+ FilenameETag.insert(std::make_pair(Filename, ETag));
+ FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal));
+
+ NeedsWrite = TRUE;
+
+ // Unlock.
+
+ ProcessLock->unlock();
+
}
void ETagDB::RemoveETag(wxString Filename){
-
- // Lock or wait if it is already locked.
-
- ProcessLock->lock();
-
- // Remove the ETag.
-
- Filename.Trim();
-
- FilenameETag.erase(Filename);
- FilenameETagOriginal.erase(Filename);
-
- NeedsWrite = TRUE;
-
- // Unlock.
-
- ProcessLock->unlock();
-
+
+ // Lock or wait if it is already locked.
+
+ ProcessLock->lock();
+
+ // Remove the ETag.
+
+ Filename.Trim();
+
+ FilenameETag.erase(Filename);
+ FilenameETagOriginal.erase(Filename);
+
+ NeedsWrite = TRUE;
+
+ // Unlock.
+
+ ProcessLock->unlock();
+
}
void ETagDB::UpdateETag(wxString Filename, wxString ETag){
-
- // Lock or wait if it is already locked.
-
- ProcessLock->lock();
-
- // Update the ETag.
-
- FilenameETag.erase(Filename);
- FilenameETag.insert(std::make_pair(Filename, ETag));
-
- NeedsWrite = TRUE;
-
- // Unlock.
-
- ProcessLock->unlock();
-
+
+ // Lock or wait if it is already locked.
+
+ ProcessLock->lock();
+
+ // Update the ETag.
+
+ FilenameETag.erase(Filename);
+ FilenameETag.insert(std::make_pair(Filename, ETag));
+
+ NeedsWrite = TRUE;
+
+ // Unlock.
+
+ ProcessLock->unlock();
+
}
void ETagDB::UpdateETag(wxString Filename, wxString ETag, wxString ETagOriginal){
+
+ // Lock or wait if it is already locked.
+
+ ProcessLock->lock();
+
+ // Update the ETag.
+
+ FilenameETag.erase(Filename);
+ FilenameETagOriginal.erase(Filename);
+ FilenameETag.insert(std::make_pair(Filename, ETag));
+ FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal));
+
+ std::map::iterator IterWxS;
+ IterWxS = FilenameETagOriginal.find(Filename);
+ NeedsWrite = TRUE;
+
+ // Unlock.
+
+ ProcessLock->unlock();
+
+}
- // Lock or wait if it is already locked.
-
- ProcessLock->lock();
-
- // Update the ETag.
+bool ETagDB::ETagExists(wxString Filename){
- FilenameETag.erase(Filename);
- FilenameETagOriginal.erase(Filename);
- FilenameETag.insert(std::make_pair(Filename, ETag));
- FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal));
-
- std::map::iterator IterWxS;
- IterWxS = FilenameETagOriginal.find(Filename);
- NeedsWrite = TRUE;
-
- // Unlock.
-
- ProcessLock->unlock();
+ // Lock or wait if it is already locked.
+
+ ProcessLock->lock();
+
+ bool FileResult = FALSE;
+
+ if (FilenameETag.find(Filename) != FilenameETag.end()){
+
+ FileResult = TRUE;
+
+ } else {
+
+ FileResult = FALSE;
+
+ }
+
+ // Unlock.
+
+ ProcessLock->unlock();
+
+ return FileResult;
}
std::map* ETagDB::GetFilenamePointer(){
-
- return &FilenameETag;
-
+
+ return &FilenameETag;
+
}
wxString ETagDB::GetETag(wxString Filename){
-
- // Lock or wait if it is already locked.
-
- wxString ETagOut;
- std::map::iterator IterwxS;
-
- ProcessLock->lock();
-
- // Get the ETag.
-
- //IterwxS = FilenameETag.find(Filename);
-
- if (FilenameETag.find(Filename) != FilenameETag.end()){
-
- IterwxS = FilenameETag.find(Filename);
-
- ETagOut = IterwxS->second;
-
- }
-
- // Unlock.
-
- ProcessLock->unlock();
-
- return ETagOut;
-
+
+ // Lock or wait if it is already locked.
+
+ wxString ETagOut;
+ std::map::iterator IterwxS;
+
+ ProcessLock->lock();
+
+ // Get the ETag.
+
+ //IterwxS = FilenameETag.find(Filename);
+
+ if (FilenameETag.find(Filename) != FilenameETag.end()){
+
+ IterwxS = FilenameETag.find(Filename);
+
+ ETagOut = IterwxS->second;
+
+ }
+
+ // Unlock.
+
+ ProcessLock->unlock();
+
+ return ETagOut;
+
}
wxString ETagDB::GetETagOriginal(wxString Filename){
-
- // Lock or wait if it is already locked.
-
- wxString ETagOrigOut;
- std::map::iterator IterwxS;
-
- ProcessLock->lock();
-
- // Get the ETag.
-
- //IterwxS = FilenameETag.find(Filename);
-
- if (FilenameETagOriginal.find(Filename) != FilenameETagOriginal.end()){
-
- IterwxS = FilenameETagOriginal.find(Filename);
-
- ETagOrigOut = IterwxS->second;
-
- }
-
- // Unlock.
-
- ProcessLock->unlock();
-
- return ETagOrigOut;
-
+
+ // Lock or wait if it is already locked.
+
+ wxString ETagOrigOut;
+ std::map::iterator IterwxS;
+
+ ProcessLock->lock();
+
+ // Get the ETag.
+
+ //IterwxS = FilenameETag.find(Filename);
+
+ if (FilenameETagOriginal.find(Filename) != FilenameETagOriginal.end()){
+
+ IterwxS = FilenameETagOriginal.find(Filename);
+
+ ETagOrigOut = IterwxS->second;
+
+ }
+
+ // Unlock.
+
+ ProcessLock->unlock();
+
+ return ETagOrigOut;
+
}
-
-bool ETagDB::WriteETagDB(){
-
- // Lock or wait if it is already locked.
-
- ProcessLock->lock();
-
- // Write the ETag database.
-
- wxString AccountETagDB;
- std::map::iterator IterwxS;
- int LineSeek = 0;
-
-
+bool ETagDB::WriteETagDB(){
+
+ // Lock or wait if it is already locked.
+
+ ProcessLock->lock();
+
+ // Write the ETag database.
+
+ wxString AccountETagDB;
+ std::map::iterator IterwxS;
+ int LineSeek = 0;
+
+
+
#if defined(__HAIKU__)
//preffilename = wxT("noo");
-
+
#elif defined(__WIN32__)
-
- AccountETagDB.Clear();
- AccountETagDB = GetAccountDir(AccountDir, FALSE);
- AccountETagDB.Append(wxT("\\etag.db"));
-
+
+ AccountETagDB.Clear();
+ AccountETagDB = GetAccountDir(AccountDir, FALSE);
+ AccountETagDB.Append(wxT("\\etag.db"));
+
#else
-
- AccountETagDB.Clear();
- AccountETagDB = GetAccountDir(AccountDir, FALSE);
- AccountETagDB.Append(wxT("/etag.db"));
-
+
+ // This entry applies to OSX as well.
+
+ AccountETagDB.Clear();
+ AccountETagDB = GetAccountDir(AccountDir, FALSE);
+ AccountETagDB.Append(wxT("/etag.db"));
+
#endif
-
- wxTextFile ETagDBFile;
- wxString SettingLine;
-
- if (wxFileExists(AccountETagDB) == FALSE){
-
- if (ETagDBFile.Create(AccountETagDB) == FALSE){
- ////ProcessLock.unlock();
- return FALSE;
- }
-
- } else {
-
- if (ETagDBFile.Open(AccountETagDB) == FALSE){
- ////ProcessLock.unlock();
- return FALSE;
- }
-
- }
-
- ETagDBFile.Clear();
-
- for (std::map::iterator iter = FilenameETag.begin();
- iter != FilenameETag.end(); ++iter){
-
- // Get Original ETag as well.
-
- IterwxS = FilenameETagOriginal.find(iter->first);
-
- if (iter->first.IsEmpty()){
- continue;
- }
-
- SettingLine = iter->first + wxT("|") + iter->second + wxT("|") + IterwxS->second;
-
- ETagDBFile.InsertLine(SettingLine, LineSeek);
-
- LineSeek++;
-
- }
-
- ETagDBFile.Write();
-
- NeedsWrite = FALSE;
-
- // Unlock.
-
- ProcessLock->unlock();
-
- return TRUE;
-
+
+ wxTextFile ETagDBFile;
+ wxString SettingLine;
+
+ if (wxFileExists(AccountETagDB) == FALSE){
+
+ if (ETagDBFile.Create(AccountETagDB) == FALSE){
+ ////ProcessLock.unlock();
+ return FALSE;
+ }
+
+ } else {
+
+ if (ETagDBFile.Open(AccountETagDB) == FALSE){
+ ////ProcessLock.unlock();
+ return FALSE;
+ }
+
+ }
+
+ ETagDBFile.Clear();
+
+ for (std::map::iterator iter = FilenameETag.begin();
+ iter != FilenameETag.end(); ++iter){
+
+ // Get Original ETag as well.
+
+ IterwxS = FilenameETagOriginal.find(iter->first);
+
+ if (iter->first.IsEmpty()){
+ continue;
+ }
+
+ SettingLine = iter->first + wxT("|") + iter->second + wxT("|") + IterwxS->second;
+
+ ETagDBFile.InsertLine(SettingLine, LineSeek);
+
+ LineSeek++;
+
+ }
+
+ ETagDBFile.Write();
+
+ NeedsWrite = FALSE;
+
+ // Unlock.
+
+ ProcessLock->unlock();
+
+ return TRUE;
+
}
bool ETagDB::LoadETagDB(){
-
- // Lock or wait if it is already locked.
-
- ProcessLock->lock();
-
- // Load the ETag database.
-
- wxString AccountETagDB;
- wxString AccountDirPath;
-
+
+ // Lock or wait if it is already locked.
+
+ ProcessLock->lock();
+
+ // Load the ETag database.
+
+ wxString AccountETagDB;
+ wxString AccountDirPath;
+
#if defined(__HAIKU__)
//preffilename = wxT("noo");
-
+
#elif defined(__WIN32__)
-
- AccountDirPath = GetAccountDir(AccountDir, FALSE);
-
- AccountETagDB = AccountDirPath;
- AccountETagDB.Append(wxT("\\etag.db"));
-
+
+ AccountDirPath = GetAccountDir(AccountDir, FALSE);
+
+ AccountETagDB = AccountDirPath;
+ AccountETagDB.Append(wxT("\\etag.db"));
+
#else
-
- AccountDirPath = GetAccountDir(AccountDir, bool FALSE);
-
- AccountETagDB = AccountDirPath;
- AccountETagDB.Append(wxT("/etag.db"));
-
+
+ AccountDirPath = GetAccountDir(AccountDir, FALSE);
+
+ AccountETagDB = AccountDirPath;
+ AccountETagDB.Append(wxT("/etag.db"));
+
#endif
-
- wxTextFile ETagDBFile;
-
- if (wxFileExists(AccountETagDB) == FALSE){
-
- if (ETagDBFile.Create(AccountETagDB) == FALSE){
- ////ProcessLock.unlock();
- //ProcessLock->unlock();
- return FALSE;
- }
-
- } else {
-
- if (ETagDBFile.Open(AccountETagDB, wxConvUTF8) == FALSE){
- ////ProcessLock.unlock();
- //ProcessLock->unlock();
- return FALSE;
- }
-
- }
-
- wxString wxSFilename;
- wxString wxSValue;
- wxString ETagContactFilename;
-
- for (wxStringTokenizer ETagDBLine(ETagDBFile.GetFirstLine(), wxT("|"));
- !ETagDBFile.Eof(); ETagDBLine.SetString(ETagDBFile.GetNextLine(), wxT("|"), wxTOKEN_DEFAULT) )
- {
-
- // Split the file into three.
-
- wxSFilename = ETagDBLine.GetNextToken();
-
- // Get the ETag.
-
- wxSValue = ETagDBLine.GetNextToken();
- FilenameETag.insert(std::make_pair(wxSFilename, wxSValue));
-
- // Get the original ETag.
-
- wxSValue = ETagDBLine.GetNextToken();
- wxSValue.Trim();
- FilenameETagOriginal.insert(std::make_pair(wxSFilename, wxSValue));
-
- }
-
- // Unlock.
-
- ProcessLock->unlock();
-
- return TRUE;
-
+
+ wxTextFile ETagDBFile;
+
+ if (wxFileExists(AccountETagDB) == FALSE){
+
+ if (ETagDBFile.Create(AccountETagDB) == FALSE){
+ ////ProcessLock.unlock();
+ //ProcessLock->unlock();
+ return FALSE;
+ }
+
+ } else {
+
+ if (ETagDBFile.Open(AccountETagDB, wxConvUTF8) == FALSE){
+ ////ProcessLock.unlock();
+ //ProcessLock->unlock();
+ return FALSE;
+ }
+
+ }
+
+ wxString wxSFilename;
+ wxString wxSValue;
+ wxString ETagContactFilename;
+
+ for (wxStringTokenizer ETagDBLine(ETagDBFile.GetFirstLine(), wxT("|"));
+ !ETagDBFile.Eof(); ETagDBLine.SetString(ETagDBFile.GetNextLine(), wxT("|"), wxTOKEN_DEFAULT) )
+ {
+
+ // Split the file into three.
+
+ wxSFilename = ETagDBLine.GetNextToken();
+
+ // Get the ETag.
+
+ wxSValue = ETagDBLine.GetNextToken();
+ FilenameETag.insert(std::make_pair(wxSFilename, wxSValue));
+
+ // Get the original ETag.
+
+ wxSValue = ETagDBLine.GetNextToken();
+ wxSValue.Trim();
+ FilenameETagOriginal.insert(std::make_pair(wxSFilename, wxSValue));
+
+ }
+
+ // Unlock.
+
+ ProcessLock->unlock();
+
+ return TRUE;
+
}
-void ETagDB::DeleteETagDB(){
-
- // Lock or wait if it is already locked.
-
- ProcessLock->lock();
-
- wxString AccountETagDB;
-
- // Delete the ETagDB.
-
+void ETagDB::DeleteETagDB(){
+
+ // Lock or wait if it is already locked.
+
+ ProcessLock->lock();
+
+ wxString AccountETagDB;
+
+ // Delete the ETagDB.
+
#if defined(__HAIKU__)
//preffilename = wxT("noo");
-
+
#elif defined(__WIN32__)
-
- AccountETagDB.Clear();
- AccountETagDB = GetAccountDir(AccountDir, FALSE);
- AccountETagDB.Append(wxT("\\etag.db"));
-
- wxRemoveFile(AccountETagDB);
-
+
+ AccountETagDB.Clear();
+ AccountETagDB = GetAccountDir(AccountDir, FALSE);
+ AccountETagDB.Append(wxT("\\etag.db"));
+
+ wxRemoveFile(AccountETagDB);
+
#else
-
- AccountETagDB.Clear();
- AccountETagDB = GetAccountDir(AccountDir, FALSE);
- AccountETagDB.Append(wxT("/etag.db"));
-
- wxRemoveFile(AccountETagDB);
-
+
+ AccountETagDB.Clear();
+ AccountETagDB = GetAccountDir(AccountDir, FALSE);
+ AccountETagDB.Append(wxT("/etag.db"));
+
+ wxRemoveFile(AccountETagDB);
+
#endif
-
- // Unlock.
-
- ProcessLock->unlock();
-
+
+ // Unlock.
+
+ ProcessLock->unlock();
+
}
bool ETagDB::CheckETagExists(wxString Filename){
-
- if (FilenameETag.find(Filename) == FilenameETag.end()){
-
- return FALSE;
-
- } else {
-
- return TRUE;
-
- }
-
+
+ if (FilenameETag.find(Filename) == FilenameETag.end()){
+
+ return FALSE;
+
+ } else {
+
+ return TRUE;
+
+ }
+
}
std::map ETagDB::GetETagData(){
-
- // Lock the database.
-
- ProcessLock->lock();
-
- // Go through each of the ETags and process them accordingly.
-
- std::map DataSet;
-
- for (std::map::iterator iter = FilenameETag.begin();
- iter != FilenameETag.end(); ++iter){
-
- std::map::iterator origiter = FilenameETagOriginal.find(iter->first);
-
- ETagData etd;
-
- etd.ETagValue = iter->second;
- etd.ETagOrigValue = origiter->second;
-
- DataSet.insert(std::make_pair(iter->first, etd));
-
- }
-
- // Unlock the database.
-
- ProcessLock->unlock();
-
- return DataSet;
-
+
+ // Lock the database.
+
+ ProcessLock->lock();
+
+ // Go through each of the ETags and process them accordingly.
+
+ std::map DataSet;
+
+ for (std::map::iterator iter = FilenameETag.begin();
+ iter != FilenameETag.end(); ++iter){
+
+ std::map::iterator origiter = FilenameETagOriginal.find(iter->first);
+
+ ETagData etd;
+
+ etd.ETagValue = iter->second;
+ etd.ETagOrigValue = origiter->second;
+
+ DataSet.insert(std::make_pair(iter->first, etd));
+
+ }
+
+ // Unlock the database.
+
+ ProcessLock->unlock();
+
+ return DataSet;
+
}
bool ETagDB::GetWriteStatus(){
-
- return NeedsWrite;
-
+
+ return NeedsWrite;
+
}
\ No newline at end of file