A framework for building convergent cross-platform Nextcloud clients using Flutter.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

339 lines
12 KiB

// ignore_for_file: camel_case_types
// ignore_for_file: discarded_futures
// ignore_for_file: public_member_api_docs
// ignore_for_file: unreachable_switch_case
import 'dart:typed_data';
import 'package:built_value/built_value.dart';
import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart';
import 'package:collection/collection.dart';
import 'package:dynamite_runtime/content_string.dart';
import 'package:dynamite_runtime/http_client.dart';
import 'package:meta/meta.dart';
import 'package:universal_io/io.dart';
part 'dav.openapi.g.dart';
class Client extends DynamiteClient {
Client(
super.baseURL, {
super.baseHeaders,
super.userAgent,
super.httpClient,
super.cookieJar,
super.authentications,
});
Client.fromClient(final DynamiteClient client)
: super(
client.baseURL,
baseHeaders: client.baseHeaders,
httpClient: client.httpClient,
cookieJar: client.cookieJar,
authentications: client.authentications,
);
DirectClient get direct => DirectClient(this);
}
class DirectClient {
DirectClient(this._rootClient);
final Client _rootClient;
/// Get a direct link to a file.
///
/// Returns a [Future] containing a [DynamiteResponse] with the status code, deserialized body and headers.
/// Throws a [DynamiteApiException] if the API call does not return an expected status code.
///
/// Parameters:
/// * [fileId] ID of the file
/// * [expirationTime] Duration until the link expires
/// * [oCSAPIRequest] Required to be true for the API request to pass
///
/// Status codes:
/// * 200: Direct link returned
/// * 404: File not found
/// * 400: Getting direct link is not possible
/// * 403: Missing permissions to get direct link
///
/// See:
/// * [getUrlRaw] for an experimental operation that returns a [DynamiteRawResponse] that can be serialized.
Future<DynamiteResponse<DirectGetUrlResponseApplicationJson, void>> getUrl({
required final int fileId,
final int? expirationTime,
final bool oCSAPIRequest = true,
}) async {
final rawResponse = getUrlRaw(
fileId: fileId,
expirationTime: expirationTime,
oCSAPIRequest: oCSAPIRequest,
);
return rawResponse.future;
}
/// Get a direct link to a file.
///
/// This method and the response it returns is experimental. The API might change without a major version bump.
///
/// Returns a [Future] containing a [DynamiteRawResponse] with the raw [HttpClientResponse] and serialization helpers.
/// Throws a [DynamiteApiException] if the API call does not return an expected status code.
///
/// Parameters:
/// * [fileId] ID of the file
/// * [expirationTime] Duration until the link expires
/// * [oCSAPIRequest] Required to be true for the API request to pass
///
/// Status codes:
/// * 200: Direct link returned
/// * 404: File not found
/// * 400: Getting direct link is not possible
/// * 403: Missing permissions to get direct link
///
/// See:
/// * [getUrl] for an operation that returns a [DynamiteResponse] with a stable API.
@experimental
DynamiteRawResponse<DirectGetUrlResponseApplicationJson, void> getUrlRaw({
required final int fileId,
final int? expirationTime,
final bool oCSAPIRequest = true,
}) {
const path = '/ocs/v2.php/apps/dav/api/v1/direct';
final queryParameters = <String, dynamic>{};
final headers = <String, String>{
'Accept': 'application/json',
};
Uint8List? body;
// coverage:ignore-start
final authentication = _rootClient.authentications.firstWhereOrNull(
(final auth) => switch (auth) {
DynamiteHttpBearerAuthentication() || DynamiteHttpBasicAuthentication() => true,
_ => false,
},
);
if (authentication != null) {
headers.addAll(
authentication.headers,
);
} else {
throw Exception('Missing authentication for bearer_auth or basic_auth');
}
// coverage:ignore-end
queryParameters['fileId'] = fileId.toString();
if (expirationTime != null) {
queryParameters['expirationTime'] = expirationTime.toString();
}
headers['OCS-APIRequest'] = oCSAPIRequest.toString();
final uri = Uri(path: path, queryParameters: queryParameters.isNotEmpty ? queryParameters : null);
return DynamiteRawResponse<DirectGetUrlResponseApplicationJson, void>(
response: _rootClient.executeRequest(
'post',
uri,
headers,
body,
const {200},
),
bodyType: const FullType(DirectGetUrlResponseApplicationJson),
headersType: null,
serializers: _jsonSerializers,
);
}
}
@BuiltValue(instantiable: false)
abstract interface class OCSMetaInterface {
String get status;
int get statuscode;
String? get message;
String? get totalitems;
String? get itemsperpage;
}
abstract class OCSMeta implements OCSMetaInterface, Built<OCSMeta, OCSMetaBuilder> {
factory OCSMeta([final void Function(OCSMetaBuilder)? b]) = _$OCSMeta;
// coverage:ignore-start
const OCSMeta._();
// coverage:ignore-end
// coverage:ignore-start
factory OCSMeta.fromJson(final Map<String, dynamic> json) => _jsonSerializers.deserializeWith(serializer, json)!;
// coverage:ignore-end
// coverage:ignore-start
Map<String, dynamic> toJson() => _jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
// coverage:ignore-end
static Serializer<OCSMeta> get serializer => _$oCSMetaSerializer;
}
@BuiltValue(instantiable: false)
abstract interface class DirectGetUrlResponseApplicationJson_Ocs_DataInterface {
String get url;
}
abstract class DirectGetUrlResponseApplicationJson_Ocs_Data
implements
DirectGetUrlResponseApplicationJson_Ocs_DataInterface,
Built<DirectGetUrlResponseApplicationJson_Ocs_Data, DirectGetUrlResponseApplicationJson_Ocs_DataBuilder> {
factory DirectGetUrlResponseApplicationJson_Ocs_Data([
final void Function(DirectGetUrlResponseApplicationJson_Ocs_DataBuilder)? b,
]) = _$DirectGetUrlResponseApplicationJson_Ocs_Data;
// coverage:ignore-start
const DirectGetUrlResponseApplicationJson_Ocs_Data._();
// coverage:ignore-end
// coverage:ignore-start
factory DirectGetUrlResponseApplicationJson_Ocs_Data.fromJson(final Map<String, dynamic> json) =>
_jsonSerializers.deserializeWith(serializer, json)!;
// coverage:ignore-end
// coverage:ignore-start
Map<String, dynamic> toJson() => _jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
// coverage:ignore-end
static Serializer<DirectGetUrlResponseApplicationJson_Ocs_Data> get serializer =>
_$directGetUrlResponseApplicationJsonOcsDataSerializer;
}
@BuiltValue(instantiable: false)
abstract interface class DirectGetUrlResponseApplicationJson_OcsInterface {
OCSMeta get meta;
DirectGetUrlResponseApplicationJson_Ocs_Data get data;
}
abstract class DirectGetUrlResponseApplicationJson_Ocs
implements
DirectGetUrlResponseApplicationJson_OcsInterface,
Built<DirectGetUrlResponseApplicationJson_Ocs, DirectGetUrlResponseApplicationJson_OcsBuilder> {
factory DirectGetUrlResponseApplicationJson_Ocs([
final void Function(DirectGetUrlResponseApplicationJson_OcsBuilder)? b,
]) = _$DirectGetUrlResponseApplicationJson_Ocs;
// coverage:ignore-start
const DirectGetUrlResponseApplicationJson_Ocs._();
// coverage:ignore-end
// coverage:ignore-start
factory DirectGetUrlResponseApplicationJson_Ocs.fromJson(final Map<String, dynamic> json) =>
_jsonSerializers.deserializeWith(serializer, json)!;
// coverage:ignore-end
// coverage:ignore-start
Map<String, dynamic> toJson() => _jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
// coverage:ignore-end
static Serializer<DirectGetUrlResponseApplicationJson_Ocs> get serializer =>
_$directGetUrlResponseApplicationJsonOcsSerializer;
}
@BuiltValue(instantiable: false)
abstract interface class DirectGetUrlResponseApplicationJsonInterface {
DirectGetUrlResponseApplicationJson_Ocs get ocs;
}
abstract class DirectGetUrlResponseApplicationJson
implements
DirectGetUrlResponseApplicationJsonInterface,
Built<DirectGetUrlResponseApplicationJson, DirectGetUrlResponseApplicationJsonBuilder> {
factory DirectGetUrlResponseApplicationJson([final void Function(DirectGetUrlResponseApplicationJsonBuilder)? b]) =
_$DirectGetUrlResponseApplicationJson;
// coverage:ignore-start
const DirectGetUrlResponseApplicationJson._();
// coverage:ignore-end
// coverage:ignore-start
factory DirectGetUrlResponseApplicationJson.fromJson(final Map<String, dynamic> json) =>
_jsonSerializers.deserializeWith(serializer, json)!;
// coverage:ignore-end
// coverage:ignore-start
Map<String, dynamic> toJson() => _jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
// coverage:ignore-end
static Serializer<DirectGetUrlResponseApplicationJson> get serializer =>
_$directGetUrlResponseApplicationJsonSerializer;
}
@BuiltValue(instantiable: false)
abstract interface class Capabilities_DavInterface {
String get chunking;
String? get bulkupload;
}
abstract class Capabilities_Dav implements Capabilities_DavInterface, Built<Capabilities_Dav, Capabilities_DavBuilder> {
factory Capabilities_Dav([final void Function(Capabilities_DavBuilder)? b]) = _$Capabilities_Dav;
// coverage:ignore-start
const Capabilities_Dav._();
// coverage:ignore-end
// coverage:ignore-start
factory Capabilities_Dav.fromJson(final Map<String, dynamic> json) =>
_jsonSerializers.deserializeWith(serializer, json)!;
// coverage:ignore-end
// coverage:ignore-start
Map<String, dynamic> toJson() => _jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
// coverage:ignore-end
static Serializer<Capabilities_Dav> get serializer => _$capabilitiesDavSerializer;
}
@BuiltValue(instantiable: false)
abstract interface class CapabilitiesInterface {
Capabilities_Dav get dav;
}
abstract class Capabilities implements CapabilitiesInterface, Built<Capabilities, CapabilitiesBuilder> {
factory Capabilities([final void Function(CapabilitiesBuilder)? b]) = _$Capabilities;
// coverage:ignore-start
const Capabilities._();
// coverage:ignore-end
// coverage:ignore-start
factory Capabilities.fromJson(final Map<String, dynamic> json) => _jsonSerializers.deserializeWith(serializer, json)!;
// coverage:ignore-end
// coverage:ignore-start
Map<String, dynamic> toJson() => _jsonSerializers.serializeWith(serializer, this)! as Map<String, dynamic>;
// coverage:ignore-end
static Serializer<Capabilities> get serializer => _$capabilitiesSerializer;
}
// coverage:ignore-start
final Serializers _serializers = (Serializers().toBuilder()
..addBuilderFactory(const FullType(DirectGetUrlResponseApplicationJson), DirectGetUrlResponseApplicationJson.new)
..add(DirectGetUrlResponseApplicationJson.serializer)
..addBuilderFactory(
const FullType(DirectGetUrlResponseApplicationJson_Ocs),
DirectGetUrlResponseApplicationJson_Ocs.new,
)
..add(DirectGetUrlResponseApplicationJson_Ocs.serializer)
..addBuilderFactory(const FullType(OCSMeta), OCSMeta.new)
..add(OCSMeta.serializer)
..addBuilderFactory(
const FullType(DirectGetUrlResponseApplicationJson_Ocs_Data),
DirectGetUrlResponseApplicationJson_Ocs_Data.new,
)
..add(DirectGetUrlResponseApplicationJson_Ocs_Data.serializer)
..addBuilderFactory(const FullType(Capabilities), Capabilities.new)
..add(Capabilities.serializer)
..addBuilderFactory(const FullType(Capabilities_Dav), Capabilities_Dav.new)
..add(Capabilities_Dav.serializer))
.build();
final Serializers _jsonSerializers = (_serializers.toBuilder()
..addPlugin(StandardJsonPlugin())
..addPlugin(const ContentStringPlugin()))
.build();
// coverage:ignore-end