kopia lustrzana https://gitlab.com/mysocialportal/relatica
Check for Friendica version before trying to reshare Diaspora posts
rodzic
e4047d4ffb
commit
1311cbb979
|
@ -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>>()
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 {
|
||||
|
|
Ładowanie…
Reference in New Issue