Browse Source

Merge pull request #413 from Leptopoda/feature/streams

Feature/streams
pull/415/head
Nikolas Rimikis 1 year ago committed by GitHub
parent
commit
ca122ea3c2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 297
      packages/dynamite/dynamite/lib/src/openapi_builder.dart
  2. 1
      packages/dynamite/dynamite_runtime/lib/http_client.dart
  3. 129
      packages/dynamite/dynamite_runtime/lib/src/http_client.dart
  4. 2
      packages/dynamite/dynamite_runtime/pubspec.yaml
  5. 386
      packages/nextcloud/lib/src/nextcloud.openapi.dart
  6. 8
      packages/nextcloud/lib/src/webdav/client.dart
  7. 1
      packages/nextcloud/pubspec.yaml

297
packages/dynamite/dynamite/lib/src/openapi_builder.dart

@ -67,48 +67,14 @@ class OpenAPIBuilder implements Builder {
"import 'package:built_value/json_object.dart';", "import 'package:built_value/json_object.dart';",
"import 'package:built_value/serializer.dart';", "import 'package:built_value/serializer.dart';",
"import 'package:built_value/standard_json_plugin.dart';", "import 'package:built_value/standard_json_plugin.dart';",
"import 'package:cookie_jar/cookie_jar.dart';",
"import 'package:dynamite_runtime/content_string.dart';", "import 'package:dynamite_runtime/content_string.dart';",
"import 'package:dynamite_runtime/http_client.dart';",
"import 'package:universal_io/io.dart';", "import 'package:universal_io/io.dart';",
'', '',
"export 'package:cookie_jar/cookie_jar.dart';", "export 'package:dynamite_runtime/http_client.dart';",
'', '',
"part '${p.basename(outputId.changeExtension('.g.dart').path)}';", "part '${p.basename(outputId.changeExtension('.g.dart').path)}';",
'', '',
Extension(
(final b) => b
..name = '${prefix}HttpClientResponseBody'
..on = refer('HttpClientResponse')
..methods.addAll([
Method(
(final b) => b
..name = 'bodyBytes'
..returns = refer('Future<Uint8List>')
..type = MethodType.getter
..modifier = MethodModifier.async
..body = const Code(
'''
final chunks = await toList();
if (chunks.isEmpty) {
return Uint8List(0);
}
return Uint8List.fromList(chunks.reduce((final value, final element) => [...value, ...element]));
''',
),
),
Method(
(final b) => b
..name = 'body'
..returns = refer('Future<String>')
..type = MethodType.getter
..modifier = MethodModifier.async
..lambda = true
..body = const Code(
'utf8.decode(await bodyBytes)',
),
),
]),
).accept(emitter).toString(),
Class( Class(
(final b) => b (final b) => b
..name = '${prefix}Response' ..name = '${prefix}Response'
@ -116,20 +82,7 @@ class OpenAPIBuilder implements Builder {
refer('T'), refer('T'),
refer('U'), refer('U'),
]) ])
..fields.addAll([ ..extend = refer('DynamiteResponse<T, U>')
Field(
(final b) => b
..name = 'data'
..type = refer('T')
..modifier = FieldModifier.final$,
),
Field(
(final b) => b
..name = 'headers'
..type = refer('U')
..modifier = FieldModifier.final$,
),
])
..constructors.add( ..constructors.add(
Constructor( Constructor(
(final b) => b (final b) => b
@ -138,7 +91,7 @@ class OpenAPIBuilder implements Builder {
(final name) => Parameter( (final name) => Parameter(
(final b) => b (final b) => b
..name = name ..name = name
..toThis = true, ..toSuper = true,
), ),
), ),
), ),
@ -159,27 +112,8 @@ class OpenAPIBuilder implements Builder {
).accept(emitter).toString(), ).accept(emitter).toString(),
Class( Class(
(final b) => b (final b) => b
..name = 'RawResponse' ..name = '${prefix}ApiException'
..fields.addAll([ ..extend = refer('DynamiteApiException')
Field(
(final b) => b
..name = 'statusCode'
..type = refer('int')
..modifier = FieldModifier.final$,
),
Field(
(final b) => b
..name = 'headers'
..type = refer('Map<String, String>')
..modifier = FieldModifier.final$,
),
Field(
(final b) => b
..name = 'body'
..type = refer('Uint8List')
..modifier = FieldModifier.final$,
),
])
..constructors.add( ..constructors.add(
Constructor( Constructor(
(final b) => b (final b) => b
@ -188,61 +122,43 @@ class OpenAPIBuilder implements Builder {
(final name) => Parameter( (final name) => Parameter(
(final b) => b (final b) => b
..name = name ..name = name
..toThis = true, ..toSuper = true,
), ),
), ),
), ),
), ),
) )
..methods.add( ..methods.addAll([
Method( Method(
(final b) => b
..name = 'toString'
..returns = refer('String')
..annotations.add(refer('override'))
..lambda = true
..body = const Code(
r"'RawResponse(statusCode: $statusCode, headers: $headers, body: ${utf8.decode(body)})'",
),
),
),
).accept(emitter).toString(),
Class(
(final b) => b
..name = '${prefix}ApiException'
..extend = refer('RawResponse')
..implements.add(refer('Exception'))
..constructors.addAll(
[
Constructor(
(final b) => b
..requiredParameters.addAll(
['statusCode', 'headers', 'body'].map(
(final name) => Parameter(
(final b) => b
..name = name
..toSuper = true,
),
),
),
),
Constructor(
(final b) => b (final b) => b
..name = 'fromResponse' ..name = 'fromResponse'
..factory = true ..returns = refer('Future<${prefix}ApiException>')
..lambda = true ..static = true
..modifier = MethodModifier.async
..requiredParameters.add( ..requiredParameters.add(
Parameter( Parameter(
(final b) => b (final b) => b
..name = 'response' ..name = 'response'
..type = refer('RawResponse'), ..type = refer('HttpClientResponse'),
), ),
) )
..body = Code('${prefix}ApiException(response.statusCode, response.headers, response.body,)'), ..body = Block.of([
const Code('final data = await response.bodyBytes;'),
const Code(''),
const Code('String body;'),
const Code('try {'),
const Code('body = utf8.decode(data);'),
const Code('} on FormatException {'),
const Code("body = 'binary';"),
const Code('}'),
const Code(''),
Code('return ${prefix}ApiException('),
const Code('response.statusCode,'),
const Code('response.responseHeaders,'),
const Code('body,'),
const Code(');'),
]),
), ),
],
)
..methods.add(
Method( Method(
(final b) => b (final b) => b
..name = 'toString' ..name = 'toString'
@ -250,32 +166,11 @@ class OpenAPIBuilder implements Builder {
..annotations.add(refer('override')) ..annotations.add(refer('override'))
..lambda = true ..lambda = true
..body = Code( ..body = Code(
"'${prefix}ApiException(statusCode: \${super.statusCode}, headers: \${super.headers}, body: \${utf8.decode(super.body)})'", "'${prefix}ApiException(statusCode: \$statusCode, headers: \$headers, body: \$body)'",
),
), ),
), ),
).accept(emitter).toString(),
if (hasAnySecurity) ...[
Class(
(final b) => b
..name = '${prefix}Authentication'
..abstract = true
..methods.addAll([
Method(
(final b) => b
..name = 'id'
..type = MethodType.getter
..returns = refer('String'),
),
Method(
(final b) => b
..name = 'headers'
..type = MethodType.getter
..returns = refer('Map<String, String>'),
),
]), ]),
).accept(emitter).toString(), ).accept(emitter).toString(),
],
]; ];
if (spec.components?.securitySchemes != null) { if (spec.components?.securitySchemes != null) {
@ -291,7 +186,7 @@ class OpenAPIBuilder implements Builder {
final fields = ['username', 'password']; final fields = ['username', 'password'];
b b
..name = '${prefix}HttpBasicAuthentication' ..name = '${prefix}HttpBasicAuthentication'
..extend = refer('${prefix}Authentication') ..extend = refer('DynamiteAuthentication')
..constructors.add( ..constructors.add(
Constructor( Constructor(
(final b) => b (final b) => b
@ -352,7 +247,7 @@ class OpenAPIBuilder implements Builder {
(final b) { (final b) {
b b
..name = '${prefix}HttpBearerAuthentication' ..name = '${prefix}HttpBearerAuthentication'
..extend = refer('${prefix}Authentication') ..extend = refer('DynamiteAuthentication')
..constructors.add( ..constructors.add(
Constructor( Constructor(
(final b) => b (final b) => b
@ -437,42 +332,7 @@ class OpenAPIBuilder implements Builder {
(final b) { (final b) {
if (isRootClient) { if (isRootClient) {
b b
..fields.addAll([ ..extend = refer('DynamiteClient')
Field(
(final b) => b
..name = 'baseURL'
..type = refer('String')
..modifier = FieldModifier.final$,
),
Field(
(final b) => b
..name = 'baseHeaders'
..type = refer('Map<String, String>')
..modifier = FieldModifier.final$
..late = true,
),
Field(
(final b) => b
..name = 'httpClient'
..type = refer('HttpClient')
..modifier = FieldModifier.final$
..late = true,
),
Field(
(final b) => b
..name = 'cookieJar'
..type = refer('CookieJar?')
..modifier = FieldModifier.final$,
),
if (hasAnySecurity) ...[
Field(
(final b) => b
..name = 'authentications'
..type = refer('List<${prefix}Authentication>')
..modifier = FieldModifier.final$,
),
],
])
..constructors.add( ..constructors.add(
Constructor( Constructor(
(final b) => b (final b) => b
@ -480,109 +340,45 @@ class OpenAPIBuilder implements Builder {
Parameter( Parameter(
(final b) => b (final b) => b
..name = 'baseURL' ..name = 'baseURL'
..toThis = true, ..toSuper = true,
), ),
) )
..optionalParameters.addAll([ ..optionalParameters.addAll([
Parameter( Parameter(
(final b) => b (final b) => b
..name = 'baseHeaders' ..name = 'baseHeaders'
..type = refer('Map<String, String>?') ..toSuper = true
..named = true, ..named = true,
), ),
Parameter( Parameter(
(final b) => b (final b) => b
..name = 'userAgent' ..name = 'userAgent'
..type = refer('String?') ..toSuper = true
..named = true, ..named = true,
), ),
Parameter( Parameter(
(final b) => b (final b) => b
..name = 'httpClient' ..name = 'httpClient'
..type = refer('HttpClient?') ..toSuper = true
..named = true, ..named = true,
), ),
Parameter( Parameter(
(final b) => b (final b) => b
..name = 'cookieJar' ..name = 'cookieJar'
..toThis = true ..toSuper = true
..named = true, ..named = true,
), ),
if (hasAnySecurity) ...[ if (hasAnySecurity) ...[
Parameter( Parameter(
(final b) => b (final b) => b
..name = 'authentications' ..name = 'authentications'
..toThis = true ..toSuper = true
..named = true ..named = true,
..defaultTo = const Code('const []'),
), ),
], ],
]) ]),
..body = const Code('''
this.baseHeaders = {
...?baseHeaders,
};
this.httpClient = (httpClient ?? HttpClient())..userAgent = userAgent;
'''),
),
)
..methods.addAll([
Method(
(final b) => b
..name = 'doRequest'
..returns = refer('Future<RawResponse>')
..modifier = MethodModifier.async
..requiredParameters.addAll([
Parameter(
(final b) => b
..name = 'method'
..type = refer('String'),
),
Parameter(
(final b) => b
..name = 'path'
..type = refer('String'),
),
Parameter(
(final b) => b
..name = 'headers'
..type = refer('Map<String, String>'),
),
Parameter(
(final b) => b
..name = 'body'
..type = refer('Uint8List?'),
), ),
])
..body = const Code(r'''
final uri = Uri.parse('$baseURL$path');
final request = await httpClient.openUrl(method, uri);
for (final header in {...baseHeaders, ...headers}.entries) {
request.headers.add(header.key, header.value);
}
if (body != null) {
request.add(body.toList());
}
if (cookieJar != null) {
request.cookies.addAll(await cookieJar!.loadForRequest(uri));
}
final response = await request.close();
if (cookieJar != null) {
await cookieJar!.saveFromResponse(uri, response.cookies);
}
final responseHeaders = <String, String>{};
response.headers.forEach((final name, final values) {
responseHeaders[name] = values.last;
});
return RawResponse(
response.statusCode,
responseHeaders,
await response.bodyBytes,
); );
'''),
),
]);
} else { } else {
b b
..fields.add( ..fields.add(
@ -934,16 +730,21 @@ class OpenAPIBuilder implements Builder {
if (mimeType == '*/*' || mimeType.startsWith('image/')) { if (mimeType == '*/*' || mimeType.startsWith('image/')) {
dataType = 'Uint8List'; dataType = 'Uint8List';
dataValue = 'response.body'; dataValue = 'response.bodyBytes';
} else if (mimeType.startsWith('text/')) { } else if (mimeType.startsWith('text/')) {
dataType = 'String'; dataType = 'String';
dataValue = 'utf8.decode(response.body)'; dataValue = 'await response.body';
} else if (mimeType == 'application/json') { } else if (mimeType == 'application/json') {
dataType = result.name; dataType = result.name;
if (result.name == 'dynamic') { if (result.name == 'dynamic') {
dataValue = ''; dataValue = '';
} else if (result.name == 'String') {
// avoid unnecessary_await_in_return lint
dataValue = 'response.body';
} else if (result is TypeResultEnum || result is TypeResultBase) {
dataValue = result.deserialize(result.decode('await response.body'));
} else { } else {
dataValue = result.deserialize(result.decode('utf8.decode(response.body)')); dataValue = result.deserialize('await response.jsonBody');
} }
} else { } else {
throw Exception('Can not parse mime type "$mimeType"'); throw Exception('Can not parse mime type "$mimeType"');
@ -970,7 +771,7 @@ class OpenAPIBuilder implements Builder {
code.write('}'); code.write('}');
} }
code.write( code.write(
'throw ${prefix}ApiException.fromResponse(response); // coverage:ignore-line\n', 'throw await ${prefix}ApiException.fromResponse(response); // coverage:ignore-line\n',
); );
} else { } else {
b.returns = refer('Future'); b.returns = refer('Future');

1
packages/dynamite/dynamite_runtime/lib/http_client.dart

@ -0,0 +1 @@
export 'src/http_client.dart';

129
packages/dynamite/dynamite_runtime/lib/src/http_client.dart

@ -0,0 +1,129 @@
import 'dart:convert';
import 'dart:typed_data';
import 'package:cookie_jar/cookie_jar.dart';
import 'package:universal_io/io.dart';
export 'package:cookie_jar/cookie_jar.dart';
extension DynamiteHttpClientResponseBody on HttpClientResponse {
Future<Uint8List> get bodyBytes async {
final data = await expand((final element) => element).toList();
return Uint8List.fromList(data);
}
Future<String> get body => transform(utf8.decoder).join();
Future<dynamic> get jsonBody => transform(utf8.decoder).transform(json.decoder).first;
Map<String, String> get responseHeaders {
final responseHeaders = <String, String>{};
headers.forEach((final name, final values) {
responseHeaders[name] = values.last;
});
return responseHeaders;
}
}
class DynamiteResponse<T, U> {
DynamiteResponse(
this.data,
this.headers,
);
final T data;
final U headers;
@override
String toString() => 'DynamiteResponse(data: $data, headers: $headers)';
}
class DynamiteApiException implements Exception {
DynamiteApiException(
this.statusCode,
this.headers,
this.body,
);
final int statusCode;
final Map<String, String> headers;
final String body;
@override
String toString() => 'DynamiteApiException(statusCode: $statusCode, headers: $headers, body: $body)';
}
abstract class DynamiteAuthentication {
String get id;
Map<String, String> get headers;
}
class DynamiteHttpBasicAuthentication extends DynamiteAuthentication {
DynamiteHttpBasicAuthentication({
required this.username,
required this.password,
});
final String username;
final String password;
@override
String get id => 'basic_auth';
@override
Map<String, String> get headers => {
'Authorization': 'Basic ${base64.encode(utf8.encode('$username:$password'))}',
};
}
class DynamiteClient {
DynamiteClient(
this.baseURL, {
this.baseHeaders,
final String? userAgent,
final HttpClient? httpClient,
this.cookieJar,
this.authentications = const [],
}) : httpClient = (httpClient ?? HttpClient())..userAgent = userAgent;
final String baseURL;
final Map<String, String>? baseHeaders;
final HttpClient httpClient;
final CookieJar? cookieJar;
final List<DynamiteAuthentication> authentications;
Future<HttpClientResponse> doRequest(
final String method,
final String path,
final Map<String, String> headers,
final Uint8List? body,
) async {
final uri = Uri.parse('$baseURL$path');
final request = await httpClient.openUrl(method, uri);
for (final header in {...?baseHeaders, ...headers}.entries) {
request.headers.add(header.key, header.value);
}
if (body != null) {
request.add(body.toList());
}
if (cookieJar != null) {
request.cookies.addAll(await cookieJar!.loadForRequest(uri));
}
final response = await request.close();
if (cookieJar != null) {
await cookieJar!.saveFromResponse(uri, response.cookies);
}
return response;
}
}

2
packages/dynamite/dynamite_runtime/pubspec.yaml

@ -7,6 +7,8 @@ environment:
dependencies: dependencies:
built_value: ^8.5.0 built_value: ^8.5.0
cookie_jar: ^4.0.5
universal_io: ^2.2.2
dev_dependencies: dev_dependencies:
build_runner: ^2.4.2 build_runner: ^2.4.2

386
packages/nextcloud/lib/src/nextcloud.openapi.dart

@ -8,81 +8,53 @@ import 'package:built_value/built_value.dart';
import 'package:built_value/json_object.dart'; import 'package:built_value/json_object.dart';
import 'package:built_value/serializer.dart'; import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart'; import 'package:built_value/standard_json_plugin.dart';
import 'package:cookie_jar/cookie_jar.dart';
import 'package:dynamite_runtime/content_string.dart'; import 'package:dynamite_runtime/content_string.dart';
import 'package:dynamite_runtime/http_client.dart';
import 'package:universal_io/io.dart'; import 'package:universal_io/io.dart';
export 'package:cookie_jar/cookie_jar.dart'; export 'package:dynamite_runtime/http_client.dart';
part 'nextcloud.openapi.g.dart'; part 'nextcloud.openapi.g.dart';
extension NextcloudHttpClientResponseBody on HttpClientResponse { class NextcloudResponse<T, U> extends DynamiteResponse<T, U> {
Future<Uint8List> get bodyBytes async {
final chunks = await toList();
if (chunks.isEmpty) {
return Uint8List(0);
}
return Uint8List.fromList(chunks.reduce((final value, final element) => [...value, ...element]));
}
Future<String> get body async => utf8.decode(await bodyBytes);
}
class NextcloudResponse<T, U> {
NextcloudResponse( NextcloudResponse(
this.data, super.data,
this.headers, super.headers,
); );
final T data;
final U headers;
@override @override
String toString() => 'NextcloudResponse(data: $data, headers: $headers)'; String toString() => 'NextcloudResponse(data: $data, headers: $headers)';
} }
class RawResponse { class NextcloudApiException extends DynamiteApiException {
RawResponse(
this.statusCode,
this.headers,
this.body,
);
final int statusCode;
final Map<String, String> headers;
final Uint8List body;
@override
String toString() => 'RawResponse(statusCode: $statusCode, headers: $headers, body: ${utf8.decode(body)})';
}
class NextcloudApiException extends RawResponse implements Exception {
NextcloudApiException( NextcloudApiException(
super.statusCode, super.statusCode,
super.headers, super.headers,
super.body, super.body,
); );
factory NextcloudApiException.fromResponse(final RawResponse response) => NextcloudApiException( static Future<NextcloudApiException> fromResponse(final HttpClientResponse response) async {
final data = await response.bodyBytes;
String body;
try {
body = utf8.decode(data);
} on FormatException {
body = 'binary';
}
return NextcloudApiException(
response.statusCode, response.statusCode,
response.headers, response.responseHeaders,
response.body, body,
); );
}
@override @override
String toString() => String toString() => 'NextcloudApiException(statusCode: $statusCode, headers: $headers, body: $body)';
'NextcloudApiException(statusCode: ${super.statusCode}, headers: ${super.headers}, body: ${utf8.decode(super.body)})';
}
abstract class NextcloudAuthentication {
String get id;
Map<String, String> get headers;
} }
class NextcloudHttpBasicAuthentication extends NextcloudAuthentication { class NextcloudHttpBasicAuthentication extends DynamiteAuthentication {
NextcloudHttpBasicAuthentication({ NextcloudHttpBasicAuthentication({
required this.username, required this.username,
required this.password, required this.password,
@ -100,63 +72,15 @@ class NextcloudHttpBasicAuthentication extends NextcloudAuthentication {
}; };
} }
class NextcloudClient { class NextcloudClient extends DynamiteClient {
NextcloudClient( NextcloudClient(
this.baseURL, { super.baseURL, {
final Map<String, String>? baseHeaders, super.baseHeaders,
final String? userAgent, super.userAgent,
final HttpClient? httpClient, super.httpClient,
this.cookieJar, super.cookieJar,
this.authentications = const [], super.authentications,
}) {
this.baseHeaders = {
...?baseHeaders,
};
this.httpClient = (httpClient ?? HttpClient())..userAgent = userAgent;
}
final String baseURL;
late final Map<String, String> baseHeaders;
late final HttpClient httpClient;
final CookieJar? cookieJar;
final List<NextcloudAuthentication> authentications;
Future<RawResponse> doRequest(
final String method,
final String path,
final Map<String, String> headers,
final Uint8List? body,
) async {
final uri = Uri.parse('$baseURL$path');
final request = await httpClient.openUrl(method, uri);
for (final header in {...baseHeaders, ...headers}.entries) {
request.headers.add(header.key, header.value);
}
if (body != null) {
request.add(body.toList());
}
if (cookieJar != null) {
request.cookies.addAll(await cookieJar!.loadForRequest(uri));
}
final response = await request.close();
if (cookieJar != null) {
await cookieJar!.saveFromResponse(uri, response.cookies);
}
final responseHeaders = <String, String>{};
response.headers.forEach((final name, final values) {
responseHeaders[name] = values.last;
}); });
return RawResponse(
response.statusCode,
responseHeaders,
await response.bodyBytes,
);
}
NextcloudCoreClient get core => NextcloudCoreClient(this); NextcloudCoreClient get core => NextcloudCoreClient(this);
NextcloudNewsClient get news => NextcloudNewsClient(this); NextcloudNewsClient get news => NextcloudNewsClient(this);
@ -187,11 +111,11 @@ class NextcloudCoreClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudCoreServerStatus), specifiedType: const FullType(NextcloudCoreServerStatus),
)! as NextcloudCoreServerStatus; )! as NextcloudCoreServerStatus;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudCoreServerCapabilities> getCapabilities() async { Future<NextcloudCoreServerCapabilities> getCapabilities() async {
@ -214,11 +138,11 @@ class NextcloudCoreClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudCoreServerCapabilities), specifiedType: const FullType(NextcloudCoreServerCapabilities),
)! as NextcloudCoreServerCapabilities; )! as NextcloudCoreServerCapabilities;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudCoreNavigationApps> getNavigationApps() async { Future<NextcloudCoreNavigationApps> getNavigationApps() async {
@ -241,11 +165,11 @@ class NextcloudCoreClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudCoreNavigationApps), specifiedType: const FullType(NextcloudCoreNavigationApps),
)! as NextcloudCoreNavigationApps; )! as NextcloudCoreNavigationApps;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudCoreLoginFlowInit> initLoginFlow() async { Future<NextcloudCoreLoginFlowInit> initLoginFlow() async {
@ -263,11 +187,11 @@ class NextcloudCoreClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudCoreLoginFlowInit), specifiedType: const FullType(NextcloudCoreLoginFlowInit),
)! as NextcloudCoreLoginFlowInit; )! as NextcloudCoreLoginFlowInit;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudCoreLoginFlowResult> getLoginFlowResult({required final String token}) async { Future<NextcloudCoreLoginFlowResult> getLoginFlowResult({required final String token}) async {
@ -286,11 +210,11 @@ class NextcloudCoreClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudCoreLoginFlowResult), specifiedType: const FullType(NextcloudCoreLoginFlowResult),
)! as NextcloudCoreLoginFlowResult; )! as NextcloudCoreLoginFlowResult;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<Uint8List> getPreview({ Future<Uint8List> getPreview({
@ -337,9 +261,9 @@ class NextcloudCoreClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return response.body; return response.bodyBytes;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<Uint8List> getDarkAvatar({ Future<Uint8List> getDarkAvatar({
@ -366,9 +290,9 @@ class NextcloudCoreClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return response.body; return response.bodyBytes;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<Uint8List> getAvatar({ Future<Uint8List> getAvatar({
@ -395,9 +319,9 @@ class NextcloudCoreClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return response.body; return response.bodyBytes;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudCoreAutocompleteResult> autocomplete({ Future<NextcloudCoreAutocompleteResult> autocomplete({
@ -437,11 +361,11 @@ class NextcloudCoreClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudCoreAutocompleteResult), specifiedType: const FullType(NextcloudCoreAutocompleteResult),
)! as NextcloudCoreAutocompleteResult; )! as NextcloudCoreAutocompleteResult;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<JsonObject> deleteAppPassword() async { Future<JsonObject> deleteAppPassword() async {
@ -463,9 +387,9 @@ class NextcloudCoreClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return JsonObject(utf8.decode(response.body)); return JsonObject(await response.body);
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
} }
@ -494,11 +418,11 @@ class NextcloudNewsClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNewsSupportedAPIVersions), specifiedType: const FullType(NextcloudNewsSupportedAPIVersions),
)! as NextcloudNewsSupportedAPIVersions; )! as NextcloudNewsSupportedAPIVersions;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNewsListFolders> listFolders() async { Future<NextcloudNewsListFolders> listFolders() async {
@ -521,11 +445,11 @@ class NextcloudNewsClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNewsListFolders), specifiedType: const FullType(NextcloudNewsListFolders),
)! as NextcloudNewsListFolders; )! as NextcloudNewsListFolders;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNewsListFolders> createFolder({required final String name}) async { Future<NextcloudNewsListFolders> createFolder({required final String name}) async {
@ -549,11 +473,11 @@ class NextcloudNewsClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNewsListFolders), specifiedType: const FullType(NextcloudNewsListFolders),
)! as NextcloudNewsListFolders; )! as NextcloudNewsListFolders;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future renameFolder({ Future renameFolder({
@ -580,7 +504,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future deleteFolder({required final int folderId}) async { Future deleteFolder({required final int folderId}) async {
@ -603,7 +527,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future markFolderAsRead({ Future markFolderAsRead({
@ -630,7 +554,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNewsListFeeds> listFeeds() async { Future<NextcloudNewsListFeeds> listFeeds() async {
@ -653,11 +577,11 @@ class NextcloudNewsClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNewsListFeeds), specifiedType: const FullType(NextcloudNewsListFeeds),
)! as NextcloudNewsListFeeds; )! as NextcloudNewsListFeeds;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNewsListFeeds> addFeed({ Future<NextcloudNewsListFeeds> addFeed({
@ -687,11 +611,11 @@ class NextcloudNewsClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNewsListFeeds), specifiedType: const FullType(NextcloudNewsListFeeds),
)! as NextcloudNewsListFeeds; )! as NextcloudNewsListFeeds;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future deleteFeed({required final int feedId}) async { Future deleteFeed({required final int feedId}) async {
@ -714,7 +638,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future moveFeed({ Future moveFeed({
@ -743,7 +667,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future renameFeed({ Future renameFeed({
@ -770,7 +694,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future markFeedAsRead({ Future markFeedAsRead({
@ -797,7 +721,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNewsListArticles> listArticles({ Future<NextcloudNewsListArticles> listArticles({
@ -845,11 +769,11 @@ class NextcloudNewsClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNewsListArticles), specifiedType: const FullType(NextcloudNewsListArticles),
)! as NextcloudNewsListArticles; )! as NextcloudNewsListArticles;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNewsListArticles> listUpdatedArticles({ Future<NextcloudNewsListArticles> listUpdatedArticles({
@ -885,11 +809,11 @@ class NextcloudNewsClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNewsListArticles), specifiedType: const FullType(NextcloudNewsListArticles),
)! as NextcloudNewsListArticles; )! as NextcloudNewsListArticles;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future markArticleAsRead({required final int itemId}) async { Future markArticleAsRead({required final int itemId}) async {
@ -912,7 +836,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future markArticleAsUnread({required final int itemId}) async { Future markArticleAsUnread({required final int itemId}) async {
@ -935,7 +859,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future starArticle({required final int itemId}) async { Future starArticle({required final int itemId}) async {
@ -958,7 +882,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future unstarArticle({required final int itemId}) async { Future unstarArticle({required final int itemId}) async {
@ -981,7 +905,7 @@ class NextcloudNewsClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
} }
@ -1035,11 +959,11 @@ class NextcloudNotesClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(BuiltList, [FullType(NextcloudNotesNote)]), specifiedType: const FullType(BuiltList, [FullType(NextcloudNotesNote)]),
)! as BuiltList<NextcloudNotesNote>; )! as BuiltList<NextcloudNotesNote>;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNotesNote> createNote({ Future<NextcloudNotesNote> createNote({
@ -1082,12 +1006,10 @@ class NextcloudNotesClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(await response.jsonBody, specifiedType: const FullType(NextcloudNotesNote))!
json.decode(utf8.decode(response.body)), as NextcloudNotesNote;
specifiedType: const FullType(NextcloudNotesNote),
)! as NextcloudNotesNote;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNotesNote> getNote({ Future<NextcloudNotesNote> getNote({
@ -1120,12 +1042,10 @@ class NextcloudNotesClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(await response.jsonBody, specifiedType: const FullType(NextcloudNotesNote))!
json.decode(utf8.decode(response.body)), as NextcloudNotesNote;
specifiedType: const FullType(NextcloudNotesNote),
)! as NextcloudNotesNote;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNotesNote> updateNote({ Future<NextcloudNotesNote> updateNote({
@ -1174,12 +1094,10 @@ class NextcloudNotesClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(await response.jsonBody, specifiedType: const FullType(NextcloudNotesNote))!
json.decode(utf8.decode(response.body)), as NextcloudNotesNote;
specifiedType: const FullType(NextcloudNotesNote),
)! as NextcloudNotesNote;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<String> deleteNote({required final int id}) async { Future<String> deleteNote({required final int id}) async {
@ -1202,9 +1120,9 @@ class NextcloudNotesClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return utf8.decode(response.body); return response.body;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNotesSettings> getSettings() async { Future<NextcloudNotesSettings> getSettings() async {
@ -1227,11 +1145,11 @@ class NextcloudNotesClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNotesSettings), specifiedType: const FullType(NextcloudNotesSettings),
)! as NextcloudNotesSettings; )! as NextcloudNotesSettings;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNotesSettings> updateSettings({required final NextcloudNotesSettings notesSettings}) async { Future<NextcloudNotesSettings> updateSettings({required final NextcloudNotesSettings notesSettings}) async {
@ -1260,11 +1178,11 @@ class NextcloudNotesClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNotesSettings), specifiedType: const FullType(NextcloudNotesSettings),
)! as NextcloudNotesSettings; )! as NextcloudNotesSettings;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
} }
@ -1293,11 +1211,11 @@ class NextcloudNotificationsClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNotificationsListNotifications), specifiedType: const FullType(NextcloudNotificationsListNotifications),
)! as NextcloudNotificationsListNotifications; )! as NextcloudNotificationsListNotifications;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<String> deleteAllNotifications() async { Future<String> deleteAllNotifications() async {
@ -1319,9 +1237,9 @@ class NextcloudNotificationsClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return utf8.decode(response.body); return response.body;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNotificationsGetNotification> getNotification({required final int id}) async { Future<NextcloudNotificationsGetNotification> getNotification({required final int id}) async {
@ -1345,11 +1263,11 @@ class NextcloudNotificationsClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNotificationsGetNotification), specifiedType: const FullType(NextcloudNotificationsGetNotification),
)! as NextcloudNotificationsGetNotification; )! as NextcloudNotificationsGetNotification;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudEmptyOCS> deleteNotification({required final int id}) async { Future<NextcloudEmptyOCS> deleteNotification({required final int id}) async {
@ -1372,12 +1290,10 @@ class NextcloudNotificationsClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(await response.jsonBody, specifiedType: const FullType(NextcloudEmptyOCS))!
json.decode(utf8.decode(response.body)), as NextcloudEmptyOCS;
specifiedType: const FullType(NextcloudEmptyOCS),
)! as NextcloudEmptyOCS;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudNotificationsPushServerRegistration> registerDevice({ Future<NextcloudNotificationsPushServerRegistration> registerDevice({
@ -1407,11 +1323,11 @@ class NextcloudNotificationsClient {
); );
if (response.statusCode == 201) { if (response.statusCode == 201) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudNotificationsPushServerRegistration), specifiedType: const FullType(NextcloudNotificationsPushServerRegistration),
)! as NextcloudNotificationsPushServerRegistration; )! as NextcloudNotificationsPushServerRegistration;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<String> removeDevice() async { Future<String> removeDevice() async {
@ -1433,9 +1349,9 @@ class NextcloudNotificationsClient {
body, body,
); );
if (response.statusCode == 202) { if (response.statusCode == 202) {
return utf8.decode(response.body); return response.body;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudEmptyOCS> sendAdminNotification({ Future<NextcloudEmptyOCS> sendAdminNotification({
@ -1466,12 +1382,10 @@ class NextcloudNotificationsClient {
body, body,
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(await response.jsonBody, specifiedType: const FullType(NextcloudEmptyOCS))!
json.decode(utf8.decode(response.body)), as NextcloudEmptyOCS;
specifiedType: const FullType(NextcloudEmptyOCS),
)! as NextcloudEmptyOCS;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
} }
@ -1500,11 +1414,11 @@ class NextcloudProvisioningApiClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudProvisioningApiUser), specifiedType: const FullType(NextcloudProvisioningApiUser),
)! as NextcloudProvisioningApiUser; )! as NextcloudProvisioningApiUser;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudProvisioningApiUser> getUser({required final String userId}) async { Future<NextcloudProvisioningApiUser> getUser({required final String userId}) async {
@ -1528,11 +1442,11 @@ class NextcloudProvisioningApiClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudProvisioningApiUser), specifiedType: const FullType(NextcloudProvisioningApiUser),
)! as NextcloudProvisioningApiUser; )! as NextcloudProvisioningApiUser;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
} }
@ -1562,11 +1476,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderCheckResponse200ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderCheckResponse200ApplicationJson),
)! as NextcloudUnifiedPushProviderCheckResponse200ApplicationJson; )! as NextcloudUnifiedPushProviderCheckResponse200ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
/// Set keepalive interval /// Set keepalive interval
@ -1595,11 +1509,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderSetKeepaliveResponse200ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderSetKeepaliveResponse200ApplicationJson),
)! as NextcloudUnifiedPushProviderSetKeepaliveResponse200ApplicationJson; )! as NextcloudUnifiedPushProviderSetKeepaliveResponse200ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
/// Request to create a new deviceId /// Request to create a new deviceId
@ -1626,11 +1540,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderCreateDeviceResponse200ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderCreateDeviceResponse200ApplicationJson),
)! as NextcloudUnifiedPushProviderCreateDeviceResponse200ApplicationJson; )! as NextcloudUnifiedPushProviderCreateDeviceResponse200ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
/// Request to get push messages /// Request to get push messages
@ -1659,11 +1573,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 401) { if (response.statusCode == 401) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderSyncDeviceResponse401ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderSyncDeviceResponse401ApplicationJson),
)! as NextcloudUnifiedPushProviderSyncDeviceResponse401ApplicationJson; )! as NextcloudUnifiedPushProviderSyncDeviceResponse401ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
/// Delete a device /// Delete a device
@ -1690,11 +1604,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderDeleteDeviceResponse200ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderDeleteDeviceResponse200ApplicationJson),
)! as NextcloudUnifiedPushProviderDeleteDeviceResponse200ApplicationJson; )! as NextcloudUnifiedPushProviderDeleteDeviceResponse200ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
/// Create an authorization token for a new 3rd party service /// Create an authorization token for a new 3rd party service
@ -1723,11 +1637,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderCreateAppResponse200ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderCreateAppResponse200ApplicationJson),
)! as NextcloudUnifiedPushProviderCreateAppResponse200ApplicationJson; )! as NextcloudUnifiedPushProviderCreateAppResponse200ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
/// Delete an authorization token /// Delete an authorization token
@ -1754,11 +1668,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderDeleteAppResponse200ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderDeleteAppResponse200ApplicationJson),
)! as NextcloudUnifiedPushProviderDeleteAppResponse200ApplicationJson; )! as NextcloudUnifiedPushProviderDeleteAppResponse200ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
/// Unifiedpush discovery Following specifications /// Unifiedpush discovery Following specifications
@ -1785,11 +1699,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderUnifiedpushDiscoveryResponse200ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderUnifiedpushDiscoveryResponse200ApplicationJson),
)! as NextcloudUnifiedPushProviderUnifiedpushDiscoveryResponse200ApplicationJson; )! as NextcloudUnifiedPushProviderUnifiedpushDiscoveryResponse200ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
/// Receive notifications from 3rd parties /// Receive notifications from 3rd parties
@ -1814,11 +1728,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 201) { if (response.statusCode == 201) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderPushResponse201ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderPushResponse201ApplicationJson),
)! as NextcloudUnifiedPushProviderPushResponse201ApplicationJson; )! as NextcloudUnifiedPushProviderPushResponse201ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
/// Matrix Gateway discovery /// Matrix Gateway discovery
@ -1842,11 +1756,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderGatewayMatrixDiscoveryResponse200ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderGatewayMatrixDiscoveryResponse200ApplicationJson),
)! as NextcloudUnifiedPushProviderGatewayMatrixDiscoveryResponse200ApplicationJson; )! as NextcloudUnifiedPushProviderGatewayMatrixDiscoveryResponse200ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
/// Matrix Gateway /// Matrix Gateway
@ -1870,11 +1784,11 @@ class NextcloudUnifiedPushProviderClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUnifiedPushProviderGatewayMatrixResponse200ApplicationJson), specifiedType: const FullType(NextcloudUnifiedPushProviderGatewayMatrixResponse200ApplicationJson),
)! as NextcloudUnifiedPushProviderGatewayMatrixResponse200ApplicationJson; )! as NextcloudUnifiedPushProviderGatewayMatrixResponse200ApplicationJson;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
} }
@ -1903,11 +1817,11 @@ class NextcloudUserStatusClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUserStatusGetPublicStatuses), specifiedType: const FullType(NextcloudUserStatusGetPublicStatuses),
)! as NextcloudUserStatusGetPublicStatuses; )! as NextcloudUserStatusGetPublicStatuses;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudUserStatusGetPublicStatus> getPublicStatus({required final String userId}) async { Future<NextcloudUserStatusGetPublicStatus> getPublicStatus({required final String userId}) async {
@ -1931,11 +1845,11 @@ class NextcloudUserStatusClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUserStatusGetPublicStatus), specifiedType: const FullType(NextcloudUserStatusGetPublicStatus),
)! as NextcloudUserStatusGetPublicStatus; )! as NextcloudUserStatusGetPublicStatus;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudUserStatusGetStatus> getStatus() async { Future<NextcloudUserStatusGetStatus> getStatus() async {
@ -1958,11 +1872,11 @@ class NextcloudUserStatusClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUserStatusGetStatus), specifiedType: const FullType(NextcloudUserStatusGetStatus),
)! as NextcloudUserStatusGetStatus; )! as NextcloudUserStatusGetStatus;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudUserStatusGetStatus> setStatus({required final NextcloudUserStatusType statusType}) async { Future<NextcloudUserStatusGetStatus> setStatus({required final NextcloudUserStatusType statusType}) async {
@ -1986,11 +1900,11 @@ class NextcloudUserStatusClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUserStatusGetStatus), specifiedType: const FullType(NextcloudUserStatusGetStatus),
)! as NextcloudUserStatusGetStatus; )! as NextcloudUserStatusGetStatus;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudUserStatusGetStatus> setPredefinedMessage({ Future<NextcloudUserStatusGetStatus> setPredefinedMessage({
@ -2020,11 +1934,11 @@ class NextcloudUserStatusClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUserStatusGetStatus), specifiedType: const FullType(NextcloudUserStatusGetStatus),
)! as NextcloudUserStatusGetStatus; )! as NextcloudUserStatusGetStatus;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudUserStatusGetStatus> setCustomMessage({ Future<NextcloudUserStatusGetStatus> setCustomMessage({
@ -2060,11 +1974,11 @@ class NextcloudUserStatusClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUserStatusGetStatus), specifiedType: const FullType(NextcloudUserStatusGetStatus),
)! as NextcloudUserStatusGetStatus; )! as NextcloudUserStatusGetStatus;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future clearMessage() async { Future clearMessage() async {
@ -2086,7 +2000,7 @@ class NextcloudUserStatusClient {
if (response.statusCode == 200) { if (response.statusCode == 200) {
return; return;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudUserStatusPredefinedStatuses> getPredefinedStatuses() async { Future<NextcloudUserStatusPredefinedStatuses> getPredefinedStatuses() async {
@ -2109,11 +2023,11 @@ class NextcloudUserStatusClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUserStatusPredefinedStatuses), specifiedType: const FullType(NextcloudUserStatusPredefinedStatuses),
)! as NextcloudUserStatusPredefinedStatuses; )! as NextcloudUserStatusPredefinedStatuses;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
Future<NextcloudUserStatusHeartbeat> heartbeat({required final NextcloudUserStatusType status}) async { Future<NextcloudUserStatusHeartbeat> heartbeat({required final NextcloudUserStatusType status}) async {
@ -2137,11 +2051,11 @@ class NextcloudUserStatusClient {
); );
if (response.statusCode == 200) { if (response.statusCode == 200) {
return jsonSerializers.deserialize( return jsonSerializers.deserialize(
json.decode(utf8.decode(response.body)), await response.jsonBody,
specifiedType: const FullType(NextcloudUserStatusHeartbeat), specifiedType: const FullType(NextcloudUserStatusHeartbeat),
)! as NextcloudUserStatusHeartbeat; )! as NextcloudUserStatusHeartbeat;
} }
throw NextcloudApiException.fromResponse(response); // coverage:ignore-line throw await NextcloudApiException.fromResponse(response); // coverage:ignore-line
} }
} }

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

@ -29,7 +29,7 @@ class WebDavClient {
..persistentConnection = true; ..persistentConnection = true;
for (final header in { for (final header in {
HttpHeaders.contentTypeHeader: 'application/xml', HttpHeaders.contentTypeHeader: 'application/xml',
...rootClient.baseHeaders, ...?rootClient.baseHeaders,
if (headers != null) ...headers, if (headers != null) ...headers,
if (rootClient.authentications.isNotEmpty) ...rootClient.authentications.first.headers, if (rootClient.authentications.isNotEmpty) ...rootClient.authentications.first.headers,
}.entries) { }.entries) {
@ -43,11 +43,7 @@ class WebDavClient {
final response = await request.close(); final response = await request.close();
if (!expectedCodes.contains(response.statusCode)) { if (!expectedCodes.contains(response.statusCode)) {
throw NextcloudApiException( throw await NextcloudApiException.fromResponse(response);
response.statusCode,
{}, // TODO
await response.bodyBytes,
);
} }
return response; return response;

1
packages/nextcloud/pubspec.yaml

@ -8,7 +8,6 @@ environment:
dependencies: dependencies:
built_collection: ^5.1.1 built_collection: ^5.1.1
built_value: ^8.5.0 built_value: ^8.5.0
cookie_jar: ^4.0.2
crypto: ^3.0.3 crypto: ^3.0.3
crypton: ^2.0.5 crypton: ^2.0.5
dynamite_runtime: dynamite_runtime:

Loading…
Cancel
Save