2023-03-17 20:52:49 +00:00
|
|
|
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 {
|
2023-03-18 19:13:42 +00:00
|
|
|
postSpoilerText,
|
2023-03-17 20:52:49 +00:00
|
|
|
statusEditing,
|
2023-03-21 18:27:38 +00:00
|
|
|
usingActualFollowRequests,
|
2023-03-17 20:52:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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>{
|
2023-03-18 19:13:42 +00:00
|
|
|
RelaticaFeatures.postSpoilerText: v2023_03,
|
2023-03-17 20:52:49 +00:00
|
|
|
RelaticaFeatures.statusEditing: v2023_03,
|
2023-03-21 18:27:38 +00:00
|
|
|
RelaticaFeatures.usingActualFollowRequests: v2023_03,
|
2023-03-17 20:52:49 +00:00
|
|
|
};
|
|
|
|
}
|