relatica/lib/services/feature_version_checker.dart

53 wiersze
1.6 KiB
Dart

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<ActiveProfileSelector<InstanceInfo>>()
.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, FriendicaVersion>{
RelaticaFeatures.postSpoilerText: v2023_03,
RelaticaFeatures.statusEditing: v2023_03,
RelaticaFeatures.usingActualFollowRequests: v2023_03,
};
}