#include <wx/dir.h>
#include <wx/filefn.h>
#include <thread>
+#include <list>
#include <curl/curl.h>
-#include "bitmaps.h"
-#include "enums.h"
-#include "common/preferences.h"
-#include "frmConflictResolution.h"
-#include "frmInvalidSSLCertificate.h"
-#include "frmMain.h"
-#include "common/events.h"
-#include "common/filename.h"
-#include "common/dirs.h"
-#include "vcard/vcard34conv.h"
-#include "vcard/vcard.h"
-
-
-#ifndef FRMACTIVITYMGR_H
-#define FRMACTIVITYMGR_H
+#include "../bitmaps.h"
+#include "../enums.h"
+#include "../common/preferences.h"
+#include "../frmConflictResolution.h"
+#include "../frmInvalidSSLCertificate.h"
+#include "../frmMain.h"
+#include "../common/events.h"
+#include "../common/filename.h"
+#include "../vcard/vcard34conv.h"
+#include "../vcard/vcard.h"
DEFINE_EVENT_TYPE(ACTMGR_RESUMEPROC);
DEFINE_EVENT_TYPE(ACTMGR_TOGGLECONN);
DEFINE_EVENT_TYPE(ACTMGR_STARTPROCESSTIMER);
DEFINE_EVENT_TYPE(ACTMGR_STOPPROCESSTIMER);
DEFINE_EVENT_TYPE(ACTMGR_UPDATESTATUSLABEL);
+DEFINE_EVENT_TYPE(ACTMGR_STARTANIMATIONTIMER);
BEGIN_EVENT_TABLE(frmActivityMgr, wxWindow)
EVT_COMMAND(wxID_ANY, ACTMGR_RESUMEPROC, frmActivityMgr::ResumeProcessing)
EVT_COMMAND(wxID_ANY, ACTMGR_STARTPROCESSTIMER, frmActivityMgr::StartProcessTimer)
EVT_COMMAND(wxID_ANY, ACTMGR_STOPPROCESSTIMER, frmActivityMgr::StopProcessTimer)
EVT_COMMAND(wxID_ANY, ACTMGR_UPDATESTATUSLABEL, frmActivityMgr::UpdateStatusLabel)
+ EVT_COMMAND(wxID_ANY, ACTMGR_STARTANIMATIONTIMER, frmActivityMgr::StartAnimationTimer)
END_EVENT_TABLE()
frmActivityMgr::frmActivityMgr( wxWindow* parent )
//TestTimer.Start(50, FALSE);
}
-int frmActivityMgr::AddTask(int TaskType, wxString TaskDetail, wxString TaskAccount,
- wxString TaskURL, wxString TaskFilename, wxString TaskFullFilename,
- wxString TaskData){
-
- ActivityTaskID++;
-
- wxListItem coldata;
- long itemindex = -1;
- CardDAV* CardDAVConn = new CardDAV;
-
- coldata.SetId(ActivityTaskID);
- coldata.SetData(ActivityTaskID);
-
- AnimationTimer.StartAnimation();
-
- // Get the preferences file.
-
- wxString PrefFilename = GetUserPrefDir();
-
- XABPreferences PrefData(PrefFilename);
-
- wxString AccountName;
- wxString AccountDir;
- wxString AccountAddress;
- int AccountPort = 0;
- wxString AccountUsername;
- wxString AccountPassword;
- bool AccountSSL = FALSE;
- wxString AccountPrefix;
-
- // Look for the account and get the friendly name for the account.
-
- for (int i = 0; i < PrefData.accounts.GetCount(); i++){
-
- AccountDir = PrefData.accounts.GetAccountDirectory(i);
-
- AccountDir.Trim();
- AccountDir.Append(wxT(".carddav"));
-
- if (AccountDir == TaskAccount){
-
- AccountName = PrefData.accounts.GetAccountName(i);
- AccountAddress = PrefData.accounts.GetAccountAddress(i);
- AccountPort = PrefData.accounts.GetAccountPort(i);
- AccountUsername = PrefData.accounts.GetAccountUsername(i);
- AccountPassword = PrefData.accounts.GetAccountPassword(i);
- AccountPrefix = PrefData.accounts.GetAccountDirPrefix(i);
- AccountSSL = PrefData.accounts.GetAccountSSL(i);
-
- AccountName.Trim();
- AccountAddress.Trim();
- //AccountPort.Trim();
- AccountUsername.Trim();
- AccountPassword.Trim();
- AccountPrefix.Trim();
- break;
-
- }
-
- }
-
- CardDAVConn->SetupConnection(AccountAddress, AccountPort, AccountUsername, AccountPassword, AccountSSL, AccountPrefix, AccountDir);
- CardDAVConn->SetupVariables(&ActivityList, ActivityTaskID);
- CardDAVConn->SetupResultBools(&BlankBool, &BlankBool);
-
- // TaskType:
- // 0 - Add a contact.
- // 1 - Update a contact.
- // 2 - Delete a contact.
- // 3 - Account syncronisation.
-
- if (TaskType == 0){
-
- coldata.SetText(_("Adding Contact '") + TaskDetail + _("'"));
- itemindex = lstActivity->InsertItem(coldata);
-
- lstActivity->SetItem(itemindex, 1, AccountName);
- lstActivity->SetItem(itemindex, 2, _("Queued"));
-
- CardDAVConn->SetUploadMode(TRUE);
- CardDAVConn->SetupData(wxT("PUT"), TaskURL, TaskData);
-
- // Setup all of the task details.
-
- ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
-
- ActivityListType.insert(std::make_pair(ActivityTaskID, 0));
- ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
- ActivityListConn.insert(std::make_pair(ActivityTaskID, CardDAVConn));
- ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
- ActivityListTaskDetail.insert(std::make_pair(ActivityTaskID, TaskDetail));
- ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
- ActivityListFilename.insert(std::make_pair(ActivityTaskID, TaskFilename));
- ActivityListFullFilename.insert(std::make_pair(ActivityTaskID, TaskFullFilename));
-
- ActivityListETag.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETag(TaskFilename)));
- ActivityListETagOriginal.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETagOriginal(TaskFilename)));
- ActivityList.insert(std::make_pair(ActivityTaskID, 0));
-
- } else if (TaskType == 1){
-
- coldata.SetText(_("Updating Contact '") + TaskDetail + _("'"));
- itemindex = lstActivity->InsertItem(coldata);
-
- lstActivity->SetItem(itemindex, 1, AccountName);
- lstActivity->SetItem(itemindex, 2, _("Queued"));
-
- CardDAVConn->SetUploadMode(TRUE);
- CardDAVConn->SetupData(wxT("PUT"), TaskURL, TaskData);
- CardDAVConn->SetEditMode(TRUE);
-
- ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
-
- ActivityListType.insert(std::make_pair(ActivityTaskID, 1));
- ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
- ActivityListConn.insert(std::make_pair(ActivityTaskID, CardDAVConn));
- ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
- ActivityListTaskDetail.insert(std::make_pair(ActivityTaskID, TaskDetail));
- ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
- ActivityListFilename.insert(std::make_pair(ActivityTaskID, TaskFilename));
- ActivityListFullFilename.insert(std::make_pair(ActivityTaskID, TaskFullFilename));
-
- ActivityListETag.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETag(TaskFilename)));
- ActivityListETagOriginal.insert(std::make_pair(ActivityTaskID, ETagDBPtr->GetETagOriginal(TaskFilename)));
- ActivityList.insert(std::make_pair(ActivityTaskID, 0));
-
- } else if (TaskType == 2){
-
- coldata.SetText(_("Deleting Contact '") + TaskDetail + _("'"));
- itemindex = lstActivity->InsertItem(coldata);
-
- lstActivity->SetItem(itemindex, 1, AccountName);
- lstActivity->SetItem(itemindex, 2, _("Queued"));
-
- ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
-
- ActivityList.insert(std::make_pair(ActivityTaskID, 0));
- ActivityListType.insert(std::make_pair(ActivityTaskID, 2));
- ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
- ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
- ActivityListConn.insert(std::make_pair(ActivityTaskID, CardDAVConn));
- ActivityListFilename.insert(std::make_pair(ActivityTaskID, TaskFilename));
- ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
-
- } else if (TaskType == 3){
-
- coldata.SetText(_("Syncronising All Contacts"));
- itemindex = lstActivity->InsertItem(coldata);
-
- lstActivity->SetItem(itemindex, 1, AccountName);
- lstActivity->SetItem(itemindex, 2, _("Queued"));
-
- ActivityList.insert(std::make_pair(ActivityTaskID, 0));
- ActivityListType.insert(std::make_pair(ActivityTaskID, 3));
- ActivityListData.insert(std::make_pair(ActivityTaskID, TaskData));
- ActivityListConn.insert(std::make_pair(ActivityTaskID, CardDAVConn));
- ActivityListTaskDetail.insert(std::make_pair(ActivityTaskID, AccountPrefix));
- ActivityListAccount.insert(std::make_pair(ActivityTaskID, TaskAccount));
- ActivityListIndex.insert(std::make_pair(ActivityTaskID, itemindex));
-
- }
-
- ProcessTasksData = TRUE;
-
- if (!ActProcessTimer.IsRunning()) {
-
- wxCommandEvent event(ACTMGR_STARTTIMER);
- wxPostEvent(this, event);
-
- wxCommandEvent eventp(ACTMGR_STARTPROCESSTIMER);
- wxPostEvent(this, eventp);
-
- //ActProcessTimer.Start(1000, FALSE);
- //ActListProcTimer.Start(1000, FALSE);
-
- }
-
- // Update the recovery database.
-
- return ActivityTaskID;
-
-}
-
-void frmActivityMgr::RemoveTask(){
-
- // Remove task from the recovery database.
-
-}
-
-void frmActivityMgr::StopTask( wxCommandEvent& event ){
-
- // Check if activity has been completed already before stopping.
-
- long longSelected = -1;
- int intSelectedData = 0;
-
- longSelected = lstActivity->GetNextItem(longSelected,
- wxLIST_NEXT_ALL,
- wxLIST_STATE_SELECTED);
-
- intSelectedData = (int)lstActivity->GetItemData(longSelected);
-
- if (longSelected == -1){
- return;
- }
-
- std::map<int,CardDAV*>::iterator CDAVter;
-
- CDAVter = ActivityListConn.find(intSelectedData);
-
- CDAVter->second->Abort();
-
- lstActivity->SetItem(longSelected, 2, _("Stopped"));
-
-}
-
-void frmActivityMgr::StopAllTasks( wxCommandEvent& event ){
-
- // Check if activity has been completed already before stopping.
-
- // TODO: Look through for '1' and stop the running task(s).
-
- long longSelected = -1;
- int intSelectedData = 0;
-
- longSelected = lstActivity->GetNextItem(longSelected,
- wxLIST_NEXT_ALL,
- wxLIST_STATE_SELECTED);
-
- intSelectedData = (int)lstActivity->GetItemData(longSelected);
-
- if (longSelected == -1){
- return;
- }
-
- std::map<int,CardDAV*>::iterator CDAVter;
-
- CDAVter = ActivityListConn.find(intSelectedData);
-
- CDAVter->second->Abort();
-
- lstActivity->SetItem(longSelected, 2, _("Stopped"));
- AnimationTimer.StopAnimation();
- bmpActivity->SetBitmap(SleepBitmap);
- lblDetails->SetLabel(_("No activity."));
-
-}
-
-void frmActivityMgr::RetryTask( wxCommandEvent& event ){
-
- // Check if activity has been completed already before retrying.
-
- long longSelected = -1;
- int intSelectedData = 0;
-
- longSelected = lstActivity->GetNextItem(longSelected,
- wxLIST_NEXT_ALL,
- wxLIST_STATE_SELECTED);
-
- intSelectedData = (int)lstActivity->GetItemData(longSelected);
-
- if (longSelected == -1){
- return;
- }
-
- std::map<int,CardDAV*>::iterator CDAVter;
-
- CDAVter = ActivityListConn.find(intSelectedData);
-
- // Restart the task.
-
- //CDAVter->second.Abort();
-
- std::map<int,int>::iterator Iter;
- Iter = ActivityList.find(intSelectedData);
-
- Iter->second = 0;
-
- AnimationTimer.StartAnimation();
-
- if (!ActProcessTimer.IsRunning()) {
-
- ActProcessTimer.Start(150, FALSE);
- ActListProcTimer.Start(150, FALSE);
-
- }
-
- //lstActivity->SetItem(longSelected, 2, _("Processing..."));
-
-}
-
void frmActivityMgr::OpenWindow()
{
WindowOpen = TRUE;
}
+ if (ApplicationSleepMode == TRUE){
+
+ return;
+
+ }
+
std::map<int,int>::iterator TypeIter;
std::map<int,wxString>::iterator StringIter;
+ std::map<int,wxString>::iterator StringDataIter;
+ std::map<int,wxString>::iterator StringURLIter;
std::map<int,wxString>::iterator StringDetailIter;
std::map<int,wxString>::iterator StringAccountIter;
std::map<int,wxString>::iterator StringFilenameIter;
std::map<int,wxString>::iterator StringETagIter;
std::map<int,wxString>::iterator StringETagOrigIter;
std::map<int,CardDAV*>::iterator CardDAVIter;
+ std::map<int,ActivityMgrAccountSettings>::iterator AccountSettingsIter;
std::map<int,long>::iterator LongIter;
bool TasksFoundProc = FALSE;
wxString TaskDetail;
-
+
for (std::map<int,int>::iterator iter = ActivityList.begin();
iter != ActivityList.end(); ++iter){
continue;
}
+ wxCommandEvent StartAnimationEvent(ACTMGR_STARTANIMATIONTIMER);
+
+ wxPostEvent(this, StartAnimationEvent);
+
+ // Start the animation timer if it hasn't started.
+
CardDAVIter = ActivityListConn.find(iter->first);
TypeIter = ActivityListType.find(iter->first);
StringETagIter = ActivityListETag.find(iter->first);
StringAccountIter = ActivityListAccount.find(iter->first);
StringFilenameIter = ActivityListFilename.find(iter->first);
StringFullFilenameIter = ActivityListFullFilename.find(iter->first);
+ AccountSettingsIter = ActivityListAccSettings.find(iter->first);
+
+ // Setup the CardDAV object.
+
+ CardDAV ConnHandle;
+
+ ConnHandle.SetupConnection(AccountSettingsIter->second.Address,
+ AccountSettingsIter->second.Port,
+ AccountSettingsIter->second.Username,
+ AccountSettingsIter->second.Password,
+ AccountSettingsIter->second.SSL,
+ AccountSettingsIter->second.Prefix,
+ AccountSettingsIter->second.Dir);
+ ConnHandle.SetupVariables(&ActivityList, iter->first);
+ ConnHandle.SetupResultBools(&BlankBool, &BlankBool);
// 0 = Queued.
// 1 = Processing.
// 7 = (Reserved) (UI Updated).
// 8 = Completed. (UI Updated).
+ frmMain *frmMainPtrGet = static_cast<frmMain*>(frmMainPtr);
+ XABPreferences PrefData(GetUserPrefDir());
+
if (iter->second == 0){
//CardDAVIter->second.
wxString ContactFilename;
wxString FullFilename;
wxString ETagResult;
+ bool EditMode = FALSE;
iter->second = 1;
- if (TypeIter->second == 1){
- CardDAVIter->second->GetServerETagValueThread();
- ETagServer = CardDAVIter->second->ETagValueResult();
- }
-
// Compare the ETags and work out if a conflict has occured.
- if (TypeIter->second == 1){
-
- ETag = StringETagIter->second;
- ETagOriginal = StringETagOrigIter->second;
+ if (TypeIter->second == 0){
+
+ // Add a contact.
+
+ StringDataIter = ActivityListData.find(iter->first);
+ StringURLIter = ActivityListURL.find(iter->first);
+
AccountDir = StringAccountIter->second;
ContactFilename = StringFilenameIter->second;
- FullFilename = StringFullFilenameIter->second;
-
- ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
-
- if (ETag == ETagOriginal){
-
- // Compare the ETag with the Server ETag.
+ wxString AccountNameFriendly;
- if (ETagOriginal != ETagServer){
+ int AccountID = 0;
- // Server ETag is different from original ETag.
- // This is a conflict which the user will now
- // need to resolve.
-
- vCard Moo1;
- vCard Moo2;
-
- frmMain *frmMainPtrGet = static_cast<frmMain*>(frmMainPtr);
-
- vCard34Conv vCard34Obj;
-
- wxString ServerContactData;
- vCard ClientData;
- vCard ConvertedV4Data;
-
- // Load the client data from the filename given.
-
- CardDAVIter->second->GetServerContactData();
- ServerContactData = CardDAVIter->second->GetPageData();
-
- // Process v3 version into v4 version.
-
- vCard34Obj.ConvertToV4(&ServerContactData, &ConvertedV4Data);
-
- vCardConflictObj vCardProcData;
-
- vCardProcData.vCardLocalData = &ClientData;
- vCardProcData.vCardServerData = &ConvertedV4Data;
- ClientData.LoadFile(FullFilename);
-
- //ContactConflictEvent event(ContactConflictCmdEnv);
- //event.SetData(ContactFilename, Moo1, Moo2);
-
- //wxPostEvent(frmMainPtrGet, event);
-
- // Setup Conflict Resolution Dialog.
+ for (int i = 0; i < PrefData.accounts.GetCount(); i++){
- // Fetch Data from Server and convert.
+ wxString AccountDirCheck = PrefData.accounts.GetAccountDirectory(i);
- bool *PauseMode = new bool;
- int ConflictResult;
- QRNotif qrn;
-
- *PauseMode = TRUE;
- qrn.QResponse = &ConflictResult;
- qrn.PausePtr = PauseMode;
-
- vCardProcData.QRNotifData = &qrn;
+ AccountDirCheck.Trim();
+ AccountDirCheck.Append(wxT(".carddav"));
- wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED);
- event.SetClientData(&vCardProcData);
- wxPostEvent(frmMainPtrGet, event);
-
- /*timespec n1, n2;
+ if (AccountDirCheck == StringAccountIter->second){
- n1.tv_sec = 0;
- n1.tv_nsec = 250000000L;*/
+ AccountNameFriendly = PrefData.accounts.GetAccountName(i);
+ AccountID = i;
- while (*PauseMode == TRUE){
- //nanosleep(&n1, &n2);
- SleepFor(250000000);
- }
-
- delete PauseMode;
- PauseMode = NULL;
-
- //intResult = frmMainPtrGet->ShowConflictDialog(&Moo1, &Moo2);
-
- if (ConflictResult == 0){
-
- // Decide Later.
-
- iter->second = 4;
- continue;
-
- } else if (ConflictResult == 1){
-
- // Decided to use client version.
+ }
- CardDAVIter->second->ProcessData();
-
- iter->second = 4;
+ }
+
+ ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
+
+ ETag = StringETagIter->second;
+ ETagOriginal = StringETagOrigIter->second;
+ AccountDir = StringAccountIter->second;
+ ContactFilename = StringFilenameIter->second;
+ FullFilename = StringFullFilenameIter->second;
+ EditMode = ActivityListEditMode.find(iter->first)->second;
+
+ bool KeepUpdating = TRUE;
+
+ while(KeepUpdating == TRUE){
- } else if (ConflictResult == 2){
+ bool ExitLoop = FALSE;
- // Decided to use server version.
-
- // Download server version.
+ while (ExitLoop == FALSE){
- ConvertedV4Data.WriteFile(FullFilename);
+ // Verify that we have a trusted SSL connection first.
- iter->second = 4;
-
- }
-
- } else {
-
- // Update the data to the server.
+ int ErrorCode = ConnHandle.SSLVerifyTest();
+
+ if (ErrorCode != CURLE_OK){
+
+ if (ErrorCode == CURLE_SSL_CACERT ||
+ ErrorCode == CURLE_PEER_FAILED_VERIFICATION ||
+ ErrorCode == CURLE_SSL_CONNECT_ERROR){
+
+ // Invalid SSL certificate so bring up a dialog to the user
+ // explaining what has happened and the options available.
+
+ // Stop all the timers.
+
+ frmMainPtrGet->PauseAllTimers();
+
+ int SSLResult;
+
+#if defined(__APPLE__)
+
+ // Bring up the trust panel and display the SSL certificate dialog.
+
+ SSLResult = DisplayTrustPanel(ConnHandle.GetTrustObject(), AccountNameFriendly);
+
+ // Update the SSL account with the trust object.
+
+ if (SSLResult != NSOKButton){
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetTrustObject());
+ iter->second = 2;
+ break;
+
+ } else {
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+
+
+ }
+
+#elif defined(__WIN32__)
+
+ BOOL ModifiedCertificateData;
+ CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(&ConnHandle, (HWND)frmMainPtrGet->GetHandle());
+
+ if (!CryptUIDlgViewCertificate(&CertificateData, &ModifiedCertificateData)){
+ wxMessageBox(_("An error occured while trying to open the certificate dialog."), _("Error opening Certificate Information dialog"));
+ }
+
+ if (ModifiedCertificateData == FALSE){
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateContextPointer());
+ iter->second = 2;
+ break;
+
+ } else {
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+
+ }
+
+#else
+
+ // Setup the data to be sent in the wxPostEvent command.
+
+ SSLInvalidCertNotifObj SSLICNProcData;
+
+ SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults();
+
+ bool *PauseMode = new bool;
+ QRNotif qrn;
+
+ *PauseMode = TRUE;
+ qrn.QResponse = &SSLResult;
+ qrn.PausePtr = PauseMode;
+
+ SSLICNProcData.CertCollection = certcol;
+ SSLICNProcData.QRNotifData = &qrn;
+ SSLICNProcData.AccountName = AccountNameFriendly;
+
+ wxCommandEvent event(INVALIDSSLCERT);
+ event.SetClientData(&SSLICNProcData);
+ wxPostEvent(frmMainPtrGet, event);
+
+ /*timespec n1, n2;
+
+ // Fall asleep until we get an response.
+
+ n1.tv_sec = 0;
+ n1.tv_nsec = 250000000L;*/
+
+ while (*PauseMode == TRUE){
+ //nanosleep(&n1, &n2);
+ SleepFor(250000000);
+ }
+
+ // Process the response from the user.
+
+ if (SSLResult == 1){
+
+ // Accept the certificate. Write the certificate into the account
+ // directory (as server.crt) - will overwrite old certificate.
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData());
+ WriteServerCertificate(AccountDir, ConnHandle.GetCertificateData());
+
+ } else if (SSLResult == 2){
+
+ // Reject the certificate, abort the task and mark as failed.
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateData());
+ iter->second = 2;
+ break;
+
+ }
+
+#endif
+
+ // Resume all the timers.
+
+ frmMainPtrGet->ResumeAllTimers();
+ ExitLoop = TRUE;
+
+ } else {
+
+ iter->second = 2;
+ break;
+
+ }
+
+ } else {
+
+ ExitLoop = TRUE;
+
+ }
+
+ }
+
+ if (iter->second == 2 || iter->second == 3 || iter->second == 4){
+ break;
+ }
+
+#if defined(__APPLE__)
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+
+#elif defined(__WIN32__)
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+
+#else
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateData());
+
+#endif
- CardDAVIter->second->ProcessData();
+ ConnHandle.SetUploadMode(TRUE);
+ ConnHandle.SetupData(wxT("PUT"), StringURLIter->second, StringDataIter->second);
+ ConnHandle.SetEditMode(EditMode);
+ ConnHandle.ProcessData();
+
+ int ErrorCode = ConnHandle.GetResultCode();
+
+ if (ErrorCode != CURLE_OK){
+
+ iter->second = 4;
+ break;
+
+ }
+
+ // Add contact to the ETag DB.
+
+ ConnHandle.GetServerETagValueThread();
+ ETagServer = ConnHandle.ETagValueResult();
+ ETagDBPtr->AddETag(ContactFilename, ETagServer, ETagServer);
+
+ iter->second = 4;
+ break;
+
+ }
+ } else if (TypeIter->second == 1){
+
+ // Update a contact.
+
+ StringDataIter = ActivityListData.find(iter->first);
+ StringURLIter = ActivityListURL.find(iter->first);
+
+ AccountDir = StringAccountIter->second;
+ ContactFilename = StringFilenameIter->second;
+ wxString AccountNameFriendly;
+
+ int AccountID = 0;
+
+ for (int i = 0; i < PrefData.accounts.GetCount(); i++){
+
+ wxString AccountDirCheck = PrefData.accounts.GetAccountDirectory(i);
+
+ AccountDirCheck.Trim();
+ AccountDirCheck.Append(wxT(".carddav"));
+
+ if (AccountDirCheck == StringAccountIter->second){
+
+ AccountNameFriendly = PrefData.accounts.GetAccountName(i);
+ AccountID = i;
+
}
-
- } else {
-
- if (ETagOriginal != ETagServer){
+
+ }
- // Server ETag is different from original ETag.
- // This is a conflict which the user will now
- // need to resolve.
+ ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
+
+ ETag = StringETagIter->second;
+ ETagOriginal = StringETagOrigIter->second;
+ AccountDir = StringAccountIter->second;
+ ContactFilename = StringFilenameIter->second;
+ FullFilename = StringFullFilenameIter->second;
+ EditMode = ActivityListEditMode.find(iter->first)->second;
+
+ bool KeepUpdating = TRUE;
+
+ while(KeepUpdating == TRUE){
- frmMain *frmMainPtrGet = (frmMain *)frmMainPtr;
+ bool ExitLoop = FALSE;
- //ContactConflictEvent event(ContactConflictCmdEnv);
- //event.SetData(ContactFilename, Moo1, Moo2);
+ while (ExitLoop == FALSE){
+
+ int ErrorCode = ConnHandle.SSLVerifyTest();
+
+ if (ErrorCode != CURLE_OK){
+
+ if (ErrorCode == CURLE_SSL_CACERT ||
+ ErrorCode == CURLE_PEER_FAILED_VERIFICATION ||
+ ErrorCode == CURLE_SSL_CONNECT_ERROR){
+
+ // Invalid SSL certificate so bring up a dialog to the user
+ // explaining what has happened and the options available.
+
+ // Stop all the timers.
+
+ frmMainPtrGet->PauseAllTimers();
+
+ int SSLResult;
+
+#if defined(__APPLE__)
+
+ // Bring up the trust panel and display the SSL certificate dialog.
+
+ SSLResult = DisplayTrustPanel(ConnHandle.GetTrustObject(), AccountNameFriendly);
+
+ // Update the SSL account with the trust object.
+
+ if (SSLResult != NSOKButton){
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetTrustObject());
+ iter->second = 2;
+ break;
+
+ } else {
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+
+ }
+
+#elif defined(__WIN32__)
+
+ BOOL ModifiedCertificateData;
+ CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(&ConnHandle, (HWND)frmMainPtrGet->GetHandle());
+
+ if (!CryptUIDlgViewCertificate(&CertificateData, &ModifiedCertificateData)){
+ wxMessageBox(_("An error occured while trying to open the certificate dialog."), _("Error opening Certificate Information dialog"));
+ }
+
+ if (ModifiedCertificateData == FALSE){
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateContextPointer());
+ iter->second = 2;
+ break;
+
+ } else {
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+
+ }
+
+#else
+
+ // Setup the data to be sent in the wxPostEvent command.
+
+ SSLInvalidCertNotifObj SSLICNProcData;
+
+ SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults();
+
+ bool *PauseMode = new bool;
+ QRNotif qrn;
+
+ *PauseMode = TRUE;
+ qrn.QResponse = &SSLResult;
+ qrn.PausePtr = PauseMode;
+
+ SSLICNProcData.CertCollection = certcol;
+ SSLICNProcData.QRNotifData = &qrn;
+ SSLICNProcData.AccountName = AccountNameFriendly;
+
+ wxCommandEvent event(INVALIDSSLCERT);
+ event.SetClientData(&SSLICNProcData);
+ wxPostEvent(frmMainPtrGet, event);
+
+ while (*PauseMode == TRUE){
+ //nanosleep(&n1, &n2);
+ SleepFor(250000000);
+ }
+
+ // Process the response from the user.
+
+ if (SSLResult == 1){
+
+ // Accept the certificate. Write the certificate into the account
+ // directory (as server.crt) - will overwrite old certificate.
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults());
+ WriteServerCertificate(AccountDir, ConnHandle.GetSSLVerifyResults());
+
+ } else if (SSLResult == 2){
+
+ // Reject the certificate, abort the task and mark as failed.
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetSSLVerifyResults());
+ iter->second = 2;
+ break;
+
+ }
+
+#endif
+
+ // Resume all the timers.
+
+ frmMainPtrGet->ResumeAllTimers();
+ ExitLoop = TRUE;
+
+ } else {
+
+ iter->second = 2;
+ break;
+
+ }
+
+ } else {
+
+ ExitLoop = TRUE;
+
+ }
+
+ }
+
+ if (iter->second == 2 || iter->second == 3 || iter->second == 4){
+ break;
+ }
+
+#if defined(__APPLE__)
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+
+#elif defined(__WIN32__)
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+
+#else
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults());
+
+#endif
+
+ ConnHandle.SetUploadMode(TRUE);
+ ConnHandle.SetupData(wxT("PUT"), StringURLIter->second, StringDataIter->second);
+ ConnHandle.SetEditMode(EditMode);
+ ConnHandle.GetServerETagValueThread();
+ ETagServer = ConnHandle.ETagValueResult();
+
+ int ErrorCode = ConnHandle.GetResultCode();
+
+ if (ErrorCode != CURLE_OK){
+ iter->second = 2;
+ break;
+ }
+
+ // Compare the ETag with the Server ETag.
+ if (ETagOriginal != ETagServer){
+
+ // Server ETag is different from original ETag.
+ // This is a conflict which the user will now
+ // need to resolve.
+
+ vCard Moo1;
+ vCard Moo2;
+
+ frmMain *frmMainPtrGet = static_cast<frmMain*>(frmMainPtr);
+
vCard34Conv vCard34Obj;
wxString ServerContactData;
vCard ClientData;
vCard ConvertedV4Data;
-
+
// Load the client data from the filename given.
-
- CardDAVIter->second->GetServerContactData();
- ServerContactData = CardDAVIter->second->GetPageData();
- ClientData.LoadFile(FullFilename);
+
+ ConnHandle.GetServerContactData();
+ ServerContactData = ConnHandle.GetPageData();
// Process v3 version into v4 version.
vCard34Obj.ConvertToV4(&ServerContactData, &ConvertedV4Data);
-
+
vCardConflictObj vCardProcData;
-
+
vCardProcData.vCardLocalData = &ClientData;
vCardProcData.vCardServerData = &ConvertedV4Data;
-
+ ClientData.LoadFile(FullFilename);
+
+ //ContactConflictEvent event(ContactConflictCmdEnv);
+ //event.SetData(ContactFilename, Moo1, Moo2);
+
+ //wxPostEvent(frmMainPtrGet, event);
+
+ // Setup Conflict Resolution Dialog.
+
+ // Fetch Data from Server and convert.
+
bool *PauseMode = new bool;
int ConflictResult;
QRNotif qrn;
-
- *PauseMode = TRUE;
+
+ *PauseMode = TRUE;
qrn.QResponse = &ConflictResult;
qrn.PausePtr = PauseMode;
vCardProcData.QRNotifData = &qrn;
-
+
wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED);
event.SetClientData(&vCardProcData);
wxPostEvent(frmMainPtrGet, event);
-
- /*timespec n1, n2;
- n1.tv_sec = 0;
- n1.tv_nsec = 250000000L;*/
-
while (*PauseMode == TRUE){
//nanosleep(&n1, &n2);
SleepFor(250000000);
}
+
+ delete PauseMode;
+ PauseMode = NULL;
+
+ //intResult = frmMainPtrGet->ShowConflictDialog(&Moo1, &Moo2);
+
+ if (ConflictResult == 0){
+
+ // Decide Later.
+
+ iter->second = 4;
+ break;
+
+ } else if (ConflictResult == 1){
+
+ // Decided to use client version.
+
+ ConnHandle.ProcessData();
+
+ } else if (ConflictResult == 2){
+
+ // Decided to use server version.
+
+ // Download server version.
+
+ ConvertedV4Data.WriteFile(FullFilename);
+
+ }
+
+ } else {
+
+ // Update the data to the server.
+
+ ConnHandle.ProcessData();
+
+ }
- delete PauseMode;
- PauseMode = NULL;
-
- //intResult = frmMainPtrGet->ShowConflictDialog(&Moo1, &Moo2);
+ // Update the ETag DB.
- if (ConflictResult == 0){
+ ConnHandle.GetServerETagValueThread();
+ ETagServer = ConnHandle.ETagValueResult();
+ ETagDBPtr->UpdateETag(ContactFilename, ETagServer, ETagServer);
- // Decide Later.
+ iter->second = 4;
+ break;
- iter->second = 4;
- continue;
+ }
+
+ } else if (TypeIter->second == 2) {
+
+ // Delete the contact from the server and update the ETag DB.
+
+ AccountDir = StringAccountIter->second;
+ ContactFilename = StringFilenameIter->second;
+ wxString AccountNameFriendly;
+
+ int AccountID = 0;
+
+ for (int i = 0; i < PrefData.accounts.GetCount(); i++){
- } else if (ConflictResult == 1){
+ wxString AccountDirCheck = PrefData.accounts.GetAccountDirectory(i);
- // Decided to use client version.
+ AccountDirCheck.Trim();
+ AccountDirCheck.Append(wxT(".carddav"));
- CardDAVIter->second->ProcessData();
- //ETagServer = CardDAVIter->second.GetServerETagValueThread();
- //ETagDBPtr->UpdateETag(ContactFilename, ETagServer, ETagServer);
+ if (AccountDirCheck == StringAccountIter->second){
- iter->second = 4;
+ AccountNameFriendly = PrefData.accounts.GetAccountName(i);
+ AccountID = i;
+
+ }
- } else if (ConflictResult == 2){
+ }
+
+ ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
+
+ bool KeepUpdating = TRUE;
+
+ while(KeepUpdating == TRUE){
+
+ bool ExitLoop = FALSE;
- // Decided to use server version.
+ while (ExitLoop == FALSE){
+
+ int ErrorCode = ConnHandle.SSLVerifyTest();
+
+ if (ErrorCode != CURLE_OK){
+
+ if (ErrorCode == CURLE_SSL_CACERT ||
+ ErrorCode == CURLE_PEER_FAILED_VERIFICATION ||
+ ErrorCode == CURLE_SSL_CONNECT_ERROR){
+
+ // Invalid SSL certificate so bring up a dialog to the user
+ // explaining what has happened and the options available.
+
+ // Stop all the timers.
+
+ frmMainPtrGet->PauseAllTimers();
+
+ int SSLResult;
+
+#if defined(__APPLE__)
+
+ // Bring up the trust panel and display the SSL certificate dialog.
+
+ SSLResult = DisplayTrustPanel(ConnHandle.GetTrustObject(), AccountNameFriendly);
+
+ // Update the SSL account with the trust object.
+
+ if (SSLResult != NSOKButton){
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetTrustObject());
+ iter->second = 2;
+ break;
+
+ } else {
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+
+ }
+
+#elif defined(__WIN32__)
+
+ BOOL ModifiedCertificateData;
+ CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(&ConnHandle, (HWND)frmMainPtrGet->GetHandle());
+
+ if (!CryptUIDlgViewCertificate(&CertificateData, &ModifiedCertificateData)){
+ wxMessageBox(_("An error occured while trying to open the certificate dialog."), _("Error opening Certificate Information dialog"));
+ }
+
+ if (ModifiedCertificateData == FALSE){
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateContextPointer());
+ iter->second = 2;
+ break;
+
+ } else {
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+
+ }
+
+#else
+
+ // Setup the data to be sent in the wxPostEvent command.
+
+ SSLInvalidCertNotifObj SSLICNProcData;
+
+ SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults();
+
+ bool *PauseMode = new bool;
+ QRNotif qrn;
+
+ *PauseMode = TRUE;
+ qrn.QResponse = &SSLResult;
+ qrn.PausePtr = PauseMode;
+
+ SSLICNProcData.CertCollection = certcol;
+ SSLICNProcData.QRNotifData = &qrn;
+ SSLICNProcData.AccountName = AccountNameFriendly;
+
+ wxCommandEvent event(INVALIDSSLCERT);
+ event.SetClientData(&SSLICNProcData);
+ wxPostEvent(frmMainPtrGet, event);
+
+ /*timespec n1, n2;
+
+ // Fall asleep until we get an response.
+
+ n1.tv_sec = 0;
+ n1.tv_nsec = 250000000L;*/
+
+ while (*PauseMode == TRUE){
+ //nanosleep(&n1, &n2);
+ SleepFor(250000000);
+ }
+
+ // Process the response from the user.
+
+ if (SSLResult == 1){
+
+ // Accept the certificate. Write the certificate into the account
+ // directory (as server.crt) - will overwrite old certificate.
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults());
+ WriteServerCertificate(AccountDir, ConnHandle.GetSSLVerifyResults());
+
+ } else if (SSLResult == 2){
+
+ // Reject the certificate, abort the task and mark as failed.
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetSSLVerifyResults());
+ iter->second = 2;
+ break;
+
+ }
+
+#endif
+
+ // Resume all the timers.
+
+ frmMainPtrGet->ResumeAllTimers();
+ ExitLoop = TRUE;
+
+ } else {
+
+ iter->second = 4;
+ break;
+
+ }
- // Write server version to file.
+ } else {
- ConvertedV4Data.WriteFile(FullFilename);
+ ExitLoop = TRUE;
- iter->second = 4;
-
}
-
- } else {
-
- // Update the data to the server.
- CardDAVIter->second->ProcessData();
+ }
+ if (iter->second == 2 || iter->second == 3 || iter->second == 4){
+ break;
}
- }
+#if defined(__APPLE__)
- // Update the ETag DB.
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+
+#elif defined(__WIN32__)
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+
+#else
- CardDAVIter->second->GetServerETagValueThread();
- ETagServer = CardDAVIter->second->ETagValueResult();
- ETagDBPtr->UpdateETag(ContactFilename, ETagServer, ETagServer);
-
- iter->second = 4;
- CardDAVIter->second = NULL;
-
- } else if (TypeIter->second == 2) {
-
- // Delete the contact from the server and update the ETag DB.
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults());
- AccountDir = StringAccountIter->second;
- ContactFilename = StringFilenameIter->second;
-
- ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
+#endif
+
+ ConnHandle.SetUploadMode(FALSE);
+ ConnHandle.SetupData(wxT("DELETE"), ContactFilename, wxT(""));
+ ConnHandle.ProcessData();
+
+ SSLCertCollection certcol = ConnHandle.GetCertificateData();
+
+ // Check if any errors have occured whilst getting the data.
+
+ int ErrorCode = ConnHandle.GetResultCode();
+
+ if (ErrorCode != CURLE_OK){
+ iter->second = 2;
+ break;
+ }
- CardDAVIter->second->SetUploadMode(FALSE);
- CardDAVIter->second->SetupData(wxT("DELETE"), ContactFilename, wxT(""));
- //CardDAVIter->second.SetServerFilename();
- CardDAVIter->second->ProcessData();
- ETagDBPtr->RemoveETag(ContactFilename);
+ ETagDBPtr->RemoveETag(ContactFilename);
- iter->second = 4;
- CardDAVIter->second = NULL;
+ iter->second = 4;
+ CardDAVIter->second = NULL;
+ break;
+
+ }
} else if (TypeIter->second == 3) {
-
- frmMain *frmMainPtrGet = static_cast<frmMain*>(frmMainPtr);
wxString AccountNameFriendly;
- wxString PrefFilename = GetUserPrefDir();
- XABPreferences PrefData(PrefFilename);
int AccountID = 0;
for (int i = 0; i < PrefData.accounts.GetCount(); i++){
std::map<wxString,FileSyncData> *SCListData = NULL;
while (ExitLoop == FALSE){
-
- ServerContactList = CardDAVIter->second->GetContactList(SyncTokenLoad.ToUTF8());
- SSLCertCollection certcol = CardDAVIter->second->GetCertificateData();
-
- // Create a pointer for the std::map<wxString,FileSyncData>.
-
- SCListData = &ServerContactList.ListData;
// Check if any errors have occured whilst getting the data.
- int ErrorCode = CardDAVIter->second->GetResultCode();
+ int ErrorCode = ConnHandle.SSLVerifyTest();
- if (ErrorCode != 0){
+ if (ErrorCode != CURLE_OK){
- if (ErrorCode == 60 || ErrorCode == 51){
+ if (ErrorCode == CURLE_SSL_CACERT ||
+ ErrorCode == CURLE_PEER_FAILED_VERIFICATION ||
+ ErrorCode == CURLE_SSL_CONNECT_ERROR){
// Invalid SSL certificate so bring up a dialog to the user
// explaining what has happened and the options available.
frmMainPtrGet->PauseAllTimers();
+ int SSLResult;
+
+#if defined(__APPLE__)
+
+ // Bring up the trust panel and display the SSL certificate dialog.
+
+ SSLResult = DisplayTrustPanel(ConnHandle.GetTrustObject(), AccountNameFriendly);
+
+ // Update the SSL account with the trust object.
+
+ if (SSLResult != NSOKButton){
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetTrustObject());
+ iter->second = 2;
+ break;
+
+ } else {
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+
+ }
+
+#elif defined(__WIN32__)
+
+ BOOL ModifiedCertificateData;
+ CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(&ConnHandle, (HWND)frmMainPtrGet->GetHandle());
+
+ if (!CryptUIDlgViewCertificate(&CertificateData, &ModifiedCertificateData)){
+ wxMessageBox(_("An error occured while trying to open the certificate dialog."), _("Error opening Certificate Information dialog"));
+ }
+
+ if (ModifiedCertificateData == FALSE){
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetCertificateContextPointer());
+ iter->second = 2;
+ break;
+
+ } else {
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+
+ }
+#else
+
// Setup the data to be sent in the wxPostEvent command.
SSLInvalidCertNotifObj SSLICNProcData;
+ SSLCertCollection certcol = ConnHandle.GetSSLVerifyResults();
+
bool *PauseMode = new bool;
- int SSLResult;
QRNotif qrn;
*PauseMode = TRUE;
// Accept the certificate. Write the certificate into the account
// directory (as server.crt) - will overwrite old certificate.
- frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, CardDAVIter->second->GetCertificateData());
- WriteServerCertificate(AccountDir, CardDAVIter->second->GetCertificateData());
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults());
+ WriteServerCertificate(AccountDir, ConnHandle.GetSSLVerifyResults());
} else if (SSLResult == 2){
// Reject the certificate, abort the task and mark as failed.
- frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, CardDAVIter->second->GetCertificateData());
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetSSLVerifyResults());
iter->second = 2;
break;
}
+
+#endif
// Resume all the timers.
frmMainPtrGet->ResumeAllTimers();
+ ExitLoop = TRUE;
} else {
break;
}
- frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, CardDAVIter->second->GetCertificateData());
-
+#if defined(__APPLE__)
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+
+#elif defined(__WIN32__)
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+
+#else
+
+ frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults());
+
+#endif
+
// Look in directory and see which vCards to add and delete
// In short:
bool ContinueProcess = AccDir.GetFirst(&AccDirFilename, wxEmptyString, wxDIR_DEFAULT);
+ ServerContactList = ConnHandle.GetContactList(SyncTokenLoad.ToUTF8());
+
+ int ErrorCode = ConnHandle.GetResultCode();
+
+ if (ErrorCode != CURLE_OK){
+
+ iter->second = 4;
+ break;
+
+ }
+
+ SSLCertCollection certcol = ConnHandle.GetCertificateData();
+
+ // Create a pointer for the std::map<wxString,FileSyncData>.
+
+ SCListData = &ServerContactList.ListData;
+
// Process the server data.
if (SCListData != NULL){
wxString ETagSrv = fsd.ETagData;
+ // Check if the local ETag value has 'DELETED' set and skip
+ // checking this file if it does.
+
+ if (etd.ETagValue == "DELETED"){
+
+ continue;
+
+ }
+
// Compare local ETag with original local ETag.
// If different, update to server is required.
// Get the server contact data for comparison.
- CardDAVIter->second->SetServerFilename(srviter->first);
- CardDAVIter->second->GetServerContactData();
- ServerContactData = CardDAVIter->second->GetPageData();
+ ConnHandle.SetServerFilename(srviter->first);
+ ConnHandle.GetServerContactData();
+ ServerContactData = ConnHandle.GetPageData();
FullFilename = CreateFilenamePath(AccountDirFinal, srviter->first);
vCard34Conv vCard34Obj;
- CardDAVIter->second->SetServerFilename(additer->first);
- CardDAVIter->second->GetServerContactData();
- vCardInputData = CardDAVIter->second->GetPageData();
+ ConnHandle.SetServerFilename(additer->first);
+ ConnHandle.GetServerContactData();
+ vCardInputData = ConnHandle.GetPageData();
vCard34Obj.ConvertToV4(&vCardInputData, &ConvertedV4Data);
// Get the server ETag.
wxString ServerETag;
- CardDAVIter->second->GetServerETagValueThread();
- ServerETag = CardDAVIter->second->ETagValueResult();
+ ConnHandle.GetServerETagValueThread();
+ ServerETag = ConnHandle.ETagValueResult();
// Add to the ETag Database.
// Update the ETagDB.
wxString ServerETag;
- CardDAVIter->second->GetServerETagValueThread();
- ServerETag = CardDAVIter->second->ETagValueResult();
+ ConnHandle.GetServerETagValueThread();
+ ServerETag = ConnHandle.ETagValueResult();
// Add to the ETag Database.
// Compare the ETag with the Server ETag.
- CardDAVIter->second->SetServerFilename(vCardAdd[vi]);
- CardDAVIter->second->GetServerETagValueThread();
- ETagServer = CardDAVIter->second->ETagValueResult();
+ ConnHandle.SetServerFilename(vCardAdd[vi]);
+ ConnHandle.GetServerETagValueThread();
+ ETagServer = ConnHandle.ETagValueResult();
if (ETagOriginal != ETagServer){
// Load the client data from the filename given.
- CardDAVIter->second->GetServerContactData();
- ServerContactData = CardDAVIter->second->GetPageData();
+ ConnHandle.GetServerContactData();
+ ServerContactData = ConnHandle.GetPageData();
// Process v3 version into v4 version.
// Decided to use client version.
- CardDAVIter->second->ProcessData();
+ ConnHandle.ProcessData();
iter->second = 4;
// Upload the data to the server.
- CardDAVIter->second->SetUploadMode(TRUE);
- CardDAVIter->second->SetupData(wxT("PUT"), vCardAdd[vi], TaskData);
- CardDAVIter->second->ProcessData();
+ ConnHandle.SetUploadMode(TRUE);
+ ConnHandle.SetupData(wxT("PUT"), vCardAdd[vi], TaskData);
+ ConnHandle.ProcessData();
// Get the Server ETag and put it in the ETag database.
- CardDAVIter->second->SetServerFilename(vCardAdd[vi]);
- CardDAVIter->second->GetServerETagValueThread();
- ETagServer = CardDAVIter->second->ETagValueResult();
+ ConnHandle.SetServerFilename(vCardAdd[vi]);
+ ConnHandle.GetServerETagValueThread();
+ ETagServer = ConnHandle.ETagValueResult();
ETagDBPtr->AddETag(vCardAdd[vi], ETagServer, ETagServer);
// Load the client data from the filename given.
- CardDAVIter->second->GetServerContactData();
- ServerContactData = CardDAVIter->second->GetPageData();
+ ConnHandle.GetServerContactData();
+ ServerContactData = ConnHandle.GetPageData();
ClientData.LoadFile(FullFilename);
// Process v3 version into v4 version.
// Decided to use client version.
- CardDAVIter->second->ProcessData();
+ ConnHandle.ProcessData();
//ETagServer = CardDAVIter->second.GetServerETagValueThread();
//ETagDBPtr->UpdateETag(ContactFilename, ETagServer, ETagServer);
// Upload the data to the server.
- CardDAVIter->second->SetUploadMode(TRUE);
- CardDAVIter->second->SetupData(wxT("PUT"), vCardAdd[vi], TaskData);
- CardDAVIter->second->ProcessData();
+ ConnHandle.SetUploadMode(TRUE);
+ ConnHandle.SetupData(wxT("PUT"), vCardAdd[vi], TaskData);
+ ConnHandle.ProcessData();
// Get the Server ETag and put it in the ETag database.
- CardDAVIter->second->SetServerFilename(vCardAdd[vi]);
- CardDAVIter->second->GetServerETagValueThread();
- ETagServer = CardDAVIter->second->ETagValueResult();
+ ConnHandle.SetServerFilename(vCardAdd[vi]);
+ ConnHandle.GetServerETagValueThread();
+ ETagServer = ConnHandle.ETagValueResult();
ETagDBPtr->AddETag(vCardAdd[vi], ETagServer, ETagServer);
// Process the vCards to delete from the server.
std::map<wxString,wxString> *ETagFilenameMap = ETagDBPtr->GetFilenamePointer();
-
+ std::list<wxString> DeleteList;
for (std::map<wxString,wxString>::iterator deliter = ETagFilenameMap->begin();
deliter != ETagFilenameMap->end(); deliter++){
if (deliter->second == wxT("DELETED")){
- CardDAVIter->second->SetUploadMode(FALSE);
- CardDAVIter->second->SetupData(wxT("DELETE"), deliter->first, wxT(""));
- CardDAVIter->second->ProcessData();
+ ConnHandle.SetUploadMode(FALSE);
+ ConnHandle.SetupData(wxT("DELETE"), deliter->first, wxT(""));
+ ConnHandle.ProcessDataThread();
// Delete the ETag as the file has now been deleted.
- ETagDBPtr->RemoveETag(deliter->first);
+ DeleteList.push_back(deliter->first);
}
}
+
+ for (std::list<wxString>::iterator removeetagiter = DeleteList.begin();
+ removeetagiter != DeleteList.end(); removeetagiter++){
+
+ ETagDBPtr->RemoveETag(*removeetagiter);
+
+ }
// Write out the update server sync token.
// Update the data to the server.
- CardDAVIter->second->ProcessData();
+ ConnHandle.ProcessData();
iter->second = 4;
continue;
AccountDir = StringAccountIter->second;
ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
- CardDAVIter->second->GetServerETagValueThread();
- ETagServer = CardDAVIter->second->ETagValueResult();
+ ConnHandle.GetServerETagValueThread();
+ ETagServer = ConnHandle.ETagValueResult();
ETagDBPtr->UpdateETag(ContactFilename, ETagServer, ETagServer);
}
AccountDir = StringAccountIter->second;
ETagDB *ETagDBPtr = ETagTmrPtr->GetPointer(AccountDir);
- CardDAVIter->second->GetServerETagValueThread();
- ETagServer = CardDAVIter->second->ETagValueResult();
+ ConnHandle.GetServerETagValueThread();
+ ETagServer = ConnHandle.ETagValueResult();
ETagDBPtr->UpdateETag(ContactFilename, ETagServer, ETagServer);
}
//ActListProcTimer.Start();
}
-
+
wxCommandEvent event(ACTMGR_STARTPROCESSTIMER);
wxPostEvent(this, event);
void frmActivityMgr::ProcessTasks()
{
-
+
std::thread ProcessThread(&frmActivityMgr::ProcessTasksThread, this);
ProcessThread.detach();
}
-int frmActivityMgr::GetTaskStatus(int intTaskID){
-
- int intResult = 2;
-
- if (ActivityList.find(intTaskID) == ActivityList.end()){
-
- return intResult;
-
- }
-
- std::map<int,int>::iterator taskiter = ActivityList.find(intTaskID);
- intResult = taskiter->second;
-
- return intResult;
-
-}
-
void frmActivityMgr::ToggleConnectionStatus( wxCommandEvent &event ){
wxCommandEvent connevent(CONNSTAT_UPDATE);
- if (SleepMode == FALSE){
+ if (ApplicationSleepMode == FALSE){
connevent.SetInt(1);
- SleepMode = TRUE;
+ ApplicationSleepMode = TRUE;
+ mnuSleepMode->Check(true);
} else {
connevent.SetInt(0);
- SleepMode = FALSE;
+ ApplicationSleepMode = FALSE;
+ mnuSleepMode->Check(false);
+
+ wxCommandEvent event(ACTMGR_STARTTIMER);
+ wxPostEvent(this, event);
+
+ wxCommandEvent eventp(ACTMGR_STARTPROCESSTIMER);
+ wxPostEvent(this, eventp);
}
}
+void frmActivityMgr::SleepMode( wxCommandEvent &event ){
+
+ wxCommandEvent connevent(ACTMGR_TOGGLECONN);
+
+ wxPostEvent(this, connevent);
+
+}
+
void frmActivityMgr::WriteServerCertificate(wxString AccountName, SSLCertCollection SSLCertInc){
wxString ServerCertFinal;
}
+void frmActivityMgr::StartAnimationTimer(wxCommandEvent& event){
+
+ AnimationTimer.StartAnimation();
+
+}
+
void frmActivityMgr::UpdateStatusLabel(wxCommandEvent& event){
ActivityMgrLabelUpdate *actmgrudata = (ActivityMgrLabelUpdate*)event.GetClientData();
}
-}
-
-#endif
\ No newline at end of file
+}
\ No newline at end of file