import 'package:nextcloud/src/api/core.openapi.dart'; import 'package:nextcloud/src/api/news.openapi.dart'; import 'package:nextcloud/src/api/notes.openapi.dart'; import 'package:version/version.dart'; /// Version of core/Server supported const coreSupportedVersion = 27; /// API version of the news app supported const newsSupportedVersion = 'v1-3'; /// API version of the notes app supported const notesSupportedVersion = 1; // ignore: public_member_api_docs extension CoreVersionSupported on CoreClient { /// Check if the core/Server version is supported by this client /// /// Also returns the supported version number (bool, int) isSupported(final CoreOcsGetCapabilitiesResponse200ApplicationJson_Ocs_Data capabilities) => ( capabilities.version.major == coreSupportedVersion, coreSupportedVersion, ); } // ignore: public_member_api_docs extension CoreStatusVersionSupported on CoreStatus { /// Check if the core/Server version is supported bool get isSupported => version.startsWith('$coreSupportedVersion.'); } // ignore: public_member_api_docs extension NewsVersionSupported on NewsClient { /// Check if the news app version is supported by this client /// /// Also returns the supported API version number Future<(bool, String)> isSupported() async { final versions = await getSupportedApiVersions(); return ( versions.apiLevels!.contains(newsSupportedVersion), newsSupportedVersion, ); } } // ignore: public_member_api_docs extension NotesVersionSupported on NotesClient { /// Check if the notes app version is supported by this client /// /// Also returns the supported API version number (bool, int) isSupported(final CoreOcsGetCapabilitiesResponse200ApplicationJson_Ocs_Data capabilities) => ( capabilities.capabilities.notesCapabilities?.notes.apiVersion ?.map(Version.parse) .where((final version) => version.major == notesSupportedVersion) .isNotEmpty ?? false, notesSupportedVersion, ); }