From 1d6f4284c878a8827bab527b3dd497d90722a3f2 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Mon, 8 Feb 2016 12:40:54 +0100 Subject: [PATCH] determine file size of all files during directory listing [ci skip] --- .../webdav/jackrabbitservlet/DavFile.java | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/main/frontend-webdav/src/main/java/org/cryptomator/webdav/jackrabbitservlet/DavFile.java b/main/frontend-webdav/src/main/java/org/cryptomator/webdav/jackrabbitservlet/DavFile.java index 6b782b8a3..68092de29 100644 --- a/main/frontend-webdav/src/main/java/org/cryptomator/webdav/jackrabbitservlet/DavFile.java +++ b/main/frontend-webdav/src/main/java/org/cryptomator/webdav/jackrabbitservlet/DavFile.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.nio.channels.Channels; import java.nio.channels.WritableByteChannel; import java.time.Instant; +import java.util.Optional; import org.apache.jackrabbit.webdav.DavException; import org.apache.jackrabbit.webdav.DavResource; @@ -22,6 +23,7 @@ import org.apache.jackrabbit.webdav.io.OutputContext; import org.apache.jackrabbit.webdav.lock.LockManager; import org.apache.jackrabbit.webdav.property.DavProperty; import org.apache.jackrabbit.webdav.property.DavPropertyName; +import org.apache.jackrabbit.webdav.property.DavPropertySet; import org.apache.jackrabbit.webdav.property.DefaultDavProperty; import org.cryptomator.filesystem.ReadableFile; import org.cryptomator.filesystem.WritableFile; @@ -89,15 +91,32 @@ class DavFile extends DavNode { @Override public DavProperty getProperty(DavPropertyName name) { - if (DavPropertyName.GETCONTENTLENGTH.equals(name) && node.exists()) { - try (ReadableFile src = node.openReadable()) { - return new DefaultDavProperty(DavPropertyName.GETCONTENTLENGTH, src.size()); - } + if (DavPropertyName.GETCONTENTLENGTH.equals(name)) { + return sizeProperty().get(); } else { return super.getProperty(name); } } + @Override + public DavPropertySet getProperties() { + final DavPropertySet result = super.getProperties(); + if (!result.contains(DavPropertyName.GETCONTENTLENGTH)) { + sizeProperty().ifPresent(result::add); + } + return result; + } + + private Optional> sizeProperty() { + if (node.exists()) { + try (ReadableFile src = node.openReadable()) { + return Optional.of(new DefaultDavProperty(DavPropertyName.GETCONTENTLENGTH, src.size())); + } + } else { + return Optional.empty(); + } + } + @Override protected void setModificationTime(Instant instant) { try (WritableFile writable = node.openWritable()) {