From 649bc9cb3b907f8224f2195d87aee972f8ca020b Mon Sep 17 00:00:00 2001 From: mguessan Date: Tue, 13 Jul 2010 07:57:25 +0000 Subject: [PATCH] Carddav: move value decoding back to VCardReader git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1182 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- .../davmail/exchange/ExchangeSession.java | 36 +------------------ src/java/davmail/exchange/VCardReader.java | 29 ++++++++++++++- 2 files changed, 29 insertions(+), 36 deletions(-) diff --git a/src/java/davmail/exchange/ExchangeSession.java b/src/java/davmail/exchange/ExchangeSession.java index e1c56b57..19d4b0d2 100644 --- a/src/java/davmail/exchange/ExchangeSession.java +++ b/src/java/davmail/exchange/ExchangeSession.java @@ -2682,41 +2682,7 @@ public abstract class ExchangeSession { protected ItemResult createOrUpdateContact(String folderPath, String itemName, String itemBody, String etag, String noneMatch) throws IOException { // parse VCARD body to build contact property map - Map properties = new HashMap() { - - @Override - public String put(String key, String value) { - String currentValue = get(key); - super.put(key, decodeValue(key, value)); - return currentValue; - } - - private String decodeValue(String key, String value) { - if (value == null || (value.indexOf('\\') < 0 && value.indexOf(',') < 0)) { - return value; - } else { - // decode value - StringBuilder decodedValue = new StringBuilder(); - for (int i = 0; i < value.length(); i++) { - char c = value.charAt(i); - if (c == '\\') { - //noinspection AssignmentToForLoopParameter - c = value.charAt(++i); - if (c == 'n') { - c = '\n'; - } else if (c == 'r') { - c = '\r'; - } - } else if (c == ',' && !"description".equals(key)) { - // convert multiple values to multiline values (e.g. street) - c = '\n'; - } - decodedValue.append(c); - } - return decodedValue.toString(); - } - } - }; + Map properties = new HashMap(); properties.put("outlookmessageclass", "IPM.Contact"); VCardReader reader = new VCardReader(new StringReader(itemBody)); diff --git a/src/java/davmail/exchange/VCardReader.java b/src/java/davmail/exchange/VCardReader.java index 0a67f167..11d8cba5 100644 --- a/src/java/davmail/exchange/VCardReader.java +++ b/src/java/davmail/exchange/VCardReader.java @@ -80,8 +80,35 @@ public class VCardReader extends ICSBufferedReader { if (values == null) { values = new ArrayList(); } - values.add(value); + values.add(decodeValue(value)); } + + protected String decodeValue(String value) { + if (value == null || (value.indexOf('\\') < 0 && value.indexOf(',') < 0)) { + return value; + } else { + // decode value + StringBuilder decodedValue = new StringBuilder(); + for (int i = 0; i < value.length(); i++) { + char c = value.charAt(i); + if (c == '\\') { + //noinspection AssignmentToForLoopParameter + c = value.charAt(++i); + if (c == 'n') { + c = '\n'; + } else if (c == 'r') { + c = '\r'; + } + } else if (c == ',' && !"NOTE".equals(key)) { + // convert multiple values to multiline values (e.g. street) + c = '\n'; + } + decodedValue.append(c); + } + return decodedValue.toString(); + } + } + } /**