From 6ed44eedf66fe9b1d264568878d33976c44a8c44 Mon Sep 17 00:00:00 2001 From: mguessan Date: Fri, 4 Jun 2010 17:38:15 +0000 Subject: [PATCH] Caldav: fix 2902372 private flag handling undex iCal 4 (OSX 10.6 Snow Leopard) git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1075 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- .../davmail/exchange/ExchangeSession.java | 37 +++++++++++++------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/src/java/davmail/exchange/ExchangeSession.java b/src/java/davmail/exchange/ExchangeSession.java index 31c5f076..68531b0c 100644 --- a/src/java/davmail/exchange/ExchangeSession.java +++ b/src/java/davmail/exchange/ExchangeSession.java @@ -2358,6 +2358,18 @@ public abstract class ExchangeSession { if (validTimezoneId != null && line.indexOf(";TZID=") >= 0) { line = fixTimezoneId(line, validTimezoneId); } + if (fromServer && line.startsWith("PRODID:") && eventClass != null) { + result.writeLine(line); + // set global calendarserver access for iCal 4 + if ("PRIVATE".equalsIgnoreCase(eventClass)) { + result.writeLine("X-CALENDARSERVER-ACCESS:CONFIDENTIAL"); + } else if ("CONFIDENTIAL".equalsIgnoreCase(eventClass)) { + result.writeLine("X-CALENDARSERVER-ACCESS:PRIVATE"); + } else if (eventClass != null) { + result.writeLine("X-CALENDARSERVER-ACCESS:" + eventClass); + } + continue; + } if (!fromServer && "BEGIN:VEVENT".equals(line) && !hasTimezone) { result.write(ExchangeSession.this.getVTimezone().timezoneBody); hasTimezone = true; @@ -2375,6 +2387,15 @@ public abstract class ExchangeSession { if (organizer == null) { result.writeLine("ORGANIZER:MAILTO:" + email); } + if (isAppleiCal) { + if ("CONFIDENTIAL".equalsIgnoreCase(eventClass)) { + result.writeLine("CLASS:PRIVATE"); + } else if ("PRIVATE".equalsIgnoreCase(eventClass)) { + result.writeLine("CLASS:CONFIDENTIAL"); + } else { + result.writeLine("CLASS:" + eventClass); + } + } } else if (!fromServer && line.startsWith("X-MICROSOFT-CDO-BUSYSTATUS:")) { line = "X-MICROSOFT-CDO-BUSYSTATUS:" + (!"TRANSPARENT".equals(transp) ? "BUSY" : "FREE"); } else if (!fromServer && !currentAllDayState.isAllDay && "X-MICROSOFT-CDO-ALLDAYEVENT:TRUE".equals(line)) { @@ -2391,18 +2412,9 @@ public abstract class ExchangeSession { line = "TZID:" + validTimezoneId; } else if ("BEGIN:VEVENT".equals(line)) { currentAllDayState = allDayStates.get(count++); + // remove calendarserver access } else if (line.startsWith("X-CALENDARSERVER-ACCESS:")) { - if (!isAppleiCal) { - continue; - } else { - if ("CONFIDENTIAL".equalsIgnoreCase(eventClass)) { - result.writeLine("CLASS:PRIVATE"); - } else if ("PRIVATE".equalsIgnoreCase(eventClass)) { - result.writeLine("CLASS:CONFIDENTIAL"); - } else { - result.writeLine("CLASS:" + eventClass); - } - } + continue; } else if (line.startsWith("EXDATE;TZID=") || line.startsWith("EXDATE:")) { // Apple iCal doesn't support EXDATE with multiple exceptions // on one line. Split into multiple EXDATE entries (which is @@ -2459,9 +2471,10 @@ public abstract class ExchangeSession { // Don't recognize this type of action: pass it through } else if (line.startsWith("CLASS:")) { - if (isAppleiCal) { + if (!fromServer && isAppleiCal) { continue; } else { + // still set calendarserver access inside event for iCal 3 if ("PRIVATE".equalsIgnoreCase(eventClass)) { result.writeLine("X-CALENDARSERVER-ACCESS:CONFIDENTIAL"); } else if ("CONFIDENTIAL".equalsIgnoreCase(eventClass)) {