contactbuilder.cpp
来自「funambol window mobile客户端源代码」· C++ 代码 · 共 1,190 行 · 第 1/3 页
CPP
1,190 行
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<HomeTelephoneNumber>") + element_s + TEXT("</HomeTelephoneNumber>");
SysFreeString(element);
pContact->get_Email2Address(&element);
element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<Email2Address>") + element_s + TEXT("</Email2Address>");
SysFreeString(element);
pContact->get_Spouse(&element);
element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<Spouse>") + element_s + TEXT("</Spouse>");
SysFreeString(element);
pContact->get_Email3Address(&element);
element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<Email3Address>") + element_s + TEXT("</Email3Address>");
SysFreeString(element);
pContact->get_Home2TelephoneNumber(&element);
element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<Home2TelephoneNumber>") + element_s + TEXT("</Home2TelephoneNumber>");
SysFreeString(element);
pContact->get_HomeFaxNumber(&element);
element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<HomeFaxNumber>") + element_s + TEXT("</HomeFaxNumber>");
SysFreeString(element);
pContact->get_CarTelephoneNumber(&element);
element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<CarTelephoneNumber>") + element_s + TEXT("</CarTelephoneNumber>");
SysFreeString(element);
pContact->get_AssistantName(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<AssistantName>") + element_s + TEXT("</AssistantName>");
SysFreeString(element);
pContact->get_AssistantTelephoneNumber(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<AssistantTelephoneNumber>") + element_s + TEXT("</AssistantTelephoneNumber>");
SysFreeString(element);
pContact->get_Children(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<Children>") + element_s + TEXT("</Children>");
SysFreeString(element);
pContact->get_Categories(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<Categories>") + element_s + TEXT("</Categories>");
SysFreeString(element);
pContact->get_WebPage(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<WebPage>") + element_s + TEXT("</WebPage>");
SysFreeString(element);
pContact->get_Business2TelephoneNumber(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<Business2TelephoneNumber>") + element_s + TEXT("</Business2TelephoneNumber>");
SysFreeString(element);
pContact->get_RadioTelephoneNumber(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<RadioTelephoneNumber>") + element_s + TEXT("</RadioTelephoneNumber>");
SysFreeString(element);
pContact->get_FileAs(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<FileAs>") + element_s + TEXT("</FileAs>");
SysFreeString(element);
pContact->get_YomiCompanyName(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<YomiCompanyName>") + element_s + TEXT("</YomiCompanyName>");
SysFreeString(element);
pContact->get_YomiFirstName(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<YomiFirstName>") + element_s + TEXT("</YomiFirstName>");
SysFreeString(element);
pContact->get_YomiLastName(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<YomiLastName>") + element_s + TEXT("</YomiLastName>");
SysFreeString(element);
pContact->get_Title(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<Title>") + element_s + TEXT("</Title>");
SysFreeString(element);
pContact->get_MiddleName(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<MiddleName>") + element_s + TEXT("</MiddleName>");
SysFreeString(element);
pContact->get_Suffix(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<Suffix>") + element_s + TEXT("</Suffix>");
SysFreeString(element);
pContact->get_HomeAddressStreet(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<HomeAddressStreet>") + element_s + TEXT("</HomeAddressStreet>");
SysFreeString(element);
pContact->get_HomeAddressCity(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<HomeAddressCity>") + element_s + TEXT("</HomeAddressCity>");
SysFreeString(element);
pContact->get_HomeAddressState(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<HomeAddressState>") + element_s + TEXT("</HomeAddressState>");
SysFreeString(element);
pContact->get_HomeAddressPostalCode(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<HomeAddressPostalCode>") + element_s + TEXT("</HomeAddressPostalCode>");
SysFreeString(element);
pContact->get_HomeAddressCountry(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<HomeAddressCountry>") + element_s + TEXT("</HomeAddressCountry>");
SysFreeString(element);
pContact->get_OtherAddressStreet(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<OtherAddressStreet>") + element_s + TEXT("</OtherAddressStreet>");
SysFreeString(element);
pContact->get_OtherAddressCity(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<OtherAddressCity>") + element_s + TEXT("</OtherAddressCity>");
SysFreeString(element);
pContact->get_OtherAddressPostalCode(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<OtherAddressPostalCode>") + element_s + TEXT("</OtherAddressPostalCode>");
SysFreeString(element);
pContact->get_OtherAddressCountry(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<OtherAddressCountry>") + element_s + TEXT("</OtherAddressCountry>");
SysFreeString(element);
pContact->get_OtherAddressState(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<OtherAddressState>") + element_s + TEXT("</OtherAddressState>");
SysFreeString(element);
pContact->get_BusinessAddressStreet(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<BusinessAddressStreet>") + element_s + TEXT("</BusinessAddressStreet>");
SysFreeString(element);
pContact->get_BusinessAddressCity(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<BusinessAddressCity>") + element_s + TEXT("</BusinessAddressCity>");
SysFreeString(element);
pContact->get_BusinessAddressState(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<BusinessAddressState>") + element_s + TEXT("</BusinessAddressState>");
SysFreeString(element);
pContact->get_BusinessAddressPostalCode(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<BusinessAddressPostalCode>") + element_s + TEXT("</BusinessAddressPostalCode>");
SysFreeString(element);
pContact->get_BusinessAddressCountry(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<BusinessAddressCountry>") + element_s + TEXT("</BusinessAddressCountry>");
SysFreeString(element);
pContact->get_Body(&element); element_s.clear();
element_s = wstring(element); encodeSpecialChar(element_s);
contactStringItem += TEXT("<Body>") + element_s + TEXT("</Body>");
SysFreeString(element);
pContact->get_Birthday(&date);
wsprintf(tempDate, TEXT(""));
double toCompare = MAX_DATE_DOUBLE;
if (date != toCompare) { // MAX_DATE_DOUBLE is set to 949999.00000, the nonsense value when in ppc date is not set...
doubleToSystemTimeBirthday(tempDate, date);
//doubleToSystemTimeHourZero(tempDate, date, TRUE);
// doubleToSystemTime(tempDate, date);
}
//contactStringItem += TEXT("<Birthday>") + tempDate + TEXT("</Birthday>");
contactStringItem += TEXT("<Birthday>"); contactStringItem += tempDate; contactStringItem += TEXT("</Birthday>");
pContact->get_Anniversary(&date);
wsprintf(tempDate, TEXT(""));
if (date != toCompare) {
doubleToSystemTimeBirthday(tempDate, date);
// doubleToSystemTimeHourZero(tempDate, date, TRUE);
// doubleToSystemTime(tempDate, date);
}
//contactStringItem += TEXT("<Anniversary>") + tempDate + TEXT("</Anniversary>");
contactStringItem += TEXT("<Anniversary>"); contactStringItem += tempDate; contactStringItem += TEXT("</Anniversary>");
contactStringItem += TEXT("</contact>");
}
/*
* The method calculate the CRC hash value for the contact item.
* It create the XML structure and calculate the crc value.
* Use to compare for understand the modified value!
*
* @param pContact : the contact object that contain every value
*/
long calculateContactHash (IContact* pContact) {
wstring p;
populateContactStringItem(p, pContact);
long l = stringCrc32(p.data());
p.clear();
return l;
}
int writeToTempFile(FILE* f, char *ptr, int numBytes) {
int numWritten = fwrite(ptr, sizeof(char), numBytes, f);
return numWritten;
}
/*
* Use the WinContact object provided by the C++ API.
* This is only for Windows Mobile 5 devices. It uses windows
* api that are a low level.
*/
WinItem* contactToWinContact(IItem *pContact, bool isSif) {
HRESULT hr = E_FAIL;
CEPROPVAL *prgPropvalPoom = NULL;
ULONG cbBuffer = 0;
HANDLE hHeap = GetProcessHeap();
wstring value, imagew = L"";
WinContact* winC = NULL;
if (isSif) { winC = new WinContactSIF(); }
else { winC = new WinContact(); }
cbBuffer = 0;
hr = pContact->GetProps(PIMPR_props, CEDB_ALLOWREALLOC, NUM_COLS, &prgPropvalPoom, &cbBuffer, hHeap);
if(FAILED(hr) || NULL == prgPropvalPoom || 0 == cbBuffer) {
goto Exit;
}
for (int i = 0; i < NUM_COLS; i++) {
if (i == ePIMPR_BIRTHDAY || i == ePIMPR_ANNIVERSARY) {
value = getDatePropertyFromMapi(&prgPropvalPoom[i], false, true);
}
else if (i == ePIMPR_PICTURE) {
// currently it is set empty because if there is an image it will be
// set later with a value
value = L"";
}
else {
value = getStringPropertyFromMapi(&prgPropvalPoom[i]);
}
winC->setProperty(contactFields[i], value);
}
// to get the picture of the contact
imagew = getPicturePropertyFromMapi(pContact, *winC);
winC->setProperty(PICTURE, imagew);
hr = S_OK;
Exit:
// Free memory.
HeapFree(hHeap, 0, prgPropvalPoom);
return (WinItem*)winC;
}
HRESULT winContactToContact(WinContact& winC, IItem *pContact) {
//Handle the picture separately
wstring picture;
if (winC.getProperty(PICTURE, picture)) {
winC.removeElement(PICTURE);
}
HRESULT hr = E_FAIL;
int numberOfProperty = winC.getPropertyMapSize();
int incNumProp = 0;
CEPROPVAL *prgPropvalPoom = new CEPROPVAL[numberOfProperty];
FILETIME date;
bool exists = false;
int i = 0;
for (i = 0; i < NUM_COLS; i++) {
exists = false;
wstring& value = winC.getPropertyRef(contactFields[i], &exists);
if (exists) {
prgPropvalPoom[incNumProp].wFlags = 0;
prgPropvalPoom[incNumProp].wLenData = 0;
if (i == ePIMPR_BIRTHDAY || i == ePIMPR_ANNIVERSARY) {
prgPropvalPoom[incNumProp].propid = PIMPR_props[i];
date = getDatePropertyFromString(value, true);
prgPropvalPoom[incNumProp].val.filetime = date;
}
else if (i == ePIMPR_PICTURE) {
// Picture is handled later. BTW it should not be here because it is removed
// before
incNumProp--;
}
else if (i == ePIMPR_BODY_TEXT) {
convertNewlines(value);
prgPropvalPoom[incNumProp].propid = PIMPR_props[i];
prgPropvalPoom[incNumProp].val.lpwstr = (wchar_t*)value.c_str();
}
else {
prgPropvalPoom[incNumProp].propid = PIMPR_props[i];
prgPropvalPoom[incNumProp].val.lpwstr = (wchar_t*)value.c_str();
}
incNumProp++;
}
}
LOG.debug("Setting %d properties into IItem...", incNumProp);
hr = pContact->SetProps(0, incNumProp, prgPropvalPoom);
if (FAILED(hr)) {
LOG.error("Error setting contact properties. Please check if incoming item is correct.");
goto finally;
}
hr = pContact->Save();
if (FAILED(hr)) {
LOG.error("Error saving contact.");
goto finally;
}
//
// Insert the image if exists
//
IStream* pStream = NULL;
ULONG cbWritten = 0;
if (picture != L"") {
const wstring charsToRemove = L" \r\n"; // remove spaces, '\r' and '\n'
size_t len = 0;
int idx;
while( (idx=picture.find_first_of(charsToRemove)) >= 0 ) {
picture.replace( idx, 1, L"" );
}
char* valueA = toMultibyte(picture.c_str());
int rc = b64_decode(valueA, valueA);
if(rc > 0) {
hr = pContact->OpenProperty(PIMPR_PICTURE, GENERIC_READ|GENERIC_WRITE, &pStream);
hr = pStream->Write(valueA, rc, &cbWritten);
pStream->Commit(STGC_DEFAULT);
pStream->Release();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?