Check for Friendica version before trying to reshare Diaspora posts

merge-requests/67/merge
Hank Grabowski 2023-03-23 10:14:25 -04:00
rodzic e4047d4ffb
commit 1311cbb979
3 zmienionych plików z 46 dodań i 7 usunięć

Wyświetl plik

@ -1,9 +1,12 @@
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';
import 'package:logging/logging.dart';
import 'package:result_monad/result_monad.dart';
import '../../globals.dart';
import '../../models/timeline_entry.dart';
import '../../services/feature_version_checker.dart';
import '../../services/fediverse_server_validator.dart';
import '../../services/timeline_manager.dart';
import '../../utils/active_profile_selector.dart';
import '../../utils/snackbar_builder.dart';
@ -68,6 +71,25 @@ class _InteractionsBarControlState extends State<InteractionsBarControl> {
setState(() {
isProcessing = true;
});
final fvc = getIt<FriendicaVersionChecker>();
if (!fvc.canUseFeature(RelaticaFeatures.diasporaReshare)) {
final serverTypeEstimate = await getIt<FediverseServiceValidator>()
.getServerData(widget.entry.externalLink)
.fold(onSuccess: (d) => d.softwareName, onError: (_) => '');
if (serverTypeEstimate ==
FediverseServiceValidator.softwareTypeDiaspora) {
if (mounted) {
final error =
fvc.versionErrorString(RelaticaFeatures.diasporaReshare);
await showConfirmDialog(context, error);
}
setState(() {
isProcessing = false;
});
}
}
final id = widget.entry.id;
_logger.finest('Trying to reshare $id');
final result = await getIt<ActiveProfileSelector<TimelineManager>>()

Wyświetl plik

@ -6,9 +6,18 @@ import '../globals.dart';
import '../models/friendica_version.dart';
enum RelaticaFeatures {
postSpoilerText,
statusEditing,
usingActualFollowRequests,
diasporaReshare('Resharing Diaspora Posts'),
postSpoilerText('Spoiler Text on Posts'),
statusEditing('Post/Comment Editing'),
usingActualFollowRequests(
'Using Follow Request System not Friend Request Notifications'),
;
final String errorLabel;
const RelaticaFeatures(this.errorLabel);
String get label => errorLabel;
}
class FriendicaVersionChecker {
@ -42,9 +51,10 @@ class FriendicaVersionChecker {
featureVersionRequirement[feature] ?? unknown;
String versionErrorString(RelaticaFeatures feature) =>
"This account's server doesn't meet the necessary minimum requirement: ${getVersionRequirement(feature).toVersionString()}";
"${feature.label} requires at least Friendica ${getVersionRequirement(feature).toVersionString()}";
static final featureVersionRequirement = <RelaticaFeatures, FriendicaVersion>{
RelaticaFeatures.diasporaReshare: v2023_03,
RelaticaFeatures.postSpoilerText: v2023_03,
RelaticaFeatures.statusEditing: v2023_03,
RelaticaFeatures.usingActualFollowRequests: v2023_03,

Wyświetl plik

@ -7,9 +7,11 @@ import '../models/server_data.dart';
import '../utils/network_utils.dart';
class FediverseServiceValidator {
static const softwareTypeDiaspora = 'diaspora';
final knownServers = <String, ServerData>{};
FutureResult<bool, ExecError> checkIfFediverseLink(String url) async {
FutureResult<ServerData, ExecError> getServerData(String url) async {
final uri = Uri.tryParse(url);
if (uri == null || uri.scheme != 'https') {
return buildErrorResult(
@ -21,12 +23,17 @@ class FediverseServiceValidator {
final domain = uri.host;
ServerData? data = knownServers[domain];
if (data != null) {
return Result.ok(data.isFediverse);
return Result.ok(data);
}
final serverData = await refreshServerData(domain);
knownServers[domain] = serverData;
return Result.ok(serverData.isFediverse);
return Result.ok(serverData);
}
FutureResult<bool, ExecError> checkIfFediverseLink(String url) async {
final dataResult = await getServerData(url);
return dataResult.mapValue((d) => d.isFediverse);
}
static Future<ServerData> refreshServerData(String domainName) async {