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.

165 lines
5.6 KiB

import 'package:built_value/serializer.dart';
import 'package:built_value/standard_json_plugin.dart';
import 'package:dynamite_runtime/content_string.dart';
import 'package:nextcloud/nextcloud.dart';
import 'package:nextcloud/src/api/files_reminders.openapi.dart';
import 'package:nextcloud/src/api/sharebymail.openapi.dart';
2 years ago
// ignore: public_member_api_docs
class NextcloudClient extends DynamiteClient {
2 years ago
// ignore: public_member_api_docs
NextcloudClient(
super.baseURL, {
this.loginName,
final String? password,
final String? appPassword,
final String? language,
final AppType appType = AppType.unknown,
final String? userAgentOverride,
super.cookieJar,
}) : super(
baseHeaders: language != null ? {'Accept-Language': language} : null,
userAgent: userAgentOverride ?? appType.userAgent,
authentications: [
if (appPassword != null) ...[
DynamiteHttpBearerAuthentication(
token: appPassword,
),
],
if (loginName != null && (password ?? appPassword) != null) ...[
DynamiteHttpBasicAuthentication(
username: loginName,
password: (password ?? appPassword)!,
),
],
],
);
/// Identifier used for authentication. This can be the username or email or something else.
final String? loginName;
WebDavClient? _webdav;
CommentsClient? _comments;
CoreClient? _core;
DashboardClient? _dashboard;
DavClient? _dav;
FilesClient? _files;
FilesExternalClient? _filesExternal;
FilesSharingClient? _filesSharing;
FilesTrashbinClient? _filesTrashbin;
FilesVersionsClient? _filesVersions;
NewsClient? _news;
NotesClient? _notes;
NotificationsClient? _notifications;
ProvisioningApiClient? _provisioningApi;
SettingsClient? _settings;
ThemingClient? _theming;
UpdatenotificationClient? _updatenotification;
UppushClient? _uppush;
UserStatusClient? _userStatus;
WeatherStatusClient? _weatherStatus;
/// Client for WebDAV
WebDavClient get webdav => _webdav ??= WebDavClient(this);
/// Client for the comments APIs
CommentsClient get comments => _comments ??= CommentsClient.fromClient(this);
/// Client for the core APIs
CoreClient get core => _core ??= CoreClient.fromClient(this);
/// Client for the dashboard APIs
DashboardClient get dashboard => _dashboard ??= DashboardClient.fromClient(this);
/// Client for the dav APIs
///
/// This client does not expose WebDAV functionality. Use [webdav] instead.
DavClient get dav => _dav ??= DavClient.fromClient(this);
/// Client for the files APIs
FilesClient get files => _files ??= FilesClient.fromClient(this);
/// Client for the files external APIs
FilesExternalClient get filesExternal => _filesExternal ??= FilesExternalClient.fromClient(this);
/// Client for the files sharing APIs
FilesSharingClient get filesSharing => _filesSharing ??= FilesSharingClient.fromClient(this);
/// Client for the files trashbin APIs
FilesTrashbinClient get filesTrashbin => _filesTrashbin ??= FilesTrashbinClient.fromClient(this);
/// Client for the files versions APIs
FilesVersionsClient get filesVersions => _filesVersions ??= FilesVersionsClient.fromClient(this);
/// Client for the news app APIs
NewsClient get news => _news ??= NewsClient.fromClient(this);
/// Client for the notes app APIs
NotesClient get notes => _notes ??= NotesClient.fromClient(this);
/// Client for the notifications app APIs
NotificationsClient get notifications => _notifications ??= NotificationsClient.fromClient(this);
/// Client for the provisioning APIs
ProvisioningApiClient get provisioningApi => _provisioningApi ??= ProvisioningApiClient.fromClient(this);
/// Client for the settings APIs
SettingsClient get settings => _settings ??= SettingsClient.fromClient(this);
/// Client for the theming APIs
ThemingClient get theming => _theming ??= ThemingClient.fromClient(this);
/// Client for the updatenotification APIs
UpdatenotificationClient get updatenotification => _updatenotification ??= UpdatenotificationClient.fromClient(this);
/// Client for the uppush app APIs
UppushClient get uppush => _uppush ??= UppushClient.fromClient(this);
/// Client for the user status APIs
UserStatusClient get userStatus => _userStatus ??= UserStatusClient.fromClient(this);
/// Client for the weather status APIs
WeatherStatusClient get weatherStatus => _weatherStatus ??= WeatherStatusClient.fromClient(this);
2 years ago
}
// coverage:ignore-start
// ignore: public_member_api_docs
final serializers = Serializers.merge([
commentsSerializers,
coreSerializers,
dashboardSerializers,
davSerializers,
filesSerializers,
filesExternalSerializers,
filesRemindersSerializers,
filesSharingSerializers,
filesTrashbinSerializers,
filesVersionsSerializers,
newsSerializers,
notesSerializers,
notificationsSerializers,
provisioningApiSerializers,
settingsSerializers,
sharebymailSerializers,
themingSerializers,
updatenotificationSerializers,
uppushSerializers,
userStatusSerializers,
weatherStatusSerializers,
]);
// ignore: public_member_api_docs
final Serializers jsonSerializers = (serializers.toBuilder()
..addPlugin(StandardJsonPlugin())
..addPlugin(const ContentStringPlugin()))
.build();
// ignore: public_member_api_docs
T deserializeNextcloud<T>(final Object data) => serializers.deserialize(data, specifiedType: FullType(T))! as T;
// ignore: public_member_api_docs
Object? serializeNextcloud<T>(final T data) => serializers.serialize(data, specifiedType: FullType(T));
// coverage:ignore-end