diff --git a/lib/business_logic/interactions/interactions.dart b/lib/business_logic/interactions/interactions.dart index cff609b..39a18fa 100644 --- a/lib/business_logic/interactions/interactions.dart +++ b/lib/business_logic/interactions/interactions.dart @@ -103,3 +103,21 @@ Future makeFullInteraction( } return await makeInteractionFromUrl(id, posturl, type); } + +Future deletePost(PostModel model) async { + final identity = global.settings!.identities[model.identity]!; + final headers = { + ...identity.getAuthHeaders(), + ...global.defaultHeaders, + }; + + final uri = Uri( + scheme: "https", + host: identity.instanceUrl, + path: "/api/v1/statuses/${model.id}", + ); + + final response = await http.delete(uri, headers: headers); + + return response.statusCode; +} diff --git a/lib/i18n/en_US.json b/lib/i18n/en_US.json index 4b208c9..2020cbe 100644 --- a/lib/i18n/en_US.json +++ b/lib/i18n/en_US.json @@ -89,6 +89,9 @@ "unread": "unread", "expand": "expand", "requested-to-follow": "has requested to follow:", - "follow-requests": "follow requests" + "follow-requests": "follow requests", + "post-deleted": "post deleted", + "delete-this": "delete this", + "deletion-failed": "deletion failed" } \ No newline at end of file diff --git a/lib/partials/post_options.dart b/lib/partials/post_options.dart index e22c999..046a735 100644 --- a/lib/partials/post_options.dart +++ b/lib/partials/post_options.dart @@ -6,6 +6,7 @@ import 'package:loris/dialogues/full_post_view.dart'; import 'package:loris/partials/interaction_button.dart'; import 'package:url_launcher/url_launcher.dart'; import 'package:clipboard/clipboard.dart'; +import 'package:loris/global.dart' as global; void popupPostOptions(context, PostModel model) { showModalBottomSheet( @@ -93,6 +94,7 @@ class _PostOptionsState extends State { "show-in-browser".i18n(), ), ), + widget.model.visibility.boostable ? InteractionButton( model: widget.model, @@ -105,6 +107,24 @@ class _PostOptionsState extends State { type: InteractionType.favorite, extended: true, ), + if ("${widget.model.account.acct}@${global.settings!.identities[widget.model.identity]!.instanceUrl}" == + widget.model.identity) + TextButton.icon( + onPressed: () async { + final result = await deletePost(widget.model); + if (result == 200) { + // ignore: use_build_context_synchronously + Navigator.of(context).pop(); + // ignore: use_build_context_synchronously + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("post-deleted".i18n()))); + } + // ignore: use_build_context_synchronously + ScaffoldMessenger.of(context).showSnackBar( + SnackBar(content: Text("deletion-failed".i18n()))); + }, + icon: const Icon(Icons.delete), + label: Text("delete-this".i18n())), const SizedBox( height: 24, ),