Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
Implemented code to delete contact via ConnectionObject
[xestiaab/.git] / source / actmgr / frmActivityMgr.cpp
index ebb425c..e60ce73 100644 (file)
@@ -38,9 +38,6 @@
 #include "../vcard/vcard34conv.h"
 #include "../vcard/vcard.h"
 
-#ifndef FRMACTIVITYMGR_H
-#define FRMACTIVITYMGR_H
-
 DEFINE_EVENT_TYPE(ACTMGR_RESUMEPROC);
 DEFINE_EVENT_TYPE(ACTMGR_TOGGLECONN);
 DEFINE_EVENT_TYPE(ACTMGR_STARTTIMER);
@@ -48,6 +45,7 @@ DEFINE_EVENT_TYPE(ACTMGR_STOPTIMER);
 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)
@@ -57,6 +55,7 @@ BEGIN_EVENT_TABLE(frmActivityMgr, wxWindow)
   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 )
@@ -197,6 +196,12 @@ void frmActivityMgr::ProcessTasksThread()
        
        }
        
+       if (ApplicationSleepMode == TRUE){
+               
+               return;
+               
+       }
+       
        std::map<int,int>::iterator TypeIter;
        std::map<int,wxString>::iterator StringIter;
        std::map<int,wxString>::iterator StringDataIter;
@@ -209,6 +214,7 @@ void frmActivityMgr::ProcessTasksThread()
        std::map<int,wxString>::iterator StringETagIter;
        std::map<int,wxString>::iterator StringETagOrigIter;
        std::map<int,CardDAV*>::iterator CardDAVIter;
+       std::map<int,ConnectionObject*>::iterator ConnObjectIter;
        std::map<int,ActivityMgrAccountSettings>::iterator AccountSettingsIter;
        std::map<int,long>::iterator LongIter;
        bool TasksFoundProc = FALSE;
@@ -223,7 +229,14 @@ void frmActivityMgr::ProcessTasksThread()
                        continue;
                }
                
+               wxCommandEvent StartAnimationEvent(ACTMGR_STARTANIMATIONTIMER);
+               
+               wxPostEvent(this, StartAnimationEvent);
+               
+               // Start the animation timer if it hasn't started.
+               
                CardDAVIter = ActivityListConn.find(iter->first);
+               ConnObjectIter = ActivityListConnObject.find(iter->first);
                TypeIter = ActivityListType.find(iter->first);
                StringETagIter = ActivityListETag.find(iter->first);
                StringETagOrigIter = ActivityListETagOriginal.find(iter->first);
@@ -318,24 +331,158 @@ void frmActivityMgr::ProcessTasksThread()
                                FullFilename = StringFullFilenameIter->second;
                                EditMode = ActivityListEditMode.find(iter->first)->second;
                                
-                               bool KeepUpdating = TRUE;
+                               bool KeepUpdating = true;
                                
-                               while(KeepUpdating == TRUE){
+                               while(KeepUpdating == true){
                                        
-                                       bool ExitLoop = FALSE;
+                                       COConnectResult ConnectResponse = ConnObjectIter->second->Connect(false);
                                        
-                                       while (ExitLoop == FALSE){
+                                       bool ExitLoop = false;
+                                       
+                                       while (ExitLoop == false){
                                                
-                                               ConnHandle.SetUploadMode(TRUE);
-                                               ConnHandle.SetupData(wxT("PUT"), StringURLIter->second, StringDataIter->second);
-                                               ConnHandle.SetEditMode(EditMode);
-                                               ConnHandle.ProcessData();
+                                               if (ConnObjectIter->second->SSLVerify() == COSSL_UNABLETOVERIFY){
+                                                       
+                                                       frmMainPtrGet->PauseAllTimers();
+                                                       
+#if defined(__APPLE__)
+#elif defined(__WIN32__)
+#else
+       
+                                                       bool UsingSSLBypass = false;
+                                                       int SSLResult = 0;
+                                                       
+                                                       // Connect again and fetch SSL certificate information.
+               
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+               
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+
+                                                       SSLInvalidCertNotifObjString SSLICNProcData;
+                                                       
+                                                       SSLCertCollectionString certcol = ConnObjectIter->second->BuildSSLCollection();
+                                                               
+                                                       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(INVALIDSSLCERTSTRING);
+                                                       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.
+
+                                                               UsingSSLBypass = true;
+                                                               ConnObjectIter->second->BypassSSLVerification(true);
+               
+                                                               COConnectResult TestConnectionResult = ConnObjectIter->second->Connect(true);
+                                                               WriteServerCertificate(AccountDir, certcol);
+                                                               
+                                                               ConnObjectIter->second->BypassSSLVerification(false);
+                                                               
+                                                       } else if (SSLResult == 2){
                                                
-                                               int ErrorCode = ConnHandle.GetResultCode();
+                                                               // Reject the certificate, abort the task and mark as failed.
+
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       }
+               
+#endif
+                                                       
+                                                       frmMainPtrGet->ResumeAllTimers();
+                                                       ExitLoop = true;
+                                                       
+                                               } else if (ConnectResponse == COCONNECT_AUTHFAIL){
+                                                       
+                                                       ConnectResponse = ConnObjectIter->second->Connect(true);
+                                                       
+                                                       if (ConnectResponse == COCONNECT_OK){
+                                                               
+                                                               ExitLoop = true;
+                                                               break;
+                                                               
+                                                       } else {
+                                                               
+                                                               ExitLoop = true;                                                        
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       }
+                                                       
+                                               } else if (ConnectResponse == COCONNECT_OK){
+                                                       
+                                                       ConnectResponse = ConnObjectIter->second->Connect(true);
+                                                       
+                                                       ExitLoop = true;
+                                                       break;
+                                                       
+                                               } else {
+                                                       
+                                                       ExitLoop = true;                                                        
+                                                       iter->second = 2;
+                                                       break;
+                                                       
+                                               }
+                                               
+                                       }
+                                       
+                                       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
+                                       
+                                       COServerResponse AddContactResponse = ConnObjectIter->second->AddContact(StringURLIter->second.ToStdString(), 
+                                                       StringDataIter->second.ToStdString());
+                                       
+                                       if (AddContactResponse.RequestResult != COREQUEST_OK){
+                                               iter->second = 2;
+                                               break;
+                                       }
+                                       
+                                       /*while (ExitLoop == FALSE){
+                                               
+                                               // Verify that we have a trusted SSL connection first.
                                                
-                                               if (ErrorCode != 0){
+                                               int ErrorCode = ConnHandle.SSLVerifyTest();
+
+                                               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.
@@ -364,13 +511,38 @@ void frmActivityMgr::ProcessTasksThread()
                                                                        
                                                                        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;
                                                                
@@ -386,13 +558,6 @@ void frmActivityMgr::ProcessTasksThread()
                                                                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);
@@ -447,21 +612,50 @@ void frmActivityMgr::ProcessTasksThread()
 #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
                                        
+                                       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);
+                                       ETagServer = ConnHandle.ETagValueResult();*/                                    
+                                       
+                                       // TODO: Get the entity tag for the new contact.
+                                       
+                                       COServerResponse ETagGetResponse = ConnObjectIter->second->GetServerEntityTagValue(StringURLIter->second.ToStdString());
+                                       
+                                       if (ETagGetResponse.RequestResult != COREQUEST_OK){
+                                               iter->second = 2;
+                                               break;
+                                       }
+                                       
+                                       std::cout << ETagGetResponse.EntityTag << std::endl;
+                                       
+                                       ETagDBPtr->UpdateETag(ContactFilename, ETagGetResponse.EntityTag, ETagGetResponse.EntityTag);
                                        
                                        iter->second = 4;
-                                       CardDAVIter->second = NULL;
                                        break;
                                        
                                }
@@ -504,25 +698,245 @@ void frmActivityMgr::ProcessTasksThread()
                                FullFilename = StringFullFilenameIter->second;
                                EditMode = ActivityListEditMode.find(iter->first)->second;
                                
-                               bool KeepUpdating = TRUE;
+                               bool KeepUpdating = true;
                                
-                               while(KeepUpdating == TRUE){
+                               while(KeepUpdating == true){
                                        
-                                       bool ExitLoop = FALSE;
+                                       COConnectResult ConnectResponse = ConnObjectIter->second->Connect(false);
                                        
-                                       while (ExitLoop == FALSE){
+                                       bool ExitLoop = false;
+                                       
+                                       while(ExitLoop == false){
                                                
-                                               ConnHandle.SetUploadMode(TRUE);
-                                               ConnHandle.SetupData(wxT("PUT"), StringURLIter->second, StringDataIter->second);
-                                               ConnHandle.SetEditMode(EditMode);
-                                               ConnHandle.GetServerETagValueThread();
-                                               ETagServer = ConnHandle.ETagValueResult();
+                                               if (ConnObjectIter->second->SSLVerify() == COSSL_UNABLETOVERIFY){
+                                                       
+                                                       frmMainPtrGet->PauseAllTimers();
+                                                       
+#if defined(__APPLE__)
+#elif defined(__WIN32__)
+#else
+       
+                                                       bool UsingSSLBypass = false;
+                                                       int SSLResult = 0;
+                                                       
+                                                       // Connect again and fetch SSL certificate information.
+               
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+               
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+
+                                                       SSLInvalidCertNotifObjString SSLICNProcData;
+                                                       
+                                                       SSLCertCollectionString certcol = ConnObjectIter->second->BuildSSLCollection();
+                                                               
+                                                       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(INVALIDSSLCERTSTRING);
+                                                       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.
+
+                                                               UsingSSLBypass = true;
+                                                               ConnObjectIter->second->BypassSSLVerification(true);
+               
+                                                               COConnectResult TestConnectionResult = ConnObjectIter->second->Connect(true);
+                                                               WriteServerCertificate(AccountDir, certcol);
+                                                               
+                                                               ConnObjectIter->second->BypassSSLVerification(false);
+                                                               
+                                                       } else if (SSLResult == 2){
                                                
-                                               int ErrorCode = ConnHandle.GetResultCode();
+                                                               // Reject the certificate, abort the task and mark as failed.
+
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       }
+               
+#endif
+                                                       
+                                                       frmMainPtrGet->ResumeAllTimers();
+                                                       ExitLoop = true;
+                                                       
+                                               } else if (ConnectResponse == COCONNECT_AUTHFAIL){
+                                                       
+                                                       ConnectResponse = ConnObjectIter->second->Connect(true);
+                                                       
+                                                       if (ConnectResponse == COCONNECT_OK){
+                                                               
+                                                               ExitLoop = true;
+                                                               break;
+                                                               
+                                                       } else {
+                                                               
+                                                               ExitLoop = true;                                                        
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       }
+                                                       
+                                               } else if (ConnectResponse == COCONNECT_OK){
+                                                       
+                                                       ConnectResponse = ConnObjectIter->second->Connect(true);
+                                                       
+                                                       ExitLoop = true;
+                                                       break;
+                                                       
+                                               } else {
+                                                       
+                                                       ExitLoop = true;                                                        
+                                                       iter->second = 2;
+                                                       break;
+                                                       
+                                               }
+                                               
+                                       }
+                                       
+                                       if (iter->second == 2 || iter->second == 3 || iter->second == 4){
+                                               break;
+                                       }
+                                       
+                                       COServerResponse ETagGetResponse = ConnObjectIter->second->GetServerEntityTagValue(StringURLIter->second.ToStdString());
+                                       
+                                       if (ETagGetResponse.RequestResult != COREQUEST_OK){
+                                               iter->second = 2;
+                                               break;
+                                       }
+                                       
+                                       ETagServer = ETagGetResponse.EntityTag;
+                                       
+                                       // 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.
+                                               
+                                               frmMain *frmMainPtrGet = static_cast<frmMain*>(frmMainPtr);
+                                               
+                                               vCard34Conv vCard34Obj;
+                                               
+                                               std::string ServerContactData;
+                                               wxString wxStringServerContactData;
+                                               vCard ClientData;
+                                               vCard ConvertedV4Data;
+                                               
+                                               // Load the client data from the filename given.
+                                               
+                                               //ConnHandle.GetServerContactData();
+                                               //ServerContactData = ConnHandle.GetPageData();
+                                               
+                                               COServerResponse GetContactResponse = ConnObjectIter->second->GetContact(StringURLIter->second.ToStdString(),
+                                                       &ServerContactData);
+                                               
+                                               if (GetContactResponse.RequestResult != COREQUEST_OK){
+                                                       iter->second = 2;
+                                                       break;
+                                               }
+                                               
+                                               wxStringServerContactData = wxString::FromUTF8((const char*)ServerContactData.c_str());
+                                               
+                                               // Process v3 version into v4 version.
+                                               
+                                               vCard34Obj.ConvertToV4(&wxStringServerContactData, &ConvertedV4Data);
+                                               
+                                               vCardConflictObj vCardProcData;
+                                               
+                                               vCardProcData.vCardLocalData = &ClientData;
+                                               vCardProcData.vCardServerData = &ConvertedV4Data;
+                                               ClientData.LoadFile(FullFilename);
+                                               
+                                               // Setup Conflict Resolution Dialog.
+                                               
+                                               // Fetch Data from Server and convert.
+                                               
+                                               bool *PauseMode = new bool;
+                                               int ConflictResult;
+                                               QRNotif qrn;
+                                               
+                                               *PauseMode = TRUE;
+                                               qrn.QResponse = &ConflictResult;
+                                               qrn.PausePtr = PauseMode;
+                                               
+                                               vCardProcData.QRNotifData = &qrn;
                                                
-                                               if (ErrorCode != 0){
+                                               wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED);
+                                               event.SetClientData(&vCardProcData);
+                                               wxPostEvent(frmMainPtrGet, event);
+                                               
+                                               while (*PauseMode == TRUE){
+                                                       SleepFor(250000000);
+                                               }
+                                               
+                                               delete PauseMode;
+                                               PauseMode = NULL;
+                                               
+                                               if (ConflictResult == 0){
+                                                       
+                                                       // Decide Later.
+                                                       
+                                                       iter->second = 4;
+                                                       break;
+                                                       
+                                               } else if (ConflictResult == 1){
+                                                       
+                                                       // Decided to use client version.
+                                                       
+                                               } else if (ConflictResult == 2){
+                                                       
+                                                       // Decided to use server version.
+                                                       
+                                                       // Download server version.
+                                                       
+                                                       ConvertedV4Data.WriteFile(FullFilename);
+                                                       
+                                               }
+                                               
+                                       } else {
+                                               
+                                               // Upload the data to the server.
+                                               
+                                               COServerResponse EditContactResponse = ConnObjectIter->second->EditContact(StringURLIter->second.ToStdString(), 
+                                                       StringDataIter->second.ToStdString());
+                                       
+                                               if (EditContactResponse.RequestResult != COREQUEST_OK){
+                                                       iter->second = 2;
+                                                       break;
+                                               }
+                                               
+                                       }
+                                       
+                                       /*while (ExitLoop == FALSE){
+                                                
+                                               int ErrorCode = ConnHandle.SSLVerifyTest();
+                                               
+                                               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.
@@ -552,12 +966,36 @@ void frmActivityMgr::ProcessTasksThread()
                                                                        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;
                                                                
@@ -585,14 +1023,14 @@ void frmActivityMgr::ProcessTasksThread()
                                                                        // 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());
+                                                                       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.GetCertificateData());
+                                                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetSSLVerifyResults());
                                                                        iter->second = 2;
                                                                        break;
                                                                        
@@ -627,13 +1065,30 @@ void frmActivityMgr::ProcessTasksThread()
 #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());
+                                       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){
@@ -712,7 +1167,7 @@ void frmActivityMgr::ProcessTasksThread()
                                                        
                                                        // Decided to use client version.
                                                        
-                                                       ConnHandle.ProcessData();
+                                                       //ConnHandle.ProcessData();
                                                        
                                                } else if (ConflictResult == 2){
                                                        
@@ -730,13 +1185,21 @@ void frmActivityMgr::ProcessTasksThread()
                                                
                                                ConnHandle.ProcessData();
                                                
-                                       }
+                                       }*/
                                        
                                        // Update the ETag DB.
                                        
-                                       ConnHandle.GetServerETagValueThread();
-                                       ETagServer = ConnHandle.ETagValueResult();
-                                       ETagDBPtr->UpdateETag(ContactFilename, ETagServer, ETagServer);
+                                       //ConnHandle.GetServerETagValueThread();
+                                       //ETagServer = ConnHandle.ETagValueResult();
+                                       
+                                       ETagGetResponse = ConnObjectIter->second->GetServerEntityTagValue(StringURLIter->second.ToStdString());
+                                       
+                                       if (ETagGetResponse.RequestResult != COREQUEST_OK){
+                                               iter->second = 2;
+                                               break;
+                                       }
+                                       
+                                       ETagDBPtr->UpdateETag(ContactFilename, ETagGetResponse.EntityTag, ETagGetResponse.EntityTag);
                                        
                                        iter->second = 4;
                                        break;
@@ -775,22 +1238,122 @@ void frmActivityMgr::ProcessTasksThread()
                                
                                while(KeepUpdating == TRUE){
                                
+                                       COConnectResult ConnectResponse = ConnObjectIter->second->Connect(false);
+                                       
                                        bool ExitLoop = FALSE;
                                        
                                        while (ExitLoop == FALSE){
                                                
-                                               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.
+                                               if (ConnObjectIter->second->SSLVerify() == COSSL_UNABLETOVERIFY){
+                                                       
+                                                       frmMainPtrGet->PauseAllTimers();
+                                                       
+#if defined(__APPLE__)
+#elif defined(__WIN32__)
+#else
+       
+                                                       bool UsingSSLBypass = false;
+                                                       int SSLResult = 0;
+                                                       
+                                                       // Connect again and fetch SSL certificate information.
+               
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+               
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+
+                                                       SSLInvalidCertNotifObjString SSLICNProcData;
+                                                       
+                                                       SSLCertCollectionString certcol = ConnObjectIter->second->BuildSSLCollection();
+                                                               
+                                                       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(INVALIDSSLCERTSTRING);
+                                                       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.
+
+                                                               UsingSSLBypass = true;
+                                                               ConnObjectIter->second->BypassSSLVerification(true);
+               
+                                                               COConnectResult TestConnectionResult = ConnObjectIter->second->Connect(true);
+                                                               WriteServerCertificate(AccountDir, certcol);
+                                                               
+                                                               ConnObjectIter->second->BypassSSLVerification(false);
+                                                               
+                                                       } else if (SSLResult == 2){
                                                
-                                               int ErrorCode = ConnHandle.GetResultCode();
+                                                               // Reject the certificate, abort the task and mark as failed.
+
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       }
+               
+#endif
+                                                       
+                                                       frmMainPtrGet->ResumeAllTimers();
+                                                       ExitLoop = true;
+                                                       
+                                               } else if (ConnectResponse == COCONNECT_AUTHFAIL){
+                                                       
+                                                       ConnectResponse = ConnObjectIter->second->Connect(true);
+                                                       
+                                                       if (ConnectResponse == COCONNECT_OK){
+                                                               
+                                                               ExitLoop = true;
+                                                               break;
+                                                               
+                                                       } else {
+                                                               
+                                                               ExitLoop = true;                                                        
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       }
+                                                       
+                                               } else if (ConnectResponse == COCONNECT_OK){
+                                                       
+                                                       ConnectResponse = ConnObjectIter->second->Connect(true);
+                                                       
+                                                       ExitLoop = true;
+                                                       break;
+                                                       
+                                               } else {
+                                                       
+                                                       ExitLoop = true;                                                        
+                                                       iter->second = 2;
+                                                       break;
+                                                       
+                                               }
                                                
-                                               if (ErrorCode != 0){
+                                               /*int ErrorCode = ConnHandle.SSLVerifyTest();
+
+                                               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.
@@ -820,12 +1383,36 @@ void frmActivityMgr::ProcessTasksThread()
                                                                        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;
                                                                
@@ -841,13 +1428,6 @@ void frmActivityMgr::ProcessTasksThread()
                                                                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);
@@ -860,14 +1440,14 @@ void frmActivityMgr::ProcessTasksThread()
                                                                        // 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());
+                                                                       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.GetCertificateData());
+                                                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetSSLVerifyResults());
                                                                        iter->second = 2;
                                                                        break;
                                                                
@@ -891,7 +1471,7 @@ void frmActivityMgr::ProcessTasksThread()
                                                
                                                        ExitLoop = TRUE;
                                                
-                                               }
+                                               }*/
                                        
                                        }
                                
@@ -902,18 +1482,43 @@ void frmActivityMgr::ProcessTasksThread()
 #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());
+                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults());
                                
 #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;
+                                       }*/
+                                       
+                                       COServerResponse DeleteContactResponse = ConnObjectIter->second->DeleteContact(ContactFilename.ToStdString());
+                                       
+                                       if (DeleteContactResponse.RequestResult != COREQUEST_OK){
+                                               iter->second = 2;
+                                               break;
+                                       }
                                
                                        ETagDBPtr->RemoveETag(ContactFilename);
                                
                                        iter->second = 4;
-                                       CardDAVIter->second = NULL;
+                                       //CardDAVIter->second = NULL;
                                        break;
                                
                                }
@@ -1012,21 +1617,16 @@ void frmActivityMgr::ProcessTasksThread()
                                        std::map<wxString,FileSyncData> *SCListData = NULL;
                                        
                                        while (ExitLoop == FALSE){
-                                       
-                                               ServerContactList = ConnHandle.GetContactList(SyncTokenLoad.ToUTF8());
-                                               SSLCertCollection certcol = ConnHandle.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 = ConnHandle.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.
@@ -1056,12 +1656,35 @@ void frmActivityMgr::ProcessTasksThread()
                                                                         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;
 
@@ -1096,14 +1719,14 @@ void frmActivityMgr::ProcessTasksThread()
                                                                        // 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());
+                                                                       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.GetCertificateData());
+                                                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnHandle.GetSSLVerifyResults());
                                                                        iter->second = 2;
                                                                        break;
                                                                
@@ -1138,10 +1761,14 @@ void frmActivityMgr::ProcessTasksThread()
 #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());
+                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetSSLVerifyResults());
                        
 #endif
                                         
@@ -1158,6 +1785,23 @@ void frmActivityMgr::ProcessTasksThread()
                                
                                        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){
@@ -1909,12 +2553,12 @@ void frmActivityMgr::ProcessTasksThread()
 
                        while (iter->second == 1){
 
-                               SleepFor(250000000);
+                               SleepFor(125000000);
                                //nanosleep(&n1, &n2);
        
                        }
                        
-                       if ((iter->second == 4 && TypeIter->second == 0) || 
+                       /*if ((iter->second == 4 && TypeIter->second == 0) || 
                        (iter->second == 8 && TypeIter->second == 0)){
 
                                AccountDir = StringAccountIter->second;
@@ -1936,7 +2580,7 @@ void frmActivityMgr::ProcessTasksThread()
                                ETagServer = ConnHandle.ETagValueResult();
                                ETagDBPtr->UpdateETag(ContactFilename, ETagServer, ETagServer);
                        
-                       }
+                       }*/
                        
                        break;
                        
@@ -1958,7 +2602,7 @@ void frmActivityMgr::ProcessTasksThread()
                //ActListProcTimer.Start();
        
        }
-
+       
        wxCommandEvent event(ACTMGR_STARTPROCESSTIMER);
        wxPostEvent(this, event);
 
@@ -1968,7 +2612,7 @@ void frmActivityMgr::ProcessTasksThread()
 
 void frmActivityMgr::ProcessTasks()
 {
-
+       
        std::thread ProcessThread(&frmActivityMgr::ProcessTasksThread, this);
        ProcessThread.detach();
 
@@ -1999,15 +2643,23 @@ 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);
        
        }
 
@@ -2015,6 +2667,14 @@ void frmActivityMgr::ToggleConnectionStatus( wxCommandEvent &event ){
 
 }
 
+void frmActivityMgr::SleepMode( wxCommandEvent &event ){
+       
+       wxCommandEvent connevent(ACTMGR_TOGGLECONN);
+       
+       wxPostEvent(this, connevent);
+       
+}
+
 void frmActivityMgr::WriteServerCertificate(wxString AccountName, SSLCertCollection SSLCertInc){
 
        wxString ServerCertFinal;
@@ -2035,6 +2695,26 @@ void frmActivityMgr::WriteServerCertificate(wxString AccountName, SSLCertCollect
 
 }
 
+void frmActivityMgr::WriteServerCertificate(wxString AccountName, SSLCertCollectionString SSLCertInc){
+
+       wxString ServerCertFinal;
+
+       // Get the Cert section of the certificate and write it to the file.
+
+       ServerCertFinal = GetAccountDir(AccountName, TRUE);
+
+       wxFile CertFile;
+       
+       std::map<int, SSLCertDataString>::iterator SSLCDIter = SSLCertInc.SSLCollection.find(0);
+       std::multimap<string,string>::iterator SSLDataIter = SSLCDIter->second.CertData.find("Cert");
+       
+       CertFile.Open(ServerCertFinal, wxFile::write);  
+       
+       CertFile.Write(SSLDataIter->second, wxConvUTF8);
+       CertFile.Close();
+
+}
+
 void frmActivityMgr::StartTimer(wxCommandEvent& event){
 
        ActListProcTimer.Start(1000, FALSE);
@@ -2059,6 +2739,12 @@ void frmActivityMgr::StopProcessTimer(wxCommandEvent& event){
 
 }
 
+void frmActivityMgr::StartAnimationTimer(wxCommandEvent& event){
+       
+       AnimationTimer.StartAnimation();
+       
+}
+
 void frmActivityMgr::UpdateStatusLabel(wxCommandEvent& event){
 
        ActivityMgrLabelUpdate *actmgrudata = (ActivityMgrLabelUpdate*)event.GetClientData();
@@ -2076,6 +2762,4 @@ void frmActivityMgr::UpdateStatusLabel(wxCommandEvent& event){
        
        }
 
-}
-
-#endif
\ No newline at end of file
+}
\ No newline at end of file
Xestia Software Development
Yn Maystri
© 2006 - 2019 Xestia Software Development
Software

Xestia Address Book
Xestia Calendar
Development

Xestia Gelforn
Everything else

About
News
Privacy Policy