contactbuilder.cpp

来自「funambol window mobile客户端源代码」· C++ 代码 · 共 1,190 行 · 第 1/3 页

CPP
1,190
字号
/*
 * Funambol is a mobile platform developed by Funambol, Inc.
 * Copyright (C) 2003 - 2007 Funambol, Inc.
 *
 * This program is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Affero General Public License version 3 as published by
 * the Free Software Foundation with the addition of the following permission
 * added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
 * WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE
 * WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program; if not, see http://www.gnu.org/licenses or write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301 USA.
 *
 * You can contact Funambol, Inc. headquarters at 643 Bair Island Road, Suite
 * 305, Redwood City, CA 94063, USA, or at email address info@funambol.com.
 *
 * The interactive user interfaces in modified source and object code versions
 * of this program must display Appropriate Legal Notices, as required under
 * Section 5 of the GNU Affero General Public License version 3.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public License
 * version 3, these Appropriate Legal Notices must retain the display of the
 * "Powered by Funambol" logo. If the display of the logo is not reasonably
 * feasible for technical reasons, the Appropriate Legal Notices must display
 * the words "Powered by Funambol".
 */

#include "pim/ContactBuilder.h"
#include "pim/Utils.h"
#include "pim/MAPIUtils.h"
#include "base/quoted-printable.h"
#include "base/util/utils.h"
#include "base/util/WString.h"
#include "spds/spdsutils.h"
#include "base/util/StringBuffer.h"
#include "syncml/core/PropParam.h"

#include <initguid.h>
#define INITGUID
#include <imaging.h>
#include <aygshell.h>


/**
 * Enumeration of contact fields used by WM plugin.
 * @note Don't change the order of these properties!
 *       This list MUST be synchronized with PIMPR_props array of CEPROPID fields.
 */
enum {
    ePIMPR_FILEAS                          ,
    ePIMPR_TITLE                           ,
    ePIMPR_FIRST_NAME                      ,
    ePIMPR_MIDDLE_NAME                     ,
    ePIMPR_LAST_NAME                       ,
    ePIMPR_SUFFIX                          ,
    ePIMPR_NICKNAME                        ,
    ePIMPR_YOMI_FIRSTNAME                  ,
    ePIMPR_YOMI_LASTNAME                   ,
    ePIMPR_YOMI_COMPANY                    ,

    ePIMPR_COMPANY_NAME                    ,
    ePIMPR_DEPARTMENT                      ,
    ePIMPR_JOB_TITLE                       ,
    ePIMPR_MANAGER                         ,
    ePIMPR_OFFICE_LOCATION                 ,
    ePIMPR_ASSISTANT_NAME                  ,
    ePIMPR_EMAIL1_ADDRESS                  ,
    ePIMPR_EMAIL2_ADDRESS                  ,
    ePIMPR_EMAIL3_ADDRESS                  ,
    ePIMPR_IM1_ADDRESS                     ,
    ePIMPR_IM2_ADDRESS                     ,
    ePIMPR_IM3_ADDRESS                     ,
    ePIMPR_MOBILE_TELEPHONE_NUMBER         ,
    ePIMPR_BUSINESS_TELEPHONE_NUMBER       ,
    ePIMPR_BUSINESS2_TELEPHONE_NUMBER      ,
    ePIMPR_HOME_TELEPHONE_NUMBER           ,
    ePIMPR_HOME2_TELEPHONE_NUMBER          ,
    ePIMPR_BUSINESS_FAX_NUMBER             ,
    ePIMPR_HOME_FAX_NUMBER                 ,
    ePIMPR_PAGER_NUMBER                    ,
    ePIMPR_CAR_TELEPHONE_NUMBER            ,
    ePIMPR_RADIO_TELEPHONE_NUMBER          ,
    ePIMPR_COMPANY_TELEPHONE_NUMBER        ,
    ePIMPR_ASSISTANT_TELEPHONE_NUMBER      ,
    //ePIMPR_SMS                             ,
    //ePIMPR_MMS                             ,
    //ePIMPR_DISPLAY_NAME                    ,
    ePIMPR_SPOUSE                          ,
    ePIMPR_CHILDREN                        ,
    ePIMPR_WEB_PAGE                        ,
    //ePIMPR_RINGTONE                        ,
    ePIMPR_CUSTOMERID                      ,
    ePIMPR_GOVERNMENTID                    ,
    //ePIMPR_ACCOUNT_NAME                    ,
    //ePIMPR_BUSINESS_ADDRESS                ,
    ePIMPR_BUSINESS_ADDRESS_STREET         ,
    ePIMPR_BUSINESS_ADDRESS_CITY           ,
    ePIMPR_BUSINESS_ADDRESS_STATE          ,
    ePIMPR_BUSINESS_ADDRESS_POSTAL_CODE    ,
    ePIMPR_BUSINESS_ADDRESS_COUNTRY        ,
    //ePIMPR_HOME_ADDRESS                    ,
    ePIMPR_HOME_ADDRESS_STREET             ,
    ePIMPR_HOME_ADDRESS_CITY               ,
    ePIMPR_HOME_ADDRESS_STATE              ,
    ePIMPR_HOME_ADDRESS_POSTAL_CODE        ,
    ePIMPR_HOME_ADDRESS_COUNTRY            ,
    //ePIMPR_OTHER_ADDRESS                   ,
    ePIMPR_OTHER_ADDRESS_STREET            ,
    ePIMPR_OTHER_ADDRESS_CITY              ,
    ePIMPR_OTHER_ADDRESS_STATE             ,
    ePIMPR_OTHER_ADDRESS_POSTAL_CODE       ,
    ePIMPR_OTHER_ADDRESS_COUNTRY           ,
    ePIMPR_BIRTHDAY                        ,
    ePIMPR_ANNIVERSARY                     ,
    //ePIMPR_SMARTPROP                       ,
    ePIMPR_PICTURE                         , 
    //ePIMPR_YOMI_FILEAS                     ,
    //ePIMPR_SIM_PHONE                       ,
    ePIMPR_CATEGORIES                      ,
    //ePIMPR_BODY_BINARY                     ,
    ePIMPR_BODY_TEXT                       ,

    // This is the total number of contact properties supported
    NUM_COLS
};


/**
 * Array of contact fields used by WM plugin.
 * ******************************************
 *
 * @note Don't change the order of these properties!
 */
static CEPROPID PIMPR_props [] = {    
    PIMPR_FILEAS                          ,
    PIMPR_TITLE                           ,
    PIMPR_FIRST_NAME                      ,
    PIMPR_MIDDLE_NAME                     ,
    PIMPR_LAST_NAME                       ,    
    PIMPR_SUFFIX                          ,
    PIMPR_NICKNAME                        ,
    PIMPR_YOMI_FIRSTNAME                  ,
    PIMPR_YOMI_LASTNAME                   ,
    PIMPR_YOMI_COMPANY                    ,
    PIMPR_COMPANY_NAME                    ,
    PIMPR_DEPARTMENT                      ,
    PIMPR_JOB_TITLE                       ,
    PIMPR_MANAGER                         ,
    PIMPR_OFFICE_LOCATION                 ,
    PIMPR_ASSISTANT_NAME                  ,
    PIMPR_EMAIL1_ADDRESS                  ,
    PIMPR_EMAIL2_ADDRESS                  ,
    PIMPR_EMAIL3_ADDRESS                  ,
    PIMPR_IM1_ADDRESS                     ,
    PIMPR_IM2_ADDRESS                     ,
    PIMPR_IM3_ADDRESS                     ,
    PIMPR_MOBILE_TELEPHONE_NUMBER         ,
    PIMPR_BUSINESS_TELEPHONE_NUMBER       ,
    PIMPR_BUSINESS2_TELEPHONE_NUMBER      ,
    PIMPR_HOME_TELEPHONE_NUMBER           ,
    PIMPR_HOME2_TELEPHONE_NUMBER          ,
    PIMPR_BUSINESS_FAX_NUMBER             ,
    PIMPR_HOME_FAX_NUMBER                 ,
    PIMPR_PAGER_NUMBER                    ,
    PIMPR_CAR_TELEPHONE_NUMBER            ,
    PIMPR_RADIO_TELEPHONE_NUMBER          ,
    PIMPR_COMPANY_TELEPHONE_NUMBER        ,
    PIMPR_ASSISTANT_TELEPHONE_NUMBER      ,
    //PIMPR_SMS                             ,
    //PIMPR_MMS                             ,
    //PIMPR_DISPLAY_NAME                    ,
    PIMPR_SPOUSE                          ,
    PIMPR_CHILDREN                        ,
    PIMPR_WEB_PAGE                        ,
    //PIMPR_RINGTONE                        ,
    PIMPR_CUSTOMERID                      ,
    PIMPR_GOVERNMENTID                    ,
    //PIMPR_ACCOUNT_NAME                    ,
    //PIMPR_BUSINESS_ADDRESS                ,
    PIMPR_BUSINESS_ADDRESS_STREET         ,
    PIMPR_BUSINESS_ADDRESS_CITY           ,
    PIMPR_BUSINESS_ADDRESS_STATE          ,
    PIMPR_BUSINESS_ADDRESS_POSTAL_CODE    ,
    PIMPR_BUSINESS_ADDRESS_COUNTRY        ,
    //PIMPR_HOME_ADDRESS                    ,
    PIMPR_HOME_ADDRESS_STREET             ,
    PIMPR_HOME_ADDRESS_CITY               ,
    PIMPR_HOME_ADDRESS_STATE              ,
    PIMPR_HOME_ADDRESS_POSTAL_CODE        ,
    PIMPR_HOME_ADDRESS_COUNTRY            ,
    //PIMPR_OTHER_ADDRESS                   ,
    PIMPR_OTHER_ADDRESS_STREET            ,
    PIMPR_OTHER_ADDRESS_CITY              ,
    PIMPR_OTHER_ADDRESS_STATE             ,
    PIMPR_OTHER_ADDRESS_POSTAL_CODE       ,
    PIMPR_OTHER_ADDRESS_COUNTRY           ,
    PIMPR_BIRTHDAY                        ,
    PIMPR_ANNIVERSARY                     ,
    //PIMPR_SMARTPROP                       ,
    PIMPR_PICTURE                         ,
    //PIMPR_YOMI_FILEAS                     ,
    //PIMPR_SIM_PHONE                      , 
    PIMPR_CATEGORIES                      ,
    //PIMPR_BODY_BINARY                    ,
    PIMPR_BODY_TEXT                       

};



/**
 * Array of contact fields names for SIF format.
 * @note Don't change the order of these properties!
 *       This list MUST be synchronized with PIMPR_props array of CEPROPID fields.
 */
const wchar_t* contactFields [] = {    
    L"FileAs"                          ,
    L"Title"                           ,    
    L"FirstName"                       ,                // Returns or sets the first name for the contact.
    L"MiddleName"                     ,
    L"LastName"                       ,
    L"Suffix"                          ,
    L"NickName"                        ,
    L"YomiFirstName"                  ,
    L"YomiLastName"                   ,
    L"YomiCompanyName"                    ,
    L"CompanyName"                    ,
    L"Department"                      ,
    L"JobTitle"                       ,
    L"ManagerName"                         ,
    L"OfficeLocation"                 ,
    L"AssistantName"                  ,
    L"Email1Address"                  ,
    L"Email2Address"                  ,
    L"Email3Address"                  ,
    L"IMAddress"                     ,
    L"IM2Address"                     ,
    L"IM3Address"                     ,
    L"MobileTelephoneNumber"         ,
    L"BusinessTelephoneNumber"       ,
    L"Business2TelephoneNumber"      ,
    L"HomeTelephoneNumber"           ,
    L"Home2TelephoneNumber"          ,
    L"BusinessFaxNumber"             ,
    L"HomeFaxNumber"                 ,
    L"PagerNumber"                    ,
    L"CarTelephoneNumber"            ,
    L"RadioTelephoneNumber"          ,
    L"CompanyMainTelephoneNumber"        ,
    L"AssistantTelephoneNumber"      ,
    //PIMPR_SMS                             ,
    //PIMPR_MMS                             ,
    //PIMPR_DISPLAY_NAME                    ,
    L"Spouse"                          ,
    L"Children"                        ,
    L"WebPage"                        ,         // outlook WebPage
    //PIMPR_RINGTONE                        ,
    L"CustomerID"                      ,
    L"GovernmentIDNumber"                    ,
    //PIMPR_ACCOUNT_NAME                    ,
    //PIMPR_BUSINESS_ADDRESS                ,
    L"BusinessAddressStreet"         ,
    L"BusinessAddressCity"           ,
    L"BusinessAddressState"          ,
    L"BusinessAddressPostalCode"    ,
    L"BusinessAddressCountry"        ,
    //PIMPR_HOME_ADDRESS                    ,
    L"HomeAddressStreet"             ,
    L"HomeAddressCity"               ,
    L"HomeAddressState"              ,
    L"HomeAddressPostalCode"        ,
    L"HomeAddressCountry"            ,
    //PIMPR_OTHER_ADDRESS                   ,
    L"OtherAddressStreet"            ,
    L"OtherAddressCity"              ,
    L"OtherAddressState"             ,
    L"OtherAddressPostalCode"       ,
    L"OtherAddressCountry"           ,
    L"Birthday"                        ,
    L"Anniversary"                     ,
    //PIMPR_SMARTPROP                       ,
    L"Photo"                         ,// use this not associated to the property. ADDED MANUALLY!! PIMPR_PICTURE 
    //PIMPR_YOMI_FILEAS                     ,
    //PIMPR_SIM_PHONE                   ,
    L"Categories"                     ,
    //PIMPR_BODY_BINARY                    ,
    L"Body"                       ,
    NULL
};



/*
* Method to populate the contact XML structure.
* It get every property name and value and build the XML structure to exchange with server.
*
* @param contactStringItem  : the string that will contain the xml structure
* @param pAppointment       : the contact object that contain every value
*
*/
void populateContactStringItem(wstring &contactStringItem, IContact *pContact) {

    BSTR element = NULL;
    DATE date = NULL;
    wchar_t tempDate[50];
    wstring element_s;

    contactStringItem = TEXT("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
    contactStringItem += TEXT("<contact>");

    pContact->get_FirstName(&element);
    element_s.clear();
    element_s = wstring(element);
    encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<FirstName>") + element_s + TEXT("</FirstName>");
    SysFreeString(element);

    pContact->get_LastName(&element);
    element_s.clear();
    element_s = wstring(element); encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<LastName>") + element_s + TEXT("</LastName>");
    SysFreeString(element);

    pContact->get_CompanyName(&element);

    element_s.clear();
    element_s = wstring(element); encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<CompanyName>") + element_s + TEXT("</CompanyName>");
    SysFreeString(element);

    pContact->get_BusinessFaxNumber(&element);

    element_s.clear();
    element_s = wstring(element); encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<BusinessFaxNumber>") + element_s + TEXT("</BusinessFaxNumber>");
    SysFreeString(element);

    pContact->get_Department(&element);

    element_s.clear();
    element_s = wstring(element); encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<Department>") + element_s + TEXT("</Department>");
    SysFreeString(element);

    pContact->get_Email1Address(&element);

    element_s.clear();
    element_s = wstring(element); encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<Email1Address>") + element_s + TEXT("</Email1Address>");
    SysFreeString(element);

    pContact->get_MobileTelephoneNumber(&element);

    element_s.clear();
    element_s = wstring(element); encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<MobileTelephoneNumber>") + element_s + TEXT("</MobileTelephoneNumber>");
    SysFreeString(element);

    pContact->get_OfficeLocation(&element);

    element_s.clear();
    element_s = wstring(element); encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<OfficeLocation>") + element_s + TEXT("</OfficeLocation>");
    SysFreeString(element);

    pContact->get_PagerNumber(&element);

    element_s.clear();
    element_s = wstring(element); encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<PagerNumber>") + element_s + TEXT("</PagerNumber>");
    SysFreeString(element);

    pContact->get_BusinessTelephoneNumber(&element);

    element_s.clear();
    element_s = wstring(element); encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<BusinessTelephoneNumber>") + element_s + TEXT("</BusinessTelephoneNumber>");
    SysFreeString(element);

    pContact->get_JobTitle(&element);

    element_s.clear();
    element_s = wstring(element); encodeSpecialChar(element_s);
    contactStringItem  += TEXT("<JobTitle>") + element_s + TEXT("</JobTitle>");
    SysFreeString(element);

    pContact->get_HomeTelephoneNumber(&element);

    element_s.clear();

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?