Browse Source

Merge pull request #563 from nextcloud/refactor/webdav-depth-enum

Refactor/webdav depth enum
pull/564/head
Kate 1 year ago committed by GitHub
parent
commit
da74b30733
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 2
      packages/neon/neon_files/lib/blocs/browser.dart
  2. 69
      packages/nextcloud/lib/src/webdav/client.dart
  3. 4
      packages/nextcloud/test/webdav_test.dart

2
packages/neon/neon_files/lib/blocs/browser.dart

@ -54,7 +54,7 @@ class FilesBrowserBloc extends InteractiveBloc implements FilesBrowserBlocEvents
ocsize: true,
ocfavorite: true,
),
depth: '1',
depth: WebDavDepth.one,
),
(final response) => response.toWebDavFiles().sublist(1),
emitEmptyCache: true,

69
packages/nextcloud/lib/src/webdav/client.dart

@ -234,40 +234,38 @@ class WebDavClient {
/// Retrieves the props for the resource at [path].
///
/// Optionally populates the given [prop]s on the returned files.
/// [depth] can be '0', '1' or 'infinity'.
/// Optionally populates the given [prop]s on the returned resources.
/// [depth] can be used to limit scope of the returned resources.
/// See http://www.webdav.org/specs/rfc2518.html#METHOD_PROPFIND for more information.
Future<WebDavMultistatus> propfind(
final String path, {
final WebDavPropWithoutValues? prop,
final String? depth,
}) async {
assert(depth == null || ['0', '1', 'infinity'].contains(depth), 'Depth has to be 0, 1 or infinity');
return _parseResponse(
await _send(
'PROPFIND',
_constructPath(path),
data: Stream.value(
Uint8List.fromList(
utf8.encode(
WebDavPropfind(prop: prop ?? WebDavPropWithoutValues())
.toXmlElement(namespaces: namespaces)
.toXmlString(),
final WebDavDepth? depth,
}) async =>
_parseResponse(
await _send(
'PROPFIND',
_constructPath(path),
data: Stream.value(
Uint8List.fromList(
utf8.encode(
WebDavPropfind(prop: prop ?? WebDavPropWithoutValues())
.toXmlElement(namespaces: namespaces)
.toXmlString(),
),
),
),
),
headers: {
if (depth != null) ...{
'Depth': depth,
headers: {
if (depth != null) ...{
'Depth': depth.value,
},
},
},
),
);
}
),
);
/// Runs the filter-files report with the [filterRules] on the resource at [path].
///
/// Optionally populates the [prop]s on the returned files.
/// Optionally populates the [prop]s on the returned resources.
/// See https://github.com/owncloud/docs/issues/359 for more information.
Future<WebDavMultistatus> report(
final String path,
@ -378,3 +376,26 @@ class WebDavOptions {
/// DAV search and locating capabilities as advertised by the server in the 'dasl' header.
Set<String> searchCapabilities;
}
/// Depth used for [WebDavClient.propfind].
///
/// See http://www.webdav.org/specs/rfc2518.html#HEADER_Depth for more information.
enum WebDavDepth {
/// Returns props of the resource.
zero('0'),
/// Returns props of the resource and its immediate children.
///
/// Only works on collections and returns the same as [WebDavDepth.zero] for other resources.
one('1'),
/// Returns props of the resource and all its progeny.
///
/// Only works on collections and returns the same as [WebDavDepth.zero] for other resources.
infinity('infinity');
const WebDavDepth(this.value);
// ignore: public_member_api_docs
final String value;
}

4
packages/nextcloud/test/webdav_test.dart

@ -47,7 +47,7 @@ void main() {
test('List directory recursively', () async {
final responses = (await client.webdav.propfind(
'/',
depth: 'infinity',
depth: WebDavDepth.infinity,
))
.responses;
expect(responses, hasLength(48));
@ -149,7 +149,7 @@ void main() {
davresourcetype: true,
ocsize: true,
),
depth: '0',
depth: WebDavDepth.zero,
))
.toWebDavFiles()
.single;

Loading…
Cancel
Save