diff --git a/lib/pages/community.dart b/lib/pages/community.dart index 394db44..13163c7 100644 --- a/lib/pages/community.dart +++ b/lib/pages/community.dart @@ -10,6 +10,7 @@ import '../hooks/delayed_loading.dart'; import '../hooks/logged_in_action.dart'; import '../hooks/memo_future.dart'; import '../hooks/stores.dart'; +import '../util/extensions/api.dart'; import '../util/goto.dart'; import '../util/intl.dart'; import '../util/more_icon.dart'; @@ -315,10 +316,11 @@ class _CommunityOverview extends StatelessWidget { text: '@', style: TextStyle(fontWeight: FontWeight.w200)), TextSpan( - text: instanceHost, + text: community.originInstanceHost, style: TextStyle(fontWeight: FontWeight.w600), recognizer: TapGestureRecognizer() - ..onTap = () => goToInstance(context, instanceHost)), + ..onTap = () => goToInstance( + context, community.originInstanceHost)), ], ), ), diff --git a/lib/util/extensions/api.dart b/lib/util/extensions/api.dart new file mode 100644 index 0000000..086de4d --- /dev/null +++ b/lib/util/extensions/api.dart @@ -0,0 +1,36 @@ +import 'package:lemmy_api_client/lemmy_api_client.dart'; + +import '../cleanup_url.dart'; + +// Extensions to lemmy api objects which give a [.originInstanceHost] getter +// allowing for a convenient way of knowing what is the origin of the object +// For example if a post on lemmy.ml is federated from lemmygrad.ml then +// `post.instanceHost == 'lemmy.ml' +// && post.originInstanceHost == 'lemmygrad.ml`` + +extension GetInstanceCommunityView on CommunityView { + String get originInstanceHost => _extract(actorId); +} + +extension GetInstanceUserView on UserView { + String get originInstanceHost => _extract(actorId); +} + +extension GetInstanceCommunityModeratorView on CommunityModeratorView { + String get originInstanceHost => _extract(userActorId); +} + +extension GetInstancePostView on PostView { + String get originInstanceHost => _extract(apId); +} + +extension GetInstanceUser on User { + String get originInstanceHost => _extract(actorId); +} + +extension GetInstanceCommentView on CommentView { + String get originInstanceHost => _extract(apId); +} + +// TODO: change it to something more robust? regex? +String _extract(String s) => cleanUpUrl(s.split('/')[2]); diff --git a/lib/widgets/post.dart b/lib/widgets/post.dart index 0bb29fd..d094d97 100644 --- a/lib/widgets/post.dart +++ b/lib/widgets/post.dart @@ -13,6 +13,7 @@ import '../hooks/delayed_loading.dart'; import '../hooks/logged_in_action.dart'; import '../pages/full_post.dart'; import '../url_launcher.dart'; +import '../util/extensions/api.dart'; import '../util/goto.dart'; import '../util/more_icon.dart'; import 'bottom_modal.dart'; @@ -172,11 +173,11 @@ class Post extends HookWidget { text: '@', style: TextStyle(fontWeight: FontWeight.w300)), TextSpan( - text: instanceHost, + text: post.originInstanceHost, style: TextStyle(fontWeight: FontWeight.w600), recognizer: TapGestureRecognizer() - ..onTap = - () => goToInstance(context, instanceHost)), + ..onTap = () => goToInstance( + context, post.originInstanceHost)), ], ), ) diff --git a/lib/widgets/user_profile.dart b/lib/widgets/user_profile.dart index 3a01f38..e3897fd 100644 --- a/lib/widgets/user_profile.dart +++ b/lib/widgets/user_profile.dart @@ -6,6 +6,7 @@ import 'package:lemmy_api_client/lemmy_api_client.dart'; import 'package:timeago/timeago.dart' as timeago; import '../hooks/stores.dart'; +import '../util/extensions/api.dart'; import '../util/goto.dart'; import '../util/intl.dart'; import '../util/text_color.dart'; @@ -221,9 +222,10 @@ class _UserOverview extends HookWidget { style: theme.textTheme.caption, ), InkWell( - onTap: () => goToInstance(context, userView.instanceHost), + onTap: () => + goToInstance(context, userView.originInstanceHost), child: Text( - '${userView.instanceHost}', + '${userView.originInstanceHost}', style: theme.textTheme.caption, ), ) diff --git a/pubspec.lock b/pubspec.lock index 27ab87a..7fff6d4 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -260,7 +260,7 @@ packages: name: lemmy_api_client url: "https://pub.dartlang.org" source: hosted - version: "0.8.2" + version: "0.8.5" markdown: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 0d7c363..21331dc 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -43,7 +43,7 @@ dependencies: # utils timeago: ^2.0.27 fuzzy: <1.0.0 - lemmy_api_client: ^0.8.2 + lemmy_api_client: ^0.8.5 flutter: sdk: flutter