From 3555e9bb1180984cace3e702b61677c70e884643 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Fri, 30 Aug 2024 22:25:13 -0400 Subject: [PATCH] Allow Bluesky post resharing for Friendica versions 2024.08 and higher Fixes Issue #107 --- lib/models/friendica_version.dart | 8 +++++++- .../settings/network_capabilities_settings.dart | 2 +- lib/services/feature_version_checker.dart | 2 ++ lib/utils/interaction_availability_util.dart | 15 ++++++++++----- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/lib/models/friendica_version.dart b/lib/models/friendica_version.dart index 4123e21..b20cffd 100644 --- a/lib/models/friendica_version.dart +++ b/lib/models/friendica_version.dart @@ -98,7 +98,7 @@ class FriendicaVersion implements Comparable { @override String toString() { - return 'FriendicaVersion{releaseDate: $releaseDate, extra: $extra}'; + return '${releaseDate.year}.${releaseDate.month}$extra'; } String toVersionString() { @@ -156,6 +156,8 @@ final FriendicaVersion v2023_04_01 = FriendicaVersion( ); final FriendicaVersion v2023_05 = FriendicaVersion(DateTime(2023, 05)); final FriendicaVersion v2023_09 = FriendicaVersion(DateTime(2023, 09)); +final FriendicaVersion v2024_03 = FriendicaVersion(DateTime(2024, 03)); +final FriendicaVersion v2024_08 = FriendicaVersion(DateTime(2024, 08)); final knownFriendicaVersions = [ // 2018 Versions @@ -196,6 +198,10 @@ final knownFriendicaVersions = [ v2023_04_01, v2023_05, v2023_09, + +// 2024 Versions + v2024_03, + v2024_08, ]; FriendicaVersion latestVersion() => knownFriendicaVersions.last; diff --git a/lib/models/settings/network_capabilities_settings.dart b/lib/models/settings/network_capabilities_settings.dart index 02e16b0..7e88b7c 100644 --- a/lib/models/settings/network_capabilities_settings.dart +++ b/lib/models/settings/network_capabilities_settings.dart @@ -44,7 +44,7 @@ class NetworkCapabilitiesSettings { KnownNetworks.bluesky => NetworkCapabilitiesItem( network: e, react: true, - reshare: false, + reshare: true, comment: true, ), KnownNetworks.threads => NetworkCapabilitiesItem( diff --git a/lib/services/feature_version_checker.dart b/lib/services/feature_version_checker.dart index 21bed06..5cf1f6b 100644 --- a/lib/services/feature_version_checker.dart +++ b/lib/services/feature_version_checker.dart @@ -9,6 +9,7 @@ import '../models/friendica_version.dart'; import '../models/friendica_version_requirement.dart'; enum RelaticaFeatures { + blueskyReshare('Resharing Bluesky Posts'), diasporaReshare('Resharing Diaspora Posts'), directMessageCreation('Direct message creation with OAuth login'), postSpoilerText('Spoiler Text on Posts'), @@ -73,6 +74,7 @@ class FriendicaVersionChecker { static final featureVersionRequirement = { + RelaticaFeatures.blueskyReshare: FriendicaVersionRequirement(v2024_08), RelaticaFeatures.diasporaReshare: FriendicaVersionRequirement(v2023_04), RelaticaFeatures.directMessageCreation: FriendicaVersionRequirement( v2023_04, diff --git a/lib/utils/interaction_availability_util.dart b/lib/utils/interaction_availability_util.dart index 928d12c..3037b79 100644 --- a/lib/utils/interaction_availability_util.dart +++ b/lib/utils/interaction_availability_util.dart @@ -2,6 +2,7 @@ import '../globals.dart'; import '../models/timeline_entry.dart'; import '../models/timeline_network_info.dart'; import '../models/visibility.dart'; +import '../services/feature_version_checker.dart'; import '../services/setting_service.dart'; import 'known_network_extensions.dart'; @@ -61,11 +62,15 @@ extension InteractionAvailabilityExtension on TimelineEntry { } if (networkInfo.network == KnownNetworks.bluesky) { - return const InteractionCapabilityResult( - canDo: false, - reason: - "Resharing of Bluesky posts through the API isn't supported by Friendica.", - ); + final result = getIt() + .canUseFeatureResult(RelaticaFeatures.blueskyReshare); + + if (result.isFailure) { + return InteractionCapabilityResult( + canDo: false, + reason: result.error.message, + ); + } } final settingsService = getIt();