import 'package:logging/logging.dart'; import 'package:relatica/models/instance_info.dart'; import 'package:relatica/utils/active_profile_selector.dart'; import '../globals.dart'; import '../models/friendica_version.dart'; enum RelaticaFeatures { postSpoilerText, statusEditing, usingActualFollowRequests, } class FriendicaVersionChecker { static final _logger = Logger('FriendicaVersionTest'); const FriendicaVersionChecker(); bool canUseFeature(RelaticaFeatures feature) { final neededVersion = featureVersionRequirement[feature]; if (neededVersion == null) { _logger.severe( 'Return false since no minimum version data in table for: $feature', ); return false; } return getIt>() .activeEntry .andThenSuccess((info) => info.friendicaVersion >= neededVersion) .fold( onSuccess: (versionMet) => versionMet, onError: (error) { _logger.severe( 'Unable to calculate needed version data so returning false: $error'); return false; }, ); } FriendicaVersion getVersionRequirement(RelaticaFeatures feature) => featureVersionRequirement[feature] ?? unknown; String versionErrorString(RelaticaFeatures feature) => "This account's server doesn't meet the necessary minimum requirement: ${getVersionRequirement(feature).toVersionString()}"; static final featureVersionRequirement = { RelaticaFeatures.postSpoilerText: v2023_03, RelaticaFeatures.statusEditing: v2023_03, RelaticaFeatures.usingActualFollowRequests: v2023_03, }; }