]> git.saurik.com Git - wxWidgets.git/blobdiff - contrib/src/net/smapi.cpp
Warning fixes, source cleaning.
[wxWidgets.git] / contrib / src / net / smapi.cpp
index 4412ad15a21694b46d7bc0c2fdcdd3619e991dfc..8ac7765ac569a92141ccc06917d54be385b45b58 100644 (file)
@@ -20,6 +20,8 @@
 #pragma hdrstop
 #endif
 
+#ifdef __WXMSW__
+
 #ifndef WX_PRECOMP
 #include "wx/wx.h"
 #endif
@@ -31,7 +33,7 @@
 
 #include "wx/net/smapi.h"
 
-class wxMapiData
+class WXDLLIMPEXP_NETUTILS wxMapiData
 {
 public:
     wxMapiData()
@@ -141,16 +143,21 @@ bool wxMapiSession::Logon(const wxString& sProfileName, const wxString& sPasswor
     
     //Setup the ascii versions of the profile name and password
     int nProfileLength = sProfileName.Length();
-    int nPasswordLength = sPassword.Length();
     
     LPSTR pszProfileName = NULL;
     LPSTR pszPassword = NULL;
+    wxCharBuffer cbProfile(1),cbPassword(1);
     if (nProfileLength)
     {
-//        pszProfileName = T2A((LPTSTR) (LPCTSTR) sProfileName);
-//        pszPassword = T2A((LPTSTR) (LPCTSTR) sPassword);
+#ifndef UNICODE
         pszProfileName = (LPSTR) sProfileName.c_str();
         pszPassword = (LPSTR) sPassword.c_str();
+#else
+        cbProfile = sProfileName.mb_str();
+        cbPassword = sPassword.mb_str();
+        pszProfileName = cbProfile.data();
+        pszPassword = cbPassword.data();
+#endif
     }
     
     //Setup the flags & UIParam parameters used in the MapiLogon call
@@ -189,7 +196,7 @@ bool wxMapiSession::Logon(const wxString& sProfileName, const wxString& sPasswor
         }
         else
         {
-            wxLogDebug(_T("Failed to logon to MAPI using a shared session, Error:%d\n"), nError);
+            wxLogDebug(_T("Failed to logon to MAPI using a shared session, Error:%ld\n"), nError);
             m_data->m_nLastError = nError;
         }
     }
@@ -226,7 +233,7 @@ bool wxMapiSession::Logoff()
         ULONG nError = m_data->m_lpfnMAPILogoff(m_data->m_hSession, 0, 0, 0); 
         if (nError != SUCCESS_SUCCESS)
         {
-            wxLogDebug(_T("Failed in call to MapiLogoff, Error:%d"), nError);
+            wxLogDebug(_T("Failed in call to MapiLogoff, Error:%ld"), nError);
             m_data->m_nLastError = nError;
             bSuccess = TRUE;
         }
@@ -251,12 +258,18 @@ bool wxMapiSession::Resolve(const wxString& sName, void* lppRecip1)
     wxASSERT(m_data->m_hSession); //MAPI session handle must be valid
     
     //Call the MAPIResolveName function
-//    LPSTR lpszAsciiName = T2A((LPTSTR) (LPCTSTR) sName);
+#ifndef UNICODE
     LPSTR lpszAsciiName = (LPSTR) sName.c_str();
+#else
+    wxCharBuffer cbName(1);
+    cbName = sName.mb_str();
+    LPSTR lpszAsciiName = cbName.data();
+#endif
     ULONG nError = m_data->m_lpfnMAPIResolveName(m_data->m_hSession, 0, lpszAsciiName, 0, 0, lppRecip);
     if (nError != SUCCESS_SUCCESS)
     {
-        wxLogDebug(_T("Failed to resolve the name: %s, Error:%d\n"), sName, nError);
+        wxLogDebug(_T("Failed to resolve the name: %s, Error:%ld\n"),
+                   sName.c_str(), nError);
         m_data->m_nLastError = nError;
     }
     
@@ -277,20 +290,43 @@ bool wxMapiSession::Send(wxMailMessage& message)
     //Create the MapiMessage structure to match the message parameter send into us
     MapiMessage mapiMessage;
     ZeroMemory(&mapiMessage, sizeof(mapiMessage));
+#ifndef UNICODE
     mapiMessage.lpszSubject = (LPSTR) message.m_subject.c_str();
     mapiMessage.lpszNoteText = (LPSTR) message.m_body.c_str();
-//    mapiMessage.lpszSubject = T2A((LPTSTR) (LPCTSTR) message.m_subject);
-//    mapiMessage.lpszNoteText = T2A((LPTSTR) (LPCTSTR) message.m_body);
+#else
+    wxCharBuffer cbSubject(1),cbBody(1),cbOriginator(1);
+    cbSubject = message.m_subject.mb_str();
+    cbBody = message.m_body.mb_str();
+    mapiMessage.lpszSubject = cbSubject.data();
+    mapiMessage.lpszNoteText = cbBody.data();
+#endif
     mapiMessage.nRecipCount = message.m_to.GetCount() + message.m_cc.GetCount() + message.m_bcc.GetCount();
     wxASSERT(mapiMessage.nRecipCount); //Must have at least 1 recipient!
     
     //Allocate the recipients array
     mapiMessage.lpRecips = new MapiRecipDesc[mapiMessage.nRecipCount];
+
+    // If we have a 'From' field, use it
+    if (!message.m_from.IsEmpty())
+    {
+        mapiMessage.lpOriginator = new MapiRecipDesc;
+        ZeroMemory(mapiMessage.lpOriginator, sizeof(MapiRecipDesc));
+
+        mapiMessage.lpOriginator->ulRecipClass = MAPI_ORIG;
+        // TODO Do we have to call Resolve?
+#ifndef UNICODE
+        mapiMessage.lpOriginator->lpszName = (LPSTR) message.m_from.c_str();
+#else
+        cbOriginator = message.m_from.mb_str();
+        mapiMessage.lpOriginator->lpszName = cbOriginator.data();
+#endif
+    }
     
     //Setup the "To" recipients
     int nRecipIndex = 0;
     int nToSize = message.m_to.GetCount();
-    for (int i=0; i<nToSize; i++)
+    int i;
+    for (i=0; i<nToSize; i++)
     {
         MapiRecipDesc& recip = mapiMessage.lpRecips[nRecipIndex];
         ZeroMemory(&recip, sizeof(MapiRecipDesc));
@@ -302,13 +338,16 @@ bool wxMapiSession::Send(wxMailMessage& message)
         if (Resolve(sName, (void*) &lpTempRecip))
         {
             //Resolve worked, put the resolved name back into the sName
-            sName = lpTempRecip->lpszName;
+            sName = wxString(lpTempRecip->lpszName,*wxConvCurrent);
             
             //Don't forget to free up the memory MAPI allocated for us
             m_data->m_lpfnMAPIFreeBuffer(lpTempRecip);
         }
-        //recip.lpszName = T2A((LPTSTR) (LPCTSTR) sName);
+#ifndef UNICODE
         recip.lpszName = (LPSTR) sName.c_str();
+#else
+        recip.lpszName = sName.mb_str().release();
+#endif
         
         ++nRecipIndex;
     }
@@ -327,13 +366,16 @@ bool wxMapiSession::Send(wxMailMessage& message)
         if (Resolve(sName, (void*) &lpTempRecip))
         {
             //Resolve worked, put the resolved name back into the sName
-            sName = lpTempRecip->lpszName;
+            sName = wxString(lpTempRecip->lpszName,*wxConvCurrent);
             
             //Don't forget to free up the memory MAPI allocated for us
             m_data->m_lpfnMAPIFreeBuffer(lpTempRecip);
         }
-        //recip.lpszName = T2A((LPTSTR) (LPCTSTR) sName);
+#ifndef UNICODE
         recip.lpszName = (LPSTR) sName.c_str();
+#else
+        recip.lpszName = sName.mb_str().release();
+#endif
         
         ++nRecipIndex;
     }
@@ -352,13 +394,16 @@ bool wxMapiSession::Send(wxMailMessage& message)
         if (Resolve(sName, (void*) &lpTempRecip))
         {
             //Resolve worked, put the resolved name back into the sName
-            sName = lpTempRecip->lpszName;
+            sName = wxString(lpTempRecip->lpszName,wxConvCurrent);
             
             //Don't forget to free up the memory MAPI allocated for us
             m_data->m_lpfnMAPIFreeBuffer(lpTempRecip);
         }
-        //recip.lpszName = T2A((LPTSTR) (LPCTSTR) sName);
+#ifndef UNICODE
         recip.lpszName = (LPSTR) sName.c_str();
+#else
+        recip.lpszName = sName.mb_str().release();
+#endif
         
         ++nRecipIndex;
     }
@@ -381,17 +426,23 @@ bool wxMapiSession::Send(wxMailMessage& message)
             ZeroMemory(&file, sizeof(MapiFileDesc));
             file.nPosition = 0xFFFFFFFF;
             wxString& sFilename = message.m_attachments[i];
-            //file.lpszPathName = T2A((LPTSTR) (LPCTSTR) sFilename);
 
+#ifndef UNICODE
             file.lpszPathName = (LPSTR) sFilename.c_str();
+#else
+            file.lpszPathName = sFilename.mb_str().release();
+#endif
             //file.lpszFileName = file.lpszPathName;
             file.lpszFileName = NULL;
 
             if (nTitleSize && !message.m_attachmentTitles[i].IsEmpty())
             {
                 wxString& sTitle = message.m_attachmentTitles[i];
-                //file.lpszFileName = T2A((LPTSTR) (LPCTSTR) sTitle);
+#ifndef UNICODE
                 file.lpszFileName = (LPSTR) sTitle.c_str();
+#else
+                file.lpszFileName = sTitle.mb_str().release();
+#endif
             }
         }
     }
@@ -405,16 +456,31 @@ bool wxMapiSession::Send(wxMailMessage& message)
     }
     else
     {
-        wxLogDebug(_T("Failed to send mail message, Error:%d\n"), nError);
+        wxLogDebug(_T("Failed to send mail message, Error:%ld\n"), nError);
         m_data->m_nLastError = nError;
     }
     
     //Tidy up the Attachements
     if (nAttachmentSize)
+    {
+#ifdef UNICODE
+        for (i = 0;i < nAttachmentSize;i++)
+        {
+            free(mapiMessage.lpFiles[i].lpszPathName);
+            free(mapiMessage.lpFiles[i].lpszFileName);
+        }
+#endif
         delete [] mapiMessage.lpFiles;
+    }
     
-    //Free up the Recipients memory
+    //Free up the Recipients and Originator memory
+#ifdef UNICODE
+    for (i = 0;i < nRecipIndex;i++)
+        free(mapiMessage.lpRecips[i].lpszName);
+#endif
     delete [] mapiMessage.lpRecips;
+
+    delete mapiMessage.lpOriginator;
     
     return bSuccess;
 }
@@ -424,3 +490,4 @@ long wxMapiSession::GetLastError() const
     return m_data->m_nLastError;
 }
 
+#endif // __WXMSW__