mirror of
https://github.com/moparisthebest/davmail
synced 2025-01-06 03:08:02 -05:00
Caldav: additional VCalendar properties for rebuilt item: RRULE, EXDATE, CLASS
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1440 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
cb2b6baac3
commit
7619bb715d
@ -205,6 +205,13 @@ public class VObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addPropertyValue(String name, String value) {
|
||||||
|
if (value != null) {
|
||||||
|
VProperty property = new VProperty(name, value);
|
||||||
|
addProperty(property);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void removeProperty(String name) {
|
public void removeProperty(String name) {
|
||||||
if (properties != null) {
|
if (properties != null) {
|
||||||
VProperty property = getProperty(name);
|
VProperty property = getProperty(name);
|
||||||
|
@ -1307,9 +1307,10 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
result = getICSFromItemProperties();
|
result = getICSFromItemProperties();
|
||||||
}
|
}
|
||||||
// debug code
|
// debug code
|
||||||
//if (new String(result).indexOf("VTODO") < 0) {
|
if (new String(result).indexOf("VTODO") < 0) {
|
||||||
// LOGGER.debug("Rebuilt body: " + new String(getICSFromItemProperties()));
|
result = getICSFromItemProperties();
|
||||||
//}
|
LOGGER.debug("Rebuilt body: " + new String(result));
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -1332,6 +1333,9 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
davPropertyNameSet.add(Field.getPropertyName("organizer"));
|
davPropertyNameSet.add(Field.getPropertyName("organizer"));
|
||||||
davPropertyNameSet.add(Field.getPropertyName("to"));
|
davPropertyNameSet.add(Field.getPropertyName("to"));
|
||||||
davPropertyNameSet.add(Field.getPropertyName("description"));
|
davPropertyNameSet.add(Field.getPropertyName("description"));
|
||||||
|
davPropertyNameSet.add(Field.getPropertyName("rrule"));
|
||||||
|
davPropertyNameSet.add(Field.getPropertyName("exdate"));
|
||||||
|
davPropertyNameSet.add(Field.getPropertyName("sensitivity"));
|
||||||
davPropertyNameSet.add(Field.getPropertyName("alldayevent"));
|
davPropertyNameSet.add(Field.getPropertyName("alldayevent"));
|
||||||
davPropertyNameSet.add(Field.getPropertyName("busystatus"));
|
davPropertyNameSet.add(Field.getPropertyName("busystatus"));
|
||||||
|
|
||||||
@ -1356,6 +1360,23 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
vEvent.setPropertyValue("DTSTART", convertDateFromExchange(getPropertyIfExists(davPropertySet, "dtstart")));
|
vEvent.setPropertyValue("DTSTART", convertDateFromExchange(getPropertyIfExists(davPropertySet, "dtstart")));
|
||||||
vEvent.setPropertyValue("DTEND", convertDateFromExchange(getPropertyIfExists(davPropertySet, "dtend")));
|
vEvent.setPropertyValue("DTEND", convertDateFromExchange(getPropertyIfExists(davPropertySet, "dtend")));
|
||||||
vEvent.setPropertyValue("TRANSP", getPropertyIfExists(davPropertySet, "transparent"));
|
vEvent.setPropertyValue("TRANSP", getPropertyIfExists(davPropertySet, "transparent"));
|
||||||
|
vEvent.setPropertyValue("RRULE", getPropertyIfExists(davPropertySet, "rrule"));
|
||||||
|
String exdates = getPropertyIfExists(davPropertySet, "exdate");
|
||||||
|
if (exdates != null) {
|
||||||
|
String[] exdatearray = exdates.split(",");
|
||||||
|
for (String exdate:exdatearray) {
|
||||||
|
vEvent.addPropertyValue("EXDATE",
|
||||||
|
StringUtil.convertZuluDateTimeToAllDay(convertDateFromExchange(exdate)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String sensitivity = getPropertyIfExists(davPropertySet, "sensitivity");
|
||||||
|
if ("2".equals(sensitivity)) {
|
||||||
|
vEvent.setPropertyValue("CLASS", "PRIVATE");
|
||||||
|
} else if ("3".equals(sensitivity)) {
|
||||||
|
vEvent.setPropertyValue("CLASS", "CONFIDENTIAL");
|
||||||
|
} else if ("0".equals(sensitivity)) {
|
||||||
|
vEvent.setPropertyValue("CLASS", "PUBLIC");
|
||||||
|
}
|
||||||
String organizer = getPropertyIfExists(davPropertySet, "organizer");
|
String organizer = getPropertyIfExists(davPropertySet, "organizer");
|
||||||
String organizerEmail = null;
|
String organizerEmail = null;
|
||||||
if (organizer != null) {
|
if (organizer != null) {
|
||||||
|
@ -174,6 +174,9 @@ public class Field {
|
|||||||
createField(URN_SCHEMAS_CALENDAR, "created"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:created/SystemTime
|
createField(URN_SCHEMAS_CALENDAR, "created"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:created/SystemTime
|
||||||
createField(URN_SCHEMAS_CALENDAR, "alldayevent"); // DistinguishedPropertySetType.Appointment/0x8215 Boolean
|
createField(URN_SCHEMAS_CALENDAR, "alldayevent"); // DistinguishedPropertySetType.Appointment/0x8215 Boolean
|
||||||
|
|
||||||
|
createField(URN_SCHEMAS_CALENDAR, "rrule"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:rrule/PtypMultipleString
|
||||||
|
createField(URN_SCHEMAS_CALENDAR, "exdate"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:exdate/PtypMultipleTime
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
createField(SCHEMAS_MAPI, "allattendeesstring"); // PidLidAllAttendeesString
|
createField(SCHEMAS_MAPI, "allattendeesstring"); // PidLidAllAttendeesString
|
||||||
createField(SCHEMAS_MAPI, "required_attendees"); // PidLidRequiredAttendees
|
createField(SCHEMAS_MAPI, "required_attendees"); // PidLidRequiredAttendees
|
||||||
@ -184,11 +187,9 @@ public class Field {
|
|||||||
createField(URN_SCHEMAS_CALENDAR, "location"); // DistinguishedPropertySetType.Appointment/0x8208 String
|
createField(URN_SCHEMAS_CALENDAR, "location"); // DistinguishedPropertySetType.Appointment/0x8208 String
|
||||||
createField(URN_SCHEMAS_CALENDAR, "attendeerole"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:attendeerole/Integer
|
createField(URN_SCHEMAS_CALENDAR, "attendeerole"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:attendeerole/Integer
|
||||||
createField(URN_SCHEMAS_CALENDAR, "busystatus"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:busystatus/String
|
createField(URN_SCHEMAS_CALENDAR, "busystatus"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:busystatus/String
|
||||||
createField(URN_SCHEMAS_CALENDAR, "exdate"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:exdate/PtypMultipleTime
|
|
||||||
createField(URN_SCHEMAS_CALENDAR, "exrule"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:exrule/PtypMultipleString
|
createField(URN_SCHEMAS_CALENDAR, "exrule"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:exrule/PtypMultipleString
|
||||||
createField(URN_SCHEMAS_CALENDAR, "recurrenceidrange"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:recurrenceidrange/String
|
createField(URN_SCHEMAS_CALENDAR, "recurrenceidrange"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:recurrenceidrange/String
|
||||||
createField(URN_SCHEMAS_CALENDAR, "rdate"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:rdate/PtypMultipleTime
|
createField(URN_SCHEMAS_CALENDAR, "rdate"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:rdate/PtypMultipleTime
|
||||||
createField(URN_SCHEMAS_CALENDAR, "rrule"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:rrule/PtypMultipleString
|
|
||||||
createField(URN_SCHEMAS_CALENDAR, "reminderoffset"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:reminderoffset/Integer
|
createField(URN_SCHEMAS_CALENDAR, "reminderoffset"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:reminderoffset/Integer
|
||||||
createField(URN_SCHEMAS_CALENDAR, "timezone"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:timezone/String
|
createField(URN_SCHEMAS_CALENDAR, "timezone"); // DistinguishedPropertySetType.PublicStrings/urn:schemas:calendar:timezone/String
|
||||||
|
|
||||||
|
@ -22,6 +22,9 @@ import org.apache.commons.codec.DecoderException;
|
|||||||
import org.apache.commons.codec.binary.Base64;
|
import org.apache.commons.codec.binary.Base64;
|
||||||
import org.apache.commons.codec.binary.Hex;
|
import org.apache.commons.codec.binary.Hex;
|
||||||
|
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@ -313,4 +316,22 @@ public final class StringUtil {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String convertZuluDateTimeToAllDay(String value) {
|
||||||
|
String result = value;
|
||||||
|
if (value != null && value.length() != 8) {
|
||||||
|
// try to convert datetime value to date value
|
||||||
|
try {
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
SimpleDateFormat dateParser = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
|
||||||
|
calendar.setTime(dateParser.parse(value));
|
||||||
|
calendar.add(Calendar.HOUR_OF_DAY, 12);
|
||||||
|
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd");
|
||||||
|
result = dateFormatter.format(calendar.getTime());
|
||||||
|
} catch (ParseException e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user