From 7dbe520c73d60651acdb351c14b6033e8992aba5 Mon Sep 17 00:00:00 2001 From: Hank Grabowski Date: Thu, 23 Mar 2023 10:51:41 -0400 Subject: [PATCH] Check for Friendica version before trying to reshare Diaspora posts --- CHANGELOG.md | 1 + beta-program.md | 2 ++ lib/models/exec_error.dart | 1 + lib/services/direct_message_service.dart | 28 ++++++++++++++++++----- lib/services/feature_version_checker.dart | 15 ++++++++++++ 5 files changed, 41 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1f6fbe..943881b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Changes * Uses "Sentence Capitalization" keyboard to have shift on for first letter of beginning of each sentence. + * Add version error check messages on DM sending and Resharing Diaspora posts for pre-2023.03 Friendica servers * Fixes * New Features diff --git a/beta-program.md b/beta-program.md index 93f42f4..0152555 100644 --- a/beta-program.md +++ b/beta-program.md @@ -135,6 +135,8 @@ wanted to lay out some expectations before getting into the small details ### Broken and hopefully fixed in the very near future: +* Sending direct messages only works if you are logged in with username/password due to limitations of the existing DM + API. (Fixed in Friendica 2023.03) * Resharing of Diaspora federated posts is currently broken server side. All other posts should be reshareable. (Fixed in Friendica 2023.03) * Content Warnings/Spoiler Text on *posts* aren't federating over to Mastodon well so only use it on diff --git a/lib/models/exec_error.dart b/lib/models/exec_error.dart index dadf98d..5653fc5 100644 --- a/lib/models/exec_error.dart +++ b/lib/models/exec_error.dart @@ -36,6 +36,7 @@ enum ErrorType { authentication, localError, missingEndpoint, + minVersionError, notFound, parsingError, serverError, diff --git a/lib/services/direct_message_service.dart b/lib/services/direct_message_service.dart index dbebd24..78938ef 100644 --- a/lib/services/direct_message_service.dart +++ b/lib/services/direct_message_service.dart @@ -1,5 +1,7 @@ import 'package:flutter/foundation.dart'; import 'package:logging/logging.dart'; +import 'package:relatica/models/auth/oauth_credentials.dart'; +import 'package:relatica/services/feature_version_checker.dart'; import 'package:result_monad/result_monad.dart'; import '../friendica_client/friendica_client.dart'; @@ -63,9 +65,16 @@ class DirectMessageService extends ChangeNotifier { FutureResult newThread( Connection receiver, String text) async { - final result = - await DirectMessagingClient(getIt().currentProfile) - .postDirectMessage( + final profile = getIt().currentProfile; + if (profile.credentials is OAuthCredentials) { + final result = getIt() + .canUseFeatureResult(RelaticaFeatures.directMessageCreation); + if (result.isFailure) { + return result.errorCast(); + } + } + + final result = await DirectMessagingClient(profile).postDirectMessage( null, receiver.id, text, @@ -103,9 +112,16 @@ class DirectMessageService extends ChangeNotifier { ); } - final result = - await DirectMessagingClient(getIt().currentProfile) - .postDirectMessage( + final profile = getIt().currentProfile; + if (profile.credentials is OAuthCredentials) { + final result = getIt() + .canUseFeatureResult(RelaticaFeatures.directMessageCreation); + if (result.isFailure) { + return result.errorCast(); + } + } + + final result = await DirectMessagingClient(profile).postDirectMessage( original.id, original.senderId, text, diff --git a/lib/services/feature_version_checker.dart b/lib/services/feature_version_checker.dart index 19d9f18..b610106 100644 --- a/lib/services/feature_version_checker.dart +++ b/lib/services/feature_version_checker.dart @@ -1,12 +1,15 @@ import 'package:logging/logging.dart'; import 'package:relatica/models/instance_info.dart'; import 'package:relatica/utils/active_profile_selector.dart'; +import 'package:result_monad/result_monad.dart'; import '../globals.dart'; +import '../models/exec_error.dart'; import '../models/friendica_version.dart'; enum RelaticaFeatures { diasporaReshare('Resharing Diaspora Posts'), + directMessageCreation('Direct message creation with OAuth login'), postSpoilerText('Spoiler Text on Posts'), statusEditing('Post/Comment Editing'), usingActualFollowRequests( @@ -47,6 +50,17 @@ class FriendicaVersionChecker { ); } + Result canUseFeatureResult(RelaticaFeatures feature) { + if (canUseFeature(feature)) { + return Result.ok(true); + } + + return buildErrorResult( + type: ErrorType.minVersionError, + message: versionErrorString(feature), + ); + } + FriendicaVersion getVersionRequirement(RelaticaFeatures feature) => featureVersionRequirement[feature] ?? unknown; @@ -55,6 +69,7 @@ class FriendicaVersionChecker { static final featureVersionRequirement = { RelaticaFeatures.diasporaReshare: v2023_03, + RelaticaFeatures.directMessageCreation: v2023_03, RelaticaFeatures.postSpoilerText: v2023_03, RelaticaFeatures.statusEditing: v2023_03, RelaticaFeatures.usingActualFollowRequests: v2023_03,