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. 39
      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, ocsize: true,
ocfavorite: true, ocfavorite: true,
), ),
depth: '1', depth: WebDavDepth.one,
), ),
(final response) => response.toWebDavFiles().sublist(1), (final response) => response.toWebDavFiles().sublist(1),
emitEmptyCache: true, emitEmptyCache: true,

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

@ -234,16 +234,15 @@ class WebDavClient {
/// Retrieves the props for the resource at [path]. /// Retrieves the props for the resource at [path].
/// ///
/// Optionally populates the given [prop]s on the returned files. /// Optionally populates the given [prop]s on the returned resources.
/// [depth] can be '0', '1' or 'infinity'. /// [depth] can be used to limit scope of the returned resources.
/// See http://www.webdav.org/specs/rfc2518.html#METHOD_PROPFIND for more information. /// See http://www.webdav.org/specs/rfc2518.html#METHOD_PROPFIND for more information.
Future<WebDavMultistatus> propfind( Future<WebDavMultistatus> propfind(
final String path, { final String path, {
final WebDavPropWithoutValues? prop, final WebDavPropWithoutValues? prop,
final String? depth, final WebDavDepth? depth,
}) async { }) async =>
assert(depth == null || ['0', '1', 'infinity'].contains(depth), 'Depth has to be 0, 1 or infinity'); _parseResponse(
return _parseResponse(
await _send( await _send(
'PROPFIND', 'PROPFIND',
_constructPath(path), _constructPath(path),
@ -258,16 +257,15 @@ class WebDavClient {
), ),
headers: { headers: {
if (depth != null) ...{ if (depth != null) ...{
'Depth': depth, 'Depth': depth.value,
}, },
}, },
), ),
); );
}
/// Runs the filter-files report with the [filterRules] on the resource at [path]. /// 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. /// See https://github.com/owncloud/docs/issues/359 for more information.
Future<WebDavMultistatus> report( Future<WebDavMultistatus> report(
final String path, final String path,
@ -378,3 +376,26 @@ class WebDavOptions {
/// DAV search and locating capabilities as advertised by the server in the 'dasl' header. /// DAV search and locating capabilities as advertised by the server in the 'dasl' header.
Set<String> searchCapabilities; 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 { test('List directory recursively', () async {
final responses = (await client.webdav.propfind( final responses = (await client.webdav.propfind(
'/', '/',
depth: 'infinity', depth: WebDavDepth.infinity,
)) ))
.responses; .responses;
expect(responses, hasLength(48)); expect(responses, hasLength(48));
@ -149,7 +149,7 @@ void main() {
davresourcetype: true, davresourcetype: true,
ocsize: true, ocsize: true,
), ),
depth: '0', depth: WebDavDepth.zero,
)) ))
.toWebDavFiles() .toWebDavFiles()
.single; .single;

Loading…
Cancel
Save