Index: build/win32/win32.vcproj =================================================================== --- build/win32/win32.vcproj (revision 371) +++ build/win32/win32.vcproj (working copy) @@ -1,10 +1,11 @@ - - + + @@ -3214,6 +3215,10 @@ > + + @@ -3407,10 +3412,6 @@ > - - @@ -3431,6 +3432,10 @@ > + + Index: src/cpp/common/vocl/VObject.cpp =================================================================== --- src/cpp/common/vocl/VObject.cpp (revision 371) +++ src/cpp/common/vocl/VObject.cpp (working copy) @@ -152,6 +152,16 @@ return NULL; } +propertyList* VObject::getProperties(const WCHAR* propName, propertyList *propList) { + for(int i=0; isize(); i++) { + VProperty *property; + property = (VProperty *)properties->get(i); + if(!wcscmp(property->getName(), propName)) { + propList->push_back(property); + } + } + return propList; +} /* * Returns the VCard - iCal string fro this VObject. * Note: Index: src/cpp/windows/base/stringUtils.cpp =================================================================== --- src/cpp/windows/base/stringUtils.cpp (revision 371) +++ src/cpp/windows/base/stringUtils.cpp (working copy) @@ -357,5 +357,16 @@ return data; } +int countElementTag(const std::wstring& xml, const std::wstring& tag) { + wstring content = L""; + wstring::size_type count = 0, pos = 0, previous = 0; + wstring::size_type start = 0, end = 0; + + while (getElementContent(xml,tag,content,pos,start,end) != 1) { + pos += end; + count ++; + } + return count; +} Index: src/cpp/windows/vocl/WinContact.cpp =================================================================== --- src/cpp/windows/vocl/WinContact.cpp (revision 371) +++ src/cpp/windows/vocl/WinContact.cpp (working copy) @@ -293,6 +293,11 @@ delete vp; vp = NULL; } + if (getProperty(L"InternetFreeBusyAddress", element)) { + vp = new VProperty(L"FBURL", element.c_str()); + vo->addProperty(vp); + delete vp; vp = NULL; + } // ----- ORG ----- // Add only if at least 1 property is supported, but include @@ -786,6 +791,9 @@ setProperty(L"WebPage", element); } } + else if (!wcscmp(name, L"FBURL")) { + setProperty(L"InternetFreeBusyAddress", element); + } // // ---- ADR fields ---- Index: src/cpp/windows/vocl/WinEvent.cpp =================================================================== --- src/cpp/windows/vocl/WinEvent.cpp (revision 371) +++ src/cpp/windows/vocl/WinEvent.cpp (working copy) @@ -278,7 +278,13 @@ // TODO: format ATTENDEES // - + if (recipients.size() > 0) { + recipientList::iterator it; + for(it=recipients.begin(); it != recipients.end();it++) { + WinRecipient recipient = *it; + vo->addProperty(recipient.getVProperty()); + } + } // // ---- Other Funambol defined properties ---- // Support for other fields that don't have a @@ -627,12 +633,17 @@ // Not recurring. setProperty(L"IsRecurring", L"0"); } - + propertyList attendeeList; + vo->getProperties(L"ATTENDEE", &attendeeList); + if (attendeeList.size() > 0) { + propertyListIterator it; + for(it=attendeeList.begin(); it != attendeeList.end(); it++) { + VProperty attendeeProperty = **it; + WinRecipient *recip = new WinRecipient(&attendeeProperty); + addRecipient(recip); + } + } // - // TODO: parse ATTENDEES and fill recipients list - // - - // // ---- Other Funambol defined properties ---- // Support for other fields that don't have a // specific correspondence in vCalendar. @@ -699,9 +710,11 @@ recipientList* WinEvent::getRecipients() { return &recipients; } +void WinEvent::addRecipient(const WinRecipient *recip) { + recipients.push_back(*recip); +} - const TIME_ZONE_INFORMATION* WinEvent::getTimezone() { if (useTimezone) { Index: src/cpp/windows/vocl/WinEventSIF.cpp =================================================================== --- src/cpp/windows/vocl/WinEventSIF.cpp (revision 371) +++ src/cpp/windows/vocl/WinEventSIF.cpp (working copy) @@ -39,12 +39,9 @@ #include "base/stringUtils.h" #include "vocl/sifUtils.h" #include "base/globalsdef.h" +#include "base/util/XMLProcessor.h" +USE_FUNAMBOL_NAMESPACE -USE_NAMESPACE - -using namespace std; - - // Constructor WinEventSIF::WinEventSIF() { sifFields = NULL; @@ -52,12 +49,12 @@ } // Constructor: fills propertyMap parsing the passed SIF string -WinEventSIF::WinEventSIF(const wstring dataString, const wchar_t** fields, const wchar_t** recFields) { +WinEventSIF::WinEventSIF(const wstring dataString, const wchar_t** fields, const wchar_t** recFields, const wchar_t** attFields) { sif = L""; sifFields = fields; recPatternSIF.setSifFields(recFields); - + attendeeSIFFields = attFields; parse(dataString); } @@ -141,6 +138,15 @@ // // TODO: format recipients // + if (recipientList.size() > 0) { + sif += L""; + sifRecipientList::iterator it; + for(it=recipientList.begin(); it != recipientList.end();it++) { + WinRecipientSIF recipient = *it; + sif += recipient.toString(); + } + sif += L""; + } sif += L""; @@ -204,10 +210,25 @@ } } - // - // TODO: parse recipients and fill recipients list - // - + // Handle attendees + int numOfAttendees = countElementTag(data,L"Attendee"); + int start=0,end=0,lengthOfData=0; + const wstring attOpenTag = L""; + const wstring attCloseTag = L""; + wstring attData; + for(int i=0;i #include "base/globalsdef.h" USE_NAMESPACE using namespace std; - -// Constructor +/** Default constructor */ WinRecipient::WinRecipient() { - attendee = L""; + attendee = L""; + setProperty(L"AttendeeName",L""); + setProperty(L"AttendeeEmail",L""); + setProperty(L"AttendeeStatus",L"0"); + setProperty(L"AttendeeType",L"0"); + attendeeEmail = L""; + attendeeName = L""; + attendeeStatus = 0; + attendeeType = 0; } - -// Constructor: fills propertyMap parsing the ATTENDEE -WinRecipient::WinRecipient(const wstring data) { - attendee = L""; - parse(data); +WinRecipient::WinRecipient(VProperty *vp) { + WinRecipient(); + parse(vp); } - -// Destructor +/** Destructor */ WinRecipient::~WinRecipient() { } - - - -// Parse a ATTENDEE string and fills the propertyMap. -int WinRecipient::parse(const wstring data) { - // TODO - return 0; +/** toString() */ +wstring& WinRecipient::toString() { + return attendee; } +VProperty* WinRecipient::getVProperty() { + attendee = L""; + if (attendeeName.length() > 0) { + // Due to the way we access Outlook, recipients often have (email) in the name field + int email_pos = attendeeName.find(attendeeEmail); + int pre_pos = email_pos - 1; + if (email_pos != string::npos && attendeeName[pre_pos] == '(') { + pre_pos--; // assume a space before the '(' as well + attendeeName.erase(pre_pos); + } + attendee.append(attendeeName); + attendee.append(L" "); + } + attendee.append(L"<"); + attendee.append(attendeeEmail); + attendee.append(L">"); + VProperty *vp = new VProperty(TEXT("ATTENDEE"), (WCHAR *)attendee.c_str()); + // The vcal and sif/outlook definitions of attendee type don't really match up + vp->addParameter(TEXT("ROLE"),TEXT("ATTENDEE")); + switch (attendeeStatus) { + case PARTSTAT_DECLINED_OL_RESPONSE: // declined + vp->addParameter(TEXT("STATUS"),PARTSTAT_DECLINED_STR); + break; + case PARTSTAT_CONFIRMED_OL_RESPONSE: + vp->addParameter(TEXT("STATUS"),PARTSTAT_CONFIRMED_STR); + break; + case PARTSTAT_NEEDSACTION_OL_RESPONSE: + vp->addParameter(TEXT("STATUS"),PARTSTAT_NEEDSACTION_STR); + break; + case PARTSTAT_TENTATIVE_OL_RESPONSE: + vp->addParameter(TEXT("STATUS"), PARTSTAT_TENTATIVE_STR); + break; + case PARTSTAT_DELEGATED_OL_RESPONSE: + vp->addParameter(TEXT("STATUS"), PARTSTAT_DELEGATED_STR); + break; + default: + vp->addParameter(TEXT("STATUS"), TEXT("SENT")); + break; + } + return vp; +} +/** parse() */ +int WinRecipient::parse(VProperty *vp) { + wstring name; + wstring dataString = vp->getValue(); + string::size_type has_email = dataString.find_last_of('<'); + if (has_email) { + string::size_type lengthOfEmail = dataString.length()-2-has_email; + wstring email(dataString, has_email+1, lengthOfEmail); + this->setAttendeeEmail(email); + name = dataString.substr(0, has_email-1); + } else { + name = dataString; + } + if (vp->containsParameter(L"STATUS")) { + wstring statusString = vp->getParameterValue(L"STATUS"); + this->setAttendeeStatus(statusString); + } + this->setAttendeeName(name); + return 0; +} +int WinRecipient::parse(const wstring dataString) { + return 0; +} +WinRecipient* WinRecipient::clone() { + WinRecipient *clone = new WinRecipient(); + clone->setAttendeeName(attendeeName); + clone->setAttendeeEmail(attendeeEmail); + clone->setAttendeeStatus(attendeeStatus); + clone->setAttendeeType(attendeeType); + return clone; +} -// Format and return a ATTENDEE string from the propertyMap. -wstring& WinRecipient::toString() { - // TODO - return attendee; +wstring& WinRecipient::getAttendeeName() { + return attendeeName; } - +void WinRecipient::setAttendeeName(const wstring attName) { + setProperty(L"AttendeeName",attName); + attendeeName = attName; +} +wstring& WinRecipient::getAttendeeEmail() { + return attendeeEmail; +} +void WinRecipient::setAttendeeEmail(const wstring attEmail) { + setProperty(L"AttendeeEmail",attEmail); + attendeeEmail = attEmail; +} +int WinRecipient::getAttendeeStatus() { + return attendeeStatus; +} +void WinRecipient::setAttendeeStatus(const int attStatus) { + attendeeStatus = attStatus; + wstring as; + wchar_t buf[2]; + _itow(attStatus,buf,10); + as.append(buf); + setProperty(L"AttendeeStatus", as); +} +void WinRecipient::setAttendeeStatus(const wstring vcalStatus) { + if (vcalStatus.compare(PARTSTAT_CONFIRMED_STR) == 0) { + this->setAttendeeStatus(PARTSTAT_CONFIRMED_OL_RESPONSE); + } else if (vcalStatus.compare(PARTSTAT_TENTATIVE_STR) == 0) { + this->setAttendeeStatus(PARTSTAT_TENTATIVE_OL_RESPONSE); + } else if (vcalStatus.compare(PARTSTAT_DELEGATED_STR) == 0) { + this->setAttendeeStatus(PARTSTAT_DELEGATED_OL_RESPONSE); + } else if (vcalStatus.compare(PARTSTAT_DECLINED_STR) == 0) { + this->setAttendeeStatus(PARTSTAT_DECLINED_OL_RESPONSE); + } +} +int WinRecipient::getAttendeeType() { + return attendeeType; +} +void WinRecipient::setAttendeeType(const int attType) { + attendeeType = attType; + wstring at; + wchar_t buf[2]; + _itow(attType,buf,10); + at.append(buf); + setProperty(L"AttendeeType",at); +} Index: src/cpp/windows/vocl/WinRecipientSIF.cpp =================================================================== --- src/cpp/windows/vocl/WinRecipientSIF.cpp (revision 0) +++ src/cpp/windows/vocl/WinRecipientSIF.cpp (revision 0) @@ -0,0 +1,115 @@ +/* + * 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 "base/util/utils.h" +#include "base/stringUtils.h" +#include "vocl/WinRecipientSIF.h" +#include "vocl/constants.h" +#include +#include "base/globalsdef.h" +#include "vocl/sifUtils.h" +USE_NAMESPACE + +using namespace std; + +/** Default constructor */ +WinRecipientSIF::WinRecipientSIF() { + sifdata = L""; + sifFields = NULL; +} +WinRecipientSIF::WinRecipientSIF(const std::wstring dataString, const wchar_t **fields) { + sifFields = fields; + parse(dataString); +} +/** toString() */ +wstring& WinRecipientSIF::toString() { + wstring propertyValue; + sifdata = attendeeOpen; + sifdata = sifdata.append(L"\r\n"); + + // + // Add all recurrence properties + // + map::iterator it = propertyMap.begin(); + while (it != propertyMap.end()) { + propertyValue = it->second; + addPropertyToSIF(sifdata, it->first, propertyValue); + it ++; + } + sifdata = sifdata.append(attendeeClose); + return sifdata; +} +/** parse() */ +int WinRecipientSIF::parse(const wstring dataString) { + sifdata = dataString; + // Get the data inside + int lengthOfTotalData = sifdata.length()-attendeeOpen.length()-attendeeClose.length(); + sifdata = sifdata.substr(attendeeOpen.length(), + lengthOfTotalData); + if (!sifFields) { + LOG.error("%s", ERR_SIFFIELDS_NULL); + return 1; + } + propertyMap.clear(); + wstring propertyValue; + + for (int i=0; sifFields[i]; i++) { + // Set only properties found! + if (!getElementContent(dataString, sifFields[i], propertyValue, 0)) { + + replaceAll(L"<", L"<", propertyValue); + replaceAll(L">", L">", propertyValue); + replaceAll(L"&", L"&", propertyValue); + + setProperty(sifFields[i], propertyValue); + } + } + getProperty(L"AttendeeName",attendeeName); + getProperty(L"AttendeeEmail",attendeeEmail); + // attendee status, attendee type? + return 0; +} +void WinRecipientSIF::setSifFields(const wchar_t** fields) { + sifFields = fields; +} +WinRecipientSIF* WinRecipientSIF::clone() { + WinRecipientSIF* clone = new WinRecipientSIF(); + clone->setSifFields(sifFields); + clone->parse(sifdata); + return clone; +} +/** Destructor */ +WinRecipientSIF::~WinRecipientSIF() { +} Index: src/include/common/vocl/VObject.h =================================================================== --- src/include/common/vocl/VObject.h (revision 371) +++ src/include/common/vocl/VObject.h (working copy) @@ -40,11 +40,13 @@ #include "vocl/VProperty.h" #include "base/globalsdef.h" +#include -BEGIN_NAMESPACE +BEGIN_FUNAMBOL_NAMESPACE +typedef std::list propertyList; /** Holds multiple VProperty instances */ +typedef propertyList::iterator propertyListIterator; /** Iterates over propertyList */ - /* * ************************************* Class VObject ********************************************* * ************************************************************************************************* @@ -101,7 +103,6 @@ * */ - class VObject { private: @@ -136,6 +137,7 @@ int propertiesCount(); VProperty* getProperty(int index); VProperty* getProperty(const WCHAR* propName); + propertyList* getProperties(const WCHAR* propName, propertyList *propList); WCHAR* toString(); #ifdef VOCL_ENCODING_FIX @@ -190,7 +192,7 @@ -END_NAMESPACE +END_FUNAMBOL_NAMESPACE /** @endcond */ #endif Index: src/include/windows/base/stringUtils.h =================================================================== --- src/include/windows/base/stringUtils.h (revision 371) +++ src/include/windows/base/stringUtils.h (working copy) @@ -56,7 +56,7 @@ char* encryptData (const char* data, const char* password = NULL); char* decryptData (const char* b64Data, const char* password = NULL); - +int countElementTag(const std::wstring& xml, const std::wstring& tag); /** @} */ /** @endcond */ #endif \ No newline at end of file Index: src/include/windows/vocl/WinEvent.h =================================================================== --- src/include/windows/vocl/WinEvent.h (revision 371) +++ src/include/windows/vocl/WinEvent.h (working copy) @@ -178,6 +178,8 @@ /// Returns a pointer to the list (internally owned) of recipients. recipientList* getRecipients(); + /// Adds Recipient to list + void addRecipient(const WinRecipient *recip); /** * Returns a pointer to the timezone information for this event, NULL if Index: src/include/windows/vocl/WineventSIF.h =================================================================== --- src/include/windows/vocl/WineventSIF.h (revision 371) +++ src/include/windows/vocl/WineventSIF.h (working copy) @@ -44,12 +44,14 @@ #include "vocl/WinItem.h" #include "vocl/WinEvent.h" #include "vocl/WinRecurrenceSIF.h" +#include "vocl/WinRecipientSIF.h" #include "base/globalsdef.h" BEGIN_NAMESPACE using namespace std; +typedef list sifRecipientList; /** * Rapresents an event object for Windows Clients, for SIF format. @@ -69,6 +71,12 @@ /// The recurrence pattern object for SIF data, containing recurring properties. WinRecurrenceSIF recPatternSIF; + /// NULL terminated array of SIF fields names for attendees + const wchar_t** attendeeSIFFields; + + /// SIF recipient list + sifRecipientList recipientList; + /// Parse appointment exceptions from SIF string, and fill exception lists. void parseExceptions(const wstring& sifString); @@ -110,7 +118,7 @@ * @param fields the NULL terminated array of SIF fields * @param fields the NULL terminated array of SIF fields for recurrence pattern */ - WinEventSIF(const wstring dataString, const wchar_t** fields, const wchar_t** recFields); + WinEventSIF(const wstring dataString, const wchar_t** fields, const wchar_t** recFields, const wchar_t** attFields); /// Destructor ~WinEventSIF(); @@ -164,6 +172,9 @@ * @return the converted value if necessary */ wstring adaptFromSIFSpecs(const wstring& propName, const wstring& propValue); + + void WinEventSIF::addRecipient(const WinRecipientSIF *recipient); + sifRecipientList* WinEventSIF::getRecipients(); }; Index: src/include/windows/vocl/WinItem.h =================================================================== --- src/include/windows/vocl/WinItem.h (revision 371) +++ src/include/windows/vocl/WinItem.h (working copy) @@ -67,6 +67,31 @@ #define INFO_ITEM_VOBJ_VERSION_NOTFOUND "Warning! VObject version not specified (\"%ls\" expected)" #include "base/globalsdef.h" +// STATUS field stuff +#define PARTSTAT_ACCEPTED_STR L"ACCEPTED" +#define PARTSTAT_ACCEPTED_OL_RESPONSE 3 //olResponseAccepted + +#define PARTSTAT_CONFIRMED_STR L"CONFIRMED" +#define PARTSTAT_CONFIRMED_OL_RESPONSE 3 // olResponseccepted +#define PARTSTAT_DECLINED_STR L"DECLINED" +#define PARTSTAT_DECLINED_OL_RESPONSE 4 //olResponseDeclined + +#define PARTSTAT_TENTATIVE_STR L"TENTATIVE" +#define PARTSTAT_TENTATIVE_OL_RESPONSE 2 //olResponseTentative + +#define PARTSTAT_DELEGATED_STR L"DELEGATED" +#define PARTSTAT_DELEGATED_OL_RESPONSE 1 // olResponseOrganized? + +#define PARTSTAT_COMPLETED_STR L"COMPLETED" +#define PARTSTAT_COMPLETED_OL_TASK 2 //olTaskComplete + +#define PARTSTAT_INPROCESS_STR L"IN-PROCESS" +#define PARTSTAT_INPROCESS_OL_TASK 3 /* olTaskInProgress (1) is proper, but set to 5 because this property shouldn't exist */ + +#define PARTSTAT_NEEDSACTION_STR L"NEEDS-ACTION" +#define PARTSTAT_NEEDSACTION_OL_TASK 3 // olTaskWaiting +#define PARTSTAT_NEEDSACTION_OL_RESPONSE 5 // olResponseNotResponded + BEGIN_NAMESPACE Index: src/include/windows/vocl/WinRecipient.h =================================================================== --- src/include/windows/vocl/WinRecipient.h (revision 371) +++ src/include/windows/vocl/WinRecipient.h (working copy) @@ -33,52 +33,54 @@ * the words "Powered by Funambol". */ -#ifndef INCL_WINRECIPIENT -#define INCL_WINRECIPIENT - /** @cond API */ /** @addtogroup win_adapter */ /** @{ */ +#ifndef INCL_WINRECIPIENT +#define INCL_WINRECIPIENT + +#include "base/timeUtils.h" #include "vocl/WinItem.h" #include "base/globalsdef.h" +BEGIN_FUNAMBOL_NAMESPACE -BEGIN_NAMESPACE - - /** - * Rapresents a recipient object (attendee) for Windows Clients. - * The object can be filled passing a vCalendar ATTENDEE string, or filling - * directly the map. Calling 'toString()' a vCalendar ATTENDEE is formatted and returned. + * Represents an attendee to an event + * @author Mathew McBride */ class WinRecipient : public WinItem { - private: - - wstring attendee; - + wstring attendee; +protected: + wstring attendeeName; + wstring attendeeEmail; + int attendeeStatus; + int attendeeType; public: - - /// Default Constructor - WinRecipient(); - - /// Constructor: fills propertyMap parsing the vCalendar ATTENDEE string - WinRecipient(const wstring data); - - /// Destructor - ~WinRecipient(); - - - /// Parse a vCalendar ATTENDEE string and fills the propertyMap. - int parse(const wstring data); - - /// Format and return a vCalendar ATTENDEE string from the propertyMap. - wstring& toString(); + /** default constructor */ + WinRecipient(); + /** constructor with rule argument */ + WinRecipient(VProperty *vp); + /** destructor */ + virtual ~WinRecipient(); + /** toString */ + wstring& toString(); + VProperty* getVProperty(); + int parse(VProperty *vp); + int parse(const wstring dataString); + WinRecipient* clone(); + /* get and set methods */ + wstring& getAttendeeName(); + void setAttendeeName(const wstring attName); + wstring& getAttendeeEmail(); + void setAttendeeEmail(const wstring attEmail); + int getAttendeeStatus(); + void setAttendeeStatus(const wstring vcalStatus); + void setAttendeeStatus(const int attStatus); + int getAttendeeType(); + void setAttendeeType(const int attType); }; +END_FUNAMBOL_NAMESPACE - -END_NAMESPACE - -/** @} */ -/** @endcond */ -#endif +#endif Index: src/include/windows/vocl/WinRecipientSIF.h =================================================================== --- src/include/windows/vocl/WinRecipientSIF.h (revision 0) +++ src/include/windows/vocl/WinRecipientSIF.h (revision 0) @@ -0,0 +1,77 @@ +/* + * 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". + */ + +/** @cond API */ +/** @addtogroup win_adapter */ +/** @{ */ + +#ifndef INCL_WINRECIPIENT_SIF +#define INCL_WINRECIPIENT_SIF + +#include "vocl/WinRecipient.h" +#include "base/timeUtils.h" +#include "vocl/WinItem.h" +#include "base/globalsdef.h" + +const wstring attendeeOpen = L""; +const wstring attendeeClose = L""; + +BEGIN_FUNAMBOL_NAMESPACE + +/** + * Represents an attendee to an event (SIF flavour) + * @author Mathew McBride + */ +class WinRecipientSIF : public WinRecipient { +private: + wstring sifdata; + const wchar_t** sifFields; +public: + /** Default constructor */ + WinRecipientSIF(); + /** Constructor with SIF data and sifFields */ + WinRecipientSIF(const wstring dataString, const wchar_t** fields); + /** Destructor */ + ~WinRecipientSIF(); + + /** Parse a SIF string */ + int parse(const wstring dataString); + /// Sets the internal pointer sifFields with the passed array. + void setSifFields(const wchar_t** fields); + wstring& toString(); + WinRecipientSIF* clone(); +}; +END_FUNAMBOL_NAMESPACE +#endif Index: src/include/windows/vocl/WinRecurrence.h =================================================================== --- src/include/windows/vocl/WinRecurrence.h (revision 371) +++ src/include/windows/vocl/WinRecurrence.h (working copy) @@ -44,9 +44,8 @@ #include "vocl/WinItem.h" #include "base/globalsdef.h" -BEGIN_NAMESPACE +BEGIN_FUNAMBOL_NAMESPACE - /** * Rapresents a recurrence pattern object for Windows Clients. * The object can be filled passing a vCalendar RRULE string, or filling @@ -113,7 +112,7 @@ }; -END_NAMESPACE +END_FUNAMBOL_NAMESPACE /** @} */ /** @endcond */