Home | News | Projects | Releases
Bugs | RFE | Repositories | Help
frmActivityMgr: UTF-8 support for adding/editing contacts implemented
[xestiaab/.git] / source / actmgr / frmActivityMgr.cpp
index 40ab583..be5f40a 100644 (file)
@@ -80,7 +80,7 @@ frmActivityMgrADT( parent )
        
        ActListProcTimer.SetupPointers(&ActivityList, &ActivityListIndex, &ActivityListTaskDetail, 
                                        &TasksActive, lstActivity, lblDetails, GauProgress, this, &AnimationTimer,
-                                       &ActProcessTimer, &ActivityListFinDate, &ActivityListConn);
+                                       &ActProcessTimer, &ActivityListFinDate, &ActivityListConnObject);
        
        AnimationTimer.SetBitmap(bmpActivity);
        AnimationTimer.SetSleepBitmap(&SleepBitmap);
@@ -330,7 +330,54 @@ void frmActivityMgr::ProcessTasksThread()
                                                        frmMainPtrGet->PauseAllTimers();
                                                        
 #if defined(__APPLE__)
+
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+                                                       
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+                                                       
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+                                                       
+                                                       int SSLResult = DisplayTrustPanel(ConnObjectIter->second->BuildSSLCollection(), AccountNameFriendly);
+                                                       
+                                                       if (SSLResult != NSOKButton){
+                                                               
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnObjectIter->second->BuildSSLCollection());
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       } else {
+                                                               
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
+                                                               
+                                                       }
+                                                       
 #elif defined(__WIN32__)
+
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+
+                                                       BOOL ModifiedCertificateData = false;
+                                                       CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(ConnObjectIter->second, (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, ConnObjectIter->second->BuildSSLCollection());
+                                                               iter->second = 2;
+                                                               break;
+
+                                                       } else {
+
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
+
+                                                       }
+
 #else
        
                                                        bool UsingSSLBypass = false;
@@ -436,11 +483,11 @@ void frmActivityMgr::ProcessTasksThread()
                                        
 #if defined(__APPLE__)
                                        
-                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
 
 #elif defined(__WIN32__)
 
-                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
 
 #else
                                        
@@ -449,7 +496,7 @@ void frmActivityMgr::ProcessTasksThread()
 #endif
                                        
                                        COServerResponse AddContactResponse = ConnObjectIter->second->AddContact(StringURLIter->second.ToStdString(), 
-                                                       StringDataIter->second.ToStdString());
+                                                       std::string(StringDataIter->second.ToUTF8()));
                                        
                                        if (AddContactResponse.RequestResult != COREQUEST_OK){
                                                iter->second = 2;
@@ -465,8 +512,6 @@ void frmActivityMgr::ProcessTasksThread()
                                                break;
                                        }
                                        
-                                       std::cout << ETagGetResponse.EntityTag << std::endl;
-                                       
                                        ETagDBPtr->UpdateETag(ContactFilename, ETagGetResponse.EntityTag, ETagGetResponse.EntityTag);
                                        
                                        iter->second = 4;
@@ -527,7 +572,54 @@ void frmActivityMgr::ProcessTasksThread()
                                                        frmMainPtrGet->PauseAllTimers();
                                                        
 #if defined(__APPLE__)
+                                                       
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+                                                       
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+                                                       
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+                                                       
+                                                       int SSLResult = DisplayTrustPanel(ConnObjectIter->second->BuildSSLCollection(), AccountNameFriendly);
+                                                       
+                                                       if (SSLResult != NSOKButton){
+                                                               
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnObjectIter->second->BuildSSLCollection());
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       } else {
+                                                               
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
+                                                               
+                                                       }
+                                                       
 #elif defined(__WIN32__)
+
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+
+                                                       BOOL ModifiedCertificateData = false;
+                                                       CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(ConnObjectIter->second, (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, ConnObjectIter->second->BuildSSLCollection());
+                                                               iter->second = 2;
+                                                               break;
+
+                                                       } else {
+
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
+
+                                                       }
+
 #else
        
                                                        bool UsingSSLBypass = false;
@@ -729,7 +821,7 @@ void frmActivityMgr::ProcessTasksThread()
                                                // Upload the data to the server.
                                                
                                                COServerResponse EditContactResponse = ConnObjectIter->second->EditContact(StringURLIter->second.ToStdString(), 
-                                                       StringDataIter->second.ToStdString());
+                                                       std::string(StringDataIter->second.ToUTF8()));
                                        
                                                if (EditContactResponse.RequestResult != COREQUEST_OK){
                                                        iter->second = 2;
@@ -795,7 +887,54 @@ void frmActivityMgr::ProcessTasksThread()
                                                        frmMainPtrGet->PauseAllTimers();
                                                        
 #if defined(__APPLE__)
+                                                       
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+                                                       
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+                                                       
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+                                                       
+                                                       int SSLResult = DisplayTrustPanel(ConnObjectIter->second->BuildSSLCollection(), AccountNameFriendly);
+                                                       
+                                                       if (SSLResult != NSOKButton){
+                                                               
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnObjectIter->second->BuildSSLCollection());
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       } else {
+                                                               
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
+                                                               
+                                                       }
+                                                       
 #elif defined(__WIN32__)
+
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+
+                                                       BOOL ModifiedCertificateData = false;
+                                                       CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(ConnObjectIter->second, (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, ConnObjectIter->second->BuildSSLCollection());
+                                                               iter->second = 2;
+                                                               break;
+
+                                                       } else {
+
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
+
+                                                       }
+
 #else
        
                                                        bool UsingSSLBypass = false;
@@ -901,11 +1040,11 @@ void frmActivityMgr::ProcessTasksThread()
                        
 #if defined(__APPLE__)
                                
-                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
 
 #elif defined(__WIN32__)
 
-                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
 
 #else
                                
@@ -966,7 +1105,6 @@ void frmActivityMgr::ProcessTasksThread()
                                        wxArrayString vCardUpdateRemote;
                                        wxArrayString vCardUpdateLog;
                                        std::map<wxString,wxString> vCardETag;
-                                       ContactListData ServerContactList;
                                
                                        std::map<wxString,vCardDownloadDataFileClass> vCardDownloadData;
                                
@@ -1017,8 +1155,6 @@ void frmActivityMgr::ProcessTasksThread()
                                        COConnectResult ConnectResponse = ConnObjectIter->second->Connect(false);
                                        
                                        bool ExitLoop = FALSE;
-
-                                       std::map<wxString,FileSyncData> *SCListData = NULL;
                                        
                                        while (ExitLoop == FALSE){                                              
                                                
@@ -1027,7 +1163,54 @@ void frmActivityMgr::ProcessTasksThread()
                                                        frmMainPtrGet->PauseAllTimers();
                                                        
 #if defined(__APPLE__)
+                                                       
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+                                                       
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+                                                       
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+                                                       
+                                                       int SSLResult = DisplayTrustPanel(ConnObjectIter->second->BuildSSLCollection(), AccountNameFriendly);
+                                                       
+                                                       if (SSLResult != NSOKButton){
+                                                               
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 1, ConnObjectIter->second->BuildSSLCollection());
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       } else {
+                                                               
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
+                                                               
+                                                       }
+                                                       
 #elif defined(__WIN32__)
+
+                                                       ConnObjectIter->second->BypassSSLVerification(true);
+
+                                                       COConnectResult ConnectionSSLResult = ConnObjectIter->second->Connect(false);
+
+                                                       ConnObjectIter->second->BypassSSLVerification(false);
+
+                                                       BOOL ModifiedCertificateData = false;
+                                                       CRYPTUI_VIEWCERTIFICATE_STRUCTW CertificateData = BuildCertificateData(ConnObjectIter->second, (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, ConnObjectIter->second->BuildSSLCollection());
+                                                               iter->second = 2;
+                                                               break;
+
+                                                       } else {
+
+                                                               frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
+
+                                                       }
+
 #else
        
                                                        bool UsingSSLBypass = false;
@@ -1114,6 +1297,19 @@ void frmActivityMgr::ProcessTasksThread()
                                                        
                                                        ConnectResponse = ConnObjectIter->second->Connect(true);
                                                        
+                                                       if (ConnectResponse == COCONNECT_OK){
+                                                               
+                                                               ExitLoop = true;
+                                                               break;
+                                                               
+                                                       } else {
+                                                               
+                                                               ExitLoop = true;
+                                                               iter->second = 2;
+                                                               break;
+                                                               
+                                                       }
+                                                       
                                                        ExitLoop = true;
                                                        break;
                                                        
@@ -1129,11 +1325,11 @@ void frmActivityMgr::ProcessTasksThread()
                                
 #if defined(__APPLE__)
                                         
-                                        frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetTrustObject());
+                                        frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
 
 #elif defined(__WIN32__)
 
-                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnHandle.GetCertificateContextPointer());
+                                       frmMainPtrGet->UpdateSSLAccountStatus(AccountID, 0, ConnObjectIter->second->BuildSSLCollection());
 
 #else
                                         
@@ -1395,6 +1591,11 @@ void frmActivityMgr::ProcessTasksThread()
                                                        
                                                        COServerResponse ServerEntityTag = ConnObjectIter->second->GetServerEntityTagValue(additer->first.ToStdString());
                                                        
+                                                       if (ServerEntityTag.RequestResult != COREQUEST_OK){
+                                                               iter->second = 2;
+                                                               break;
+                                                       }
+                                                       
                                                        ServerETag = wxString::FromUTF8(ServerEntityTag.EntityTag.c_str());
 
                                                        // Add to the ETag Database.
@@ -1423,6 +1624,11 @@ void frmActivityMgr::ProcessTasksThread()
                                                        
                                                        COServerResponse ServerEntityTag = ConnObjectIter->second->GetServerEntityTagValue(additer->first.ToStdString());
                                                        
+                                                       if (ServerEntityTag.RequestResult != COREQUEST_OK){
+                                                               iter->second = 2;
+                                                               break;
+                                                       }
+                                                       
                                                        ServerETag = wxString::FromUTF8(ServerEntityTag.EntityTag.c_str());
                                                
                                                        // Add to the ETag Database.
@@ -1431,6 +1637,12 @@ void frmActivityMgr::ProcessTasksThread()
                                                                                        
                                                }
                                        }
+                                       
+                                       // Check if any errors occured before continuing.
+                                       
+                                       if (iter->second != 1){
+                                               break;
+                                       }
        
                                        // Look for vCard files which aren't in the ETagDB.
        
@@ -1489,6 +1701,11 @@ void frmActivityMgr::ProcessTasksThread()
                                                        
                                                        COServerResponse ServerEntityTag = ConnObjectIter->second->GetServerEntityTagValue(vCardAdd[vi].ToStdString());
                                                        
+                                                       if (ServerEntityTag.RequestResult != COREQUEST_OK){
+                                                               iter->second = 2;
+                                                               break;
+                                                       }
+                                                       
                                                        ETagServer = wxString::FromUTF8(ServerEntityTag.EntityTag.c_str());
                                
                                                        if (ETagOriginal != ETagServer){
@@ -1510,6 +1727,11 @@ void frmActivityMgr::ProcessTasksThread()
                                                                
                                                                COServerResponse GetContactResponse = ConnObjectIter->second->GetContact(vCardAdd[vi].ToStdString(), &ServerContactDataString);
                                                
+                                                               if (GetContactResponse.RequestResult != COREQUEST_OK){
+                                                                       iter->second = 2;
+                                                                       break;
+                                                               }
+                                                               
                                                                ServerContactData = wxString::FromUTF8(ServerContactDataString.c_str());
                                                
                                                                // Process v3 version into v4 version.
@@ -1559,8 +1781,13 @@ void frmActivityMgr::ProcessTasksThread()
                                        
                                                                        // Decided to use client version.
                                        
-                                                                       COServerResponse EditContactResponse = ConnObjectIter->second->EditContact(vCardAdd[vi].ToStdString(), ClientData.WriteString().ToStdString());
+                                                                       COServerResponse EditContactResponse = ConnObjectIter->second->EditContact(vCardAdd[vi].ToStdString(), std::string(ClientData.WriteString().ToUTF8()));
                                                
+                                                                       if (EditContactResponse.RequestResult != COREQUEST_OK){
+                                                                               iter->second = 2;
+                                                                               break;
+                                                                       }
+                                                                       
                                                                        iter->second = 4;
                                        
                                                                } else if (ConflictResult == 2){
@@ -1603,12 +1830,22 @@ void frmActivityMgr::ProcessTasksThread()
 
                                                                // Upload the data to the server.
                                                                
-                                                               COServerResponse AddContactResponse = ConnObjectIter->second->AddContact(vCardAdd[vi].ToStdString(), TaskData.ToStdString());
+                                                               COServerResponse AddContactResponse = ConnObjectIter->second->AddContact(vCardAdd[vi].ToStdString(), std::string(TaskData.ToUTF8()));
                                                        
+                                                               if (AddContactResponse.RequestResult != COREQUEST_OK){
+                                                                       iter->second = 2;
+                                                                       break;
+                                                               }
+                                                               
                                                                // Get the Server ETag and put it in the ETag database.
 
                                                                COServerResponse EntityTagResponse = ConnObjectIter->second->GetServerEntityTagValue(vCardAdd[vi].ToStdString());
                                                                
+                                                               if (EntityTagResponse.RequestResult != COREQUEST_OK){
+                                                                       iter->second = 2;
+                                                                       break;
+                                                               }
+                                                               
                                                                ETagServer = wxString::FromUTF8(EntityTagResponse.EntityTag.c_str());
                                
                                                                ETagDBPtr->AddETag(vCardAdd[vi], ETagServer, ETagServer);
@@ -1636,6 +1873,11 @@ void frmActivityMgr::ProcessTasksThread()
                                        
                                                                COServerResponse GetContactResponse = ConnObjectIter->second->GetContact(vCardAdd[vi].ToStdString(), &ServerContactDataString);
                                                
+                                                               if (GetContactResponse.RequestResult != COREQUEST_OK){
+                                                                       iter->second = 2;
+                                                                       break;
+                                                               }
+                                                               
                                                                ServerContactData = wxString::FromUTF8(ServerContactDataString.c_str());
                                                                
                                                                ClientData.LoadFile(FullFilename);
@@ -1681,8 +1923,13 @@ void frmActivityMgr::ProcessTasksThread()
                                        
                                                                        // Decided to use client version.
                                                                
-                                                                       COServerResponse EditContactResponse = ConnObjectIter->second->EditContact(vCardAdd[vi].ToStdString(), ClientData.WriteString().ToStdString());
-                                               
+                                                                       COServerResponse EditContactResponse = ConnObjectIter->second->EditContact(vCardAdd[vi].ToStdString(), std::string(ClientData.WriteString().ToUTF8()));
+
+                                                                       if (EditContactResponse.RequestResult != COREQUEST_OK){
+                                                                               iter->second = 2;
+                                                                               break;
+                                                                       }
+                                                                       
                                                                        iter->second = 4;
                                        
                                                                } else if (ConflictResult == 2){
@@ -1725,12 +1972,22 @@ void frmActivityMgr::ProcessTasksThread()
 
                                                                // Upload the data to the server.
                                                                
-                                                               COServerResponse AddContactResponse = ConnObjectIter->second->AddContact(vCardAdd[vi].ToStdString(), TaskData.ToStdString());
-                                                       
+                                                               COServerResponse AddContactResponse = ConnObjectIter->second->AddContact(vCardAdd[vi].ToStdString(), std::string(TaskData.ToUTF8()));
+
+                                                               if (AddContactResponse.RequestResult != COREQUEST_OK){
+                                                                       iter->second = 2;
+                                                                       break;
+                                                               }
+                                                               
                                                                // Get the Server ETag and put it in the ETag database.
                                                        
                                                                COServerResponse EntityTagResponse = ConnObjectIter->second->GetServerEntityTagValue(vCardAdd[vi].ToStdString());
                                
+                                                               if (EntityTagResponse.RequestResult != COREQUEST_OK){
+                                                                       iter->second = 2;
+                                                                       break;
+                                                               }
+                                                               
                                                                ETagDBPtr->AddETag(vCardAdd[vi], ETagServer, ETagServer);
                                
                                                        }
@@ -1739,6 +1996,10 @@ void frmActivityMgr::ProcessTasksThread()
 
                                        }                       
                                
+                                       if (iter->second != 1){
+                                               break;
+                                       }
+                                       
                                        // Process the vCards to delete locally.
                                
                                        for (int vi = 0; vi < vCardDelete.GetCount(); vi++){
@@ -2012,4 +2273,4 @@ void frmActivityMgr::UpdateStatusLabel(wxCommandEvent& event){
        
        }
 
-}
\ 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