diff --git a/src/de/aflx/sardine/DavResource.java b/src/de/aflx/sardine/DavResource.java index 6eba99f..2515f2f 100644 --- a/src/de/aflx/sardine/DavResource.java +++ b/src/de/aflx/sardine/DavResource.java @@ -215,13 +215,24 @@ private String getContentType(Response response) */ private long getContentLength(Response response) { -// Propstat list = response.getPropstat(); -// if(list.equals("") || null == list) { -// return null; -// } -// Getcontentlength gcl = list.getProp().ge; + + Propstat list = response.getPropstat(); + if(list.equals("") || null == list) { + return DEFAULT_CONTENT_LENGTH; + } - return -1; + String gcl = list.getProp().getGetcontentlength(); + if ((gcl != null) && (!gcl.isEmpty())) + { + try + { + return Long.parseLong(gcl); + } catch (NumberFormatException e) + { + log.warn(String.format("Failed to parse content length %s", gcl)); + } + } + return DEFAULT_CONTENT_LENGTH; /*List list = response.getPropstat(); if (list.isEmpty()) { return DEFAULT_CONTENT_LENGTH; diff --git a/src/de/aflx/sardine/Sardine.java b/src/de/aflx/sardine/Sardine.java index 93e9757..d6a25ae 100644 --- a/src/de/aflx/sardine/Sardine.java +++ b/src/de/aflx/sardine/Sardine.java @@ -61,6 +61,19 @@ public interface Sardine */ List list(String url, int depth) throws IOException; + /** + * Gets a directory listing using WebDAV PROPFIND. + * + * @param url Path to the resource including protocol and hostname + * @param depth The depth to look at (use 0 for single ressource, 1 for directory listing) + * @param allProp If allprop should be used, which can be inefficient sometimes; + * warning: no allprop does not retrieve custom props, just the basic ones + * @return List of resources for this URI including the parent resource itself + * @throws IOException I/O error or HTTP response validation failure + */ + List list(String url, int depth, boolean allProp) + throws IOException; + /** * @see #patch(String, java.util.Map, java.util.List) */ diff --git a/src/de/aflx/sardine/impl/SardineImpl.java b/src/de/aflx/sardine/impl/SardineImpl.java index 4a3d273..8da62c4 100644 --- a/src/de/aflx/sardine/impl/SardineImpl.java +++ b/src/de/aflx/sardine/impl/SardineImpl.java @@ -95,13 +95,11 @@ import de.aflx.sardine.impl.methods.HttpMove; import de.aflx.sardine.impl.methods.HttpPropFind; import de.aflx.sardine.impl.methods.HttpUnlock; -import de.aflx.sardine.model.Allprop; import de.aflx.sardine.model.Exclusive; import de.aflx.sardine.model.Lockinfo; import de.aflx.sardine.model.Lockscope; import de.aflx.sardine.model.Locktype; import de.aflx.sardine.model.Multistatus; -import de.aflx.sardine.model.Propfind; import de.aflx.sardine.model.Response; import de.aflx.sardine.model.Write; import de.aflx.sardine.util.Logger; @@ -390,14 +388,25 @@ public List list(String url) throws IOException { * * @see de.aflx.sardine.Sardine#list(java.lang.String) */ - public List list(String url, int depth) throws IOException { + @Override + public List list(String url, int depth) throws IOException + { + return list(url, depth, true); + } + + @Override + public List list(String url, int depth, boolean allProp) throws IOException + { log.warn("list"); HttpPropFind entity = new HttpPropFind(url); entity.setDepth(Integer.toString(depth)); - Propfind body = new Propfind(); - body.setAllprop(new Allprop()); +// Propfind body = new Propfind(); + if (allProp) + entity.setEntity(new StringEntity(" ", UTF_8)); + else + entity.setEntity(new StringEntity(" ", UTF_8)); + // entity.setEntity(new StringEntity(SardineUtil.toXml(body), UTF_8)); - entity.setEntity(new StringEntity(" ", UTF_8)); Multistatus multistatus = this.execute(entity, new MultiStatusResponseHandler()); List responses = multistatus.getResponse(); diff --git a/src/de/aflx/sardine/model/Prop.java b/src/de/aflx/sardine/model/Prop.java index 102e068..26c02a7 100644 --- a/src/de/aflx/sardine/model/Prop.java +++ b/src/de/aflx/sardine/model/Prop.java @@ -57,14 +57,16 @@ public class Prop { @Element private Resourcetype resourcetype; - @Element + @Element (required = false) private String creationdate; - @Element + @Element (required = false) private String getlastmodified; - @Element + @Element (required = false) private String getetag; @Element (required = false) private String getcontenttype; + @Element (required = false) + private String getcontentlength; public Resourcetype getResourcetype() { return resourcetype; @@ -85,9 +87,13 @@ public String getGetetag() { public String getGetcontenttype() { return getcontenttype; } - - /*protected Creationdate creationdate; + public String getGetcontentlength() { + return getcontentlength; + } + + + /*protected Creationdate creationdate; protected Displayname displayname; protected Getcontentlanguage getcontentlanguage; protected Getcontentlength getcontentlength;