X-Git-Url: http://Server1/repobrowser/?a=blobdiff_plain;f=source%2Fcommon%2Fetag.cpp;h=a2d298d48950235028e4af81720fd8c788d6208a;hb=f69e09d827e06435ea94bb73aa71ab5f9d5c035b;hp=a32f0e9a5c6ed3ed4242daaecaaa027e124767cd;hpb=0f3c5938ed5a1c372b69def42d0553a8f5142f0a;p=xestiaab%2F.git diff --git a/source/common/etag.cpp b/source/common/etag.cpp index a32f0e9..a2d298d 100644 --- a/source/common/etag.cpp +++ b/source/common/etag.cpp @@ -1,457 +1,508 @@ +// 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. + // Write out the database to file. - ProcessLock->try_lock(); + ProcessLock->try_lock(); - if (NeedsWrite == TRUE){ + if (NeedsWrite == TRUE){ - WriteETagDB(); + WriteETagDB(); - } + } - ProcessLock->unlock(); + ProcessLock->unlock(); } void ETagDB::SetupDB(wxString AccountDirInc){ - AccountDir = AccountDirInc; - LoadETagDB(); + // Setup the ETag Database. + + AccountDir = AccountDirInc; + LoadETagDB(); } void ETagDB::AddETag(wxString Filename, wxString ETag, wxString ETagOriginal){ - // Lock or wait if it is already locked. + // Lock or wait if it is already locked. - ProcessLock->lock(); + ProcessLock->lock(); - // Process the ETag addition. + // Process the ETag addition. - FilenameETag.insert(std::make_pair(Filename, ETag)); - FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal)); + FilenameETag.insert(std::make_pair(Filename, ETag)); + FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal)); - NeedsWrite = TRUE; + NeedsWrite = TRUE; - // Unlock. + // Unlock. - ProcessLock->unlock(); + ProcessLock->unlock(); } void ETagDB::RemoveETag(wxString Filename){ - // Lock or wait if it is already locked. - - ProcessLock->lock(); + // Remove the ETag. + + // Lock or wait if it is already locked. - // Remove the ETag. + ProcessLock->lock(); - Filename.Trim(); + // Remove the ETag. - FilenameETag.erase(Filename); - FilenameETagOriginal.erase(Filename); + Filename.Trim(); - NeedsWrite = TRUE; + FilenameETag.erase(Filename); + FilenameETagOriginal.erase(Filename); + + NeedsWrite = TRUE; - // Unlock. + // Unlock. - ProcessLock->unlock(); + ProcessLock->unlock(); } void ETagDB::UpdateETag(wxString Filename, wxString ETag){ - // Lock or wait if it is already locked. + // Update the ETag. + + // Lock or wait if it is already locked. - ProcessLock->lock(); + ProcessLock->lock(); - // Update the ETag. + // Update the ETag. - FilenameETag.erase(Filename); - FilenameETag.insert(std::make_pair(Filename, ETag)); + FilenameETag.erase(Filename); + FilenameETag.insert(std::make_pair(Filename, ETag)); - NeedsWrite = TRUE; + NeedsWrite = TRUE; - // Unlock. + // Unlock. - ProcessLock->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 with the tags given. + + // Lock or wait if it is already locked. - // Update the ETag. + ProcessLock->lock(); - FilenameETag.erase(Filename); - FilenameETagOriginal.erase(Filename); - FilenameETag.insert(std::make_pair(Filename, ETag)); - FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal)); + // Update the ETag. - std::map::iterator IterWxS; - IterWxS = FilenameETagOriginal.find(Filename); - NeedsWrite = TRUE; + FilenameETag.erase(Filename); + FilenameETagOriginal.erase(Filename); + FilenameETag.insert(std::make_pair(Filename, ETag)); + FilenameETagOriginal.insert(std::make_pair(Filename, ETagOriginal)); - // Unlock. + std::map::iterator IterWxS; + IterWxS = FilenameETagOriginal.find(Filename); + NeedsWrite = TRUE; + + // Unlock. - ProcessLock->unlock(); + ProcessLock->unlock(); } bool ETagDB::ETagExists(wxString Filename){ - // Lock or wait if it is already locked. + // Check if the ETag exists. + + // Lock or wait if it is already locked. - ProcessLock->lock(); + ProcessLock->lock(); - bool FileResult = FALSE; + bool FileResult = FALSE; - if (FilenameETag.find(Filename) != FilenameETag.end()){ + if (FilenameETag.find(Filename) != FilenameETag.end()){ - FileResult = TRUE; + FileResult = TRUE; - } else { + } else { - FileResult = FALSE; + FileResult = FALSE; - } + } - // Unlock. + // Unlock. - ProcessLock->unlock(); + ProcessLock->unlock(); - return FileResult; + return FileResult; } std::map* ETagDB::GetFilenamePointer(){ - return &FilenameETag; + // Get the Filename Pointer. + + return &FilenameETag; } wxString ETagDB::GetETag(wxString Filename){ + + // Get the ETag. + + // Lock or wait if it is already locked. + + wxString ETagOut; + std::map::iterator IterwxS; - // Lock or wait if it is already locked. - - wxString ETagOut; - std::map::iterator IterwxS; - - ProcessLock->lock(); - - // Get the ETag. - - //IterwxS = FilenameETag.find(Filename); + ProcessLock->lock(); - if (FilenameETag.find(Filename) != FilenameETag.end()){ + // Get the ETag. + + if (FilenameETag.find(Filename) != FilenameETag.end()){ - IterwxS = FilenameETag.find(Filename); + IterwxS = FilenameETag.find(Filename); - ETagOut = IterwxS->second; + ETagOut = IterwxS->second; - } + } - // Unlock. + // Unlock. - ProcessLock->unlock(); + ProcessLock->unlock(); - return ETagOut; + return ETagOut; } wxString ETagDB::GetETagOriginal(wxString Filename){ - // Lock or wait if it is already locked. + // Get the original ETag. + + // Lock or wait if it is already locked. - wxString ETagOrigOut; - std::map::iterator IterwxS; + wxString ETagOrigOut; + std::map::iterator IterwxS; - ProcessLock->lock(); + ProcessLock->lock(); - // Get the ETag. + // Get the ETag. - //IterwxS = FilenameETag.find(Filename); - - if (FilenameETagOriginal.find(Filename) != FilenameETagOriginal.end()){ + if (FilenameETagOriginal.find(Filename) != FilenameETagOriginal.end()){ - IterwxS = FilenameETagOriginal.find(Filename); + IterwxS = FilenameETagOriginal.find(Filename); - ETagOrigOut = IterwxS->second; + ETagOrigOut = IterwxS->second; - } + } - // Unlock. + // Unlock. - ProcessLock->unlock(); + ProcessLock->unlock(); - return ETagOrigOut; + return ETagOrigOut; } bool ETagDB::WriteETagDB(){ - // Lock or wait if it is already locked. - - ProcessLock->lock(); - - // Write the ETag database. + // Write the ETag database. + + // Lock or wait if it is already locked. - wxString AccountETagDB; - std::map::iterator IterwxS; - int LineSeek = 0; + ProcessLock->lock(); + // Write the ETag database. + wxString AccountETagDB; + std::map::iterator IterwxS; + int LineSeek = 0; #if defined(__HAIKU__) - //preffilename = wxT("noo"); + //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 - // This entry applies to OSX as well. - - 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; + wxTextFile ETagDBFile; + wxString SettingLine; - if (wxFileExists(AccountETagDB) == FALSE){ + if (wxFileExists(AccountETagDB) == FALSE){ + + if (ETagDBFile.Create(AccountETagDB) == FALSE){ + + return FALSE; + + } - if (ETagDBFile.Create(AccountETagDB) == FALSE){ - ////ProcessLock.unlock(); - return FALSE; - } + } else { - } else { + if (ETagDBFile.Open(AccountETagDB) == FALSE){ + + return FALSE; - if (ETagDBFile.Open(AccountETagDB) == FALSE){ - ////ProcessLock.unlock(); - return FALSE; - } + } - } + } - ETagDBFile.Clear(); + ETagDBFile.Clear(); - for (std::map::iterator iter = FilenameETag.begin(); - iter != FilenameETag.end(); ++iter){ + for (std::map::iterator iter = FilenameETag.begin(); + iter != FilenameETag.end(); ++iter){ - // Get Original ETag as well. + // Get Original ETag as well. - IterwxS = FilenameETagOriginal.find(iter->first); + IterwxS = FilenameETagOriginal.find(iter->first); - if (iter->first.IsEmpty()){ - continue; - } + if (iter->first.IsEmpty()){ + continue; + } - SettingLine = iter->first + wxT("|") + iter->second + wxT("|") + IterwxS->second; + wxString ServerETag = ""; + + if (IterwxS == FilenameETagOriginal.end()) { + + ServerETag = ""; + + } else { + + ServerETag = IterwxS->second; + + } + + SettingLine = iter->first + wxT("|") + iter->second + wxT("|") + ServerETag; - ETagDBFile.InsertLine(SettingLine, LineSeek); + ETagDBFile.InsertLine(SettingLine, LineSeek); - LineSeek++; + LineSeek++; - } + } - ETagDBFile.Write(); + ETagDBFile.Write(); - NeedsWrite = FALSE; + NeedsWrite = FALSE; - // Unlock. + // Unlock. - ProcessLock->unlock(); + ProcessLock->unlock(); - return TRUE; + return TRUE; } bool ETagDB::LoadETagDB(){ - // Lock or wait if it is already locked. + // Load the ETag database. + + // Lock or wait if it is already locked. - ProcessLock->lock(); + ProcessLock->lock(); - // Load the ETag database. + // Load the ETag database. - wxString AccountETagDB; - wxString AccountDirPath; + wxString AccountETagDB; + wxString AccountDirPath; #if defined(__HAIKU__) - - //preffilename = wxT("noo"); - + #elif defined(__WIN32__) - AccountDirPath = GetAccountDir(AccountDir, FALSE); + AccountDirPath = GetAccountDir(AccountDir, FALSE); - AccountETagDB = AccountDirPath; - AccountETagDB.Append(wxT("\\etag.db")); + AccountETagDB = AccountDirPath; + AccountETagDB.Append(wxT("\\etag.db")); #else - AccountDirPath = GetAccountDir(AccountDir, FALSE); + AccountDirPath = GetAccountDir(AccountDir, FALSE); - AccountETagDB = AccountDirPath; - AccountETagDB.Append(wxT("/etag.db")); + AccountETagDB = AccountDirPath; + AccountETagDB.Append(wxT("/etag.db")); #endif - wxTextFile ETagDBFile; + wxTextFile ETagDBFile; - if (wxFileExists(AccountETagDB) == FALSE){ + if (wxFileExists(AccountETagDB) == FALSE){ - if (ETagDBFile.Create(AccountETagDB) == FALSE){ - ////ProcessLock.unlock(); - //ProcessLock->unlock(); - return FALSE; - } + if (ETagDBFile.Create(AccountETagDB) == FALSE){ + + return FALSE; + + } - } else { + } else { - if (ETagDBFile.Open(AccountETagDB, wxConvUTF8) == FALSE){ - ////ProcessLock.unlock(); - //ProcessLock->unlock(); - return FALSE; - } + if (ETagDBFile.Open(AccountETagDB, wxConvUTF8) == FALSE){ + + return FALSE; + + } - } + } - wxString wxSFilename; - wxString wxSValue; - wxString ETagContactFilename; + wxString wxSFilename; + wxString wxSValue; + wxString ETagContactFilename; - for (wxStringTokenizer ETagDBLine(ETagDBFile.GetFirstLine(), wxT("|")); - !ETagDBFile.Eof(); ETagDBLine.SetString(ETagDBFile.GetNextLine(), wxT("|"), wxTOKEN_DEFAULT) ) - { + for (wxStringTokenizer ETagDBLine(ETagDBFile.GetFirstLine(), wxT("|")); + !ETagDBFile.Eof(); ETagDBLine.SetString(ETagDBFile.GetNextLine(), wxT("|"), wxTOKEN_DEFAULT) ) + { - // Split the file into three. + // Split the file into three. - wxSFilename = ETagDBLine.GetNextToken(); + wxSFilename = ETagDBLine.GetNextToken(); - // Get the ETag. + // Get the ETag. - wxSValue = ETagDBLine.GetNextToken(); - FilenameETag.insert(std::make_pair(wxSFilename, wxSValue)); + wxSValue = ETagDBLine.GetNextToken(); + FilenameETag.insert(std::make_pair(wxSFilename, wxSValue)); - // Get the original ETag. + // Get the original ETag. - wxSValue = ETagDBLine.GetNextToken(); - wxSValue.Trim(); - FilenameETagOriginal.insert(std::make_pair(wxSFilename, wxSValue)); + wxSValue = ETagDBLine.GetNextToken(); + wxSValue.Trim(); + FilenameETagOriginal.insert(std::make_pair(wxSFilename, wxSValue)); - } + } - // Unlock. + // Unlock. - ProcessLock->unlock(); + ProcessLock->unlock(); - return TRUE; + return TRUE; } void ETagDB::DeleteETagDB(){ - // Lock or wait if it is already locked. + // Delete the ETag database. + + // Lock or wait if it is already locked. - ProcessLock->lock(); + ProcessLock->lock(); - wxString AccountETagDB; + wxString AccountETagDB; - // Delete the ETagDB. + // Delete the ETagDB. #if defined(__HAIKU__) - //preffilename = wxT("noo"); + //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")); - wxRemoveFile(AccountETagDB); + wxRemoveFile(AccountETagDB); #else - AccountETagDB.Clear(); - AccountETagDB = GetAccountDir(AccountDir, FALSE); - AccountETagDB.Append(wxT("/etag.db")); + AccountETagDB.Clear(); + AccountETagDB = GetAccountDir(AccountDir, FALSE); + AccountETagDB.Append(wxT("/etag.db")); - wxRemoveFile(AccountETagDB); + wxRemoveFile(AccountETagDB); #endif - // Unlock. + // Unlock. - ProcessLock->unlock(); + ProcessLock->unlock(); } bool ETagDB::CheckETagExists(wxString Filename){ - if (FilenameETag.find(Filename) == FilenameETag.end()){ + if (FilenameETag.find(Filename) == FilenameETag.end()){ - return FALSE; + return FALSE; - } else { + } else { - return TRUE; + return TRUE; - } + } } std::map ETagDB::GetETagData(){ - // Lock the database. + // Get the ETag data. + + // Lock the database. - ProcessLock->lock(); + ProcessLock->lock(); - // Go through each of the ETags and process them accordingly. + // Go through each of the ETags and process them accordingly. - std::map DataSet; + std::map DataSet; - for (std::map::iterator iter = FilenameETag.begin(); - iter != FilenameETag.end(); ++iter){ + for (std::map::iterator iter = FilenameETag.begin(); + iter != FilenameETag.end(); ++iter){ - std::map::iterator origiter = FilenameETagOriginal.find(iter->first); + std::map::iterator origiter = FilenameETagOriginal.find(iter->first); - ETagData etd; + ETagData etd; + + etd.ETagValue = iter->second; + etd.ETagOrigValue = origiter->second; - etd.ETagValue = iter->second; - etd.ETagOrigValue = origiter->second; + DataSet.insert(std::make_pair(iter->first, etd)); - DataSet.insert(std::make_pair(iter->first, etd)); - - } + } - // Unlock the database. + // Unlock the database. - ProcessLock->unlock(); + ProcessLock->unlock(); - return DataSet; + return DataSet; } bool ETagDB::GetWriteStatus(){ - return NeedsWrite; - + // Check if the ETag database needs to be + // written to a file. + + return NeedsWrite; + } \ No newline at end of file