diff --git a/src/java/davmail/caldav/CaldavConnection.java b/src/java/davmail/caldav/CaldavConnection.java index a10cc577..3ecca6e4 100644 --- a/src/java/davmail/caldav/CaldavConnection.java +++ b/src/java/davmail/caldav/CaldavConnection.java @@ -259,7 +259,8 @@ public class CaldavConnection extends AbstractConnection { reportItems(request); // event requests } else if (request.isPut()) { - String etag = request.getHeader("if-match"); + // remove quotes on etag for Evolution + String etag = StringUtil.removeQuotes(request.getHeader("if-match")); String noneMatch = request.getHeader("if-none-match"); ExchangeSession.ItemResult itemResult = session.createOrUpdateItem(request.getFolderPath(), lastPath, request.getBody(), etag, noneMatch); sendHttpResponse(itemResult.status, buildEtagHeader(itemResult.etag), null, "", true); diff --git a/src/java/davmail/exchange/ews/EwsExchangeSession.java b/src/java/davmail/exchange/ews/EwsExchangeSession.java index bc07f036..2b61e001 100644 --- a/src/java/davmail/exchange/ews/EwsExchangeSession.java +++ b/src/java/davmail/exchange/ews/EwsExchangeSession.java @@ -1187,7 +1187,7 @@ public class EwsExchangeSession extends ExchangeSession { if (currentItem != null) { currentItemId = new ItemId(currentItem); currentEtag = currentItem.get(Field.get("etag").getResponseName()); - LOGGER.debug("Existing item found with etag: " + currentEtag + " id: " + currentItemId.id); + LOGGER.debug("Existing item found with etag: " + currentEtag + " client etag: "+etag+" id: " + currentItemId.id); } if ("*".equals(noneMatch)) { // create requested diff --git a/src/java/davmail/util/StringUtil.java b/src/java/davmail/util/StringUtil.java index 05cd1957..a7b7ea39 100644 --- a/src/java/davmail/util/StringUtil.java +++ b/src/java/davmail/util/StringUtil.java @@ -385,4 +385,21 @@ public final class StringUtil { } return result; } + + /** + * Remove quotes if present on value. + * @param value input value + * @return unquoted string + */ + public static String removeQuotes(String value) { + String result = value; + if (result.startsWith("\"") || result.startsWith("{") || result.startsWith("(")) { + result = result.substring(1); + } + if (result.endsWith("\"") || result.endsWith("}") || result.endsWith(")")) { + result = result.substring(0, result.length() - 1); + } + return result; + } + } diff --git a/src/test/davmail/util/StringUtilTest.java b/src/test/davmail/util/StringUtilTest.java index 3cb0f9a0..edb1e97e 100644 --- a/src/test/davmail/util/StringUtilTest.java +++ b/src/test/davmail/util/StringUtilTest.java @@ -97,4 +97,9 @@ public class StringUtilTest extends TestCase { System.out.println("Elapsed: " + (System.currentTimeMillis() - startTime) + " ms"); } } + + public void testRemoveQuotes() { + assertEquals("test", StringUtil.removeQuotes("test")); + assertEquals("test", StringUtil.removeQuotes("\"test\"")); + } }