import '../globals.dart'; import '../models/timeline_entry.dart'; import '../models/timeline_network_info.dart'; import '../models/visibility.dart'; import '../services/setting_service.dart'; import 'known_network_extensions.dart'; class InteractionCapabilityResult { final bool canDo; final String reason; const InteractionCapabilityResult( {required this.canDo, required this.reason}); } extension InteractionAvailabilityExtension on TimelineEntry { InteractionCapabilityResult getCanComment() { final settingsService = getIt(); final nc = settingsService.networkCapabilities .getCapabilities(networkInfo.network); if (!nc.comment) { return InteractionCapabilityResult( canDo: false, reason: "User disabled commenting on ${networkInfo.network.labelName} items. Go into settings to change.", ); } return const InteractionCapabilityResult( canDo: true, reason: "Can comment on item", ); } InteractionCapabilityResult getCanReact() { final settingsService = getIt(); final nc = settingsService.networkCapabilities .getCapabilities(networkInfo.network); if (!nc.react) { return InteractionCapabilityResult( canDo: false, reason: "User disabled reacting on ${networkInfo.network.labelName} items. Go into settings to change.", ); } return const InteractionCapabilityResult( canDo: true, reason: "Can react on item", ); } InteractionCapabilityResult getIsReshareable(bool isMine) { if (isMine) { return const InteractionCapabilityResult( canDo: false, reason: "Can't reshare your own post", ); } if (networkInfo.network == KnownNetworks.bluesky) { return const InteractionCapabilityResult( canDo: false, reason: "Resharing of Bluesky posts through the API isn't supported by Friendica.", ); } final settingsService = getIt(); final nc = settingsService.networkCapabilities .getCapabilities(networkInfo.network); if (!nc.reshare) { return InteractionCapabilityResult( canDo: false, reason: "User disabled resharing ${networkInfo.network.labelName} items. Go into settings to change.", ); } if (visibility.type == VisibilityType.public || visibility.type == VisibilityType.unlisted) { return const InteractionCapabilityResult( canDo: true, reason: "Can reshare item", ); } return const InteractionCapabilityResult( canDo: false, reason: "Can't reshare private items", ); } }