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'; /// Versions of core/Server supported const coreSupportedVersions = [ '25.0.10', '26.0.5', '27.0.0', '27.0.1', '27.0.2', ]; /// 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, List) isSupported(final CoreOcsGetCapabilitiesResponseApplicationJson_Ocs_Data capabilities) => ( coreSupportedVersions.contains(capabilities.version.string), coreSupportedVersions, ); } // ignore: public_member_api_docs extension CoreStatusVersionSupported on CoreStatus { /// Check if the core/Server version is supported bool get isSupported => coreSupportedVersions.contains(versionstring); } // 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 CoreOcsGetCapabilitiesResponseApplicationJson_Ocs_Data capabilities) => ( capabilities.capabilities.notesCapabilities?.notes.apiVersion ?.map(Version.parse) .where((final version) => version.major == notesSupportedVersion) .isNotEmpty ?? false, notesSupportedVersion, ); }