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 + -
显示快捷键?