X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fcommon%2Fetag.cpp;h=a32f0e9a5c6ed3ed4242daaecaaa027e124767cd;hb=a73019906500e3a0fc306a61e4b7975f79725866;hp=12777b056fcfc3fabafbdb171009f2928010207a;hpb=45729fca56479bd9158486e0cda0c4a94b4dd1dc;p=xestiaab%2F.git diff --git a/source/common/etag.cpp b/source/common/etag.cpp index 12777b0..a32f0e9 100644 --- a/source/common/etag.cpp +++ b/source/common/etag.cpp @@ -1,430 +1,457 @@ -#include "etag.h" +#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