From c401ca54a23e3868213d6f5dc97e6a6b3bab42c1 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Mon, 7 Aug 2023 16:14:42 +0200 Subject: [PATCH] feat: support for blocking other users --- src/api/user.rs | 15 ++++++++++++++- src/components/profile_page.rs | 20 +++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/api/user.rs b/src/api/user.rs index a76b20a..0f6d8ab 100644 --- a/src/api/user.rs +++ b/src/api/user.rs @@ -2,7 +2,7 @@ use lemmy_api_common::{ lemmy_db_schema::{newtypes::PersonId, CommentSortType}, person::{ GetPersonDetails, GetPersonDetailsResponse, GetPersonMentions, GetPersonMentionsResponse, - GetReplies, GetRepliesResponse, MarkAllAsRead + GetReplies, GetRepliesResponse, MarkAllAsRead, BlockPersonResponse, BlockPerson, }, }; @@ -24,6 +24,19 @@ pub fn get_user( super::get("/user", ¶ms) } +pub fn block_user( + person_id: PersonId, + block: bool, +) -> std::result::Result { + let params = BlockPerson { + person_id, + block, + auth: settings::get_current_account().jwt.unwrap(), + }; + + super::post("/user/block", ¶ms) +} + pub fn default_person() -> GetPersonDetailsResponse { serde_json::from_str(include_str!("../examples/person.json")).unwrap() } diff --git a/src/components/profile_page.rs b/src/components/profile_page.rs index 9b4de10..f6f8501 100644 --- a/src/components/profile_page.rs +++ b/src/components/profile_page.rs @@ -31,6 +31,7 @@ pub struct ProfilePage { pub enum ProfileInput { FetchPerson(Option), UpdatePerson(GetPersonDetailsResponse, bool), + BlockUser, SendMessageRequest, SendMessage(String), } @@ -77,6 +78,7 @@ impl SimpleComponent for ProfilePage { set_orientation: gtk::Orientation::Horizontal, set_margin_top: 10, set_margin_bottom: 10, + set_spacing: 10, set_hexpand: false, set_halign: gtk::Align::Center, @@ -84,10 +86,15 @@ impl SimpleComponent for ProfilePage { #[watch] set_text: &format!("{} posts, {} comments", model.info.person_view.counts.post_count, model.info.person_view.counts.comment_count), }, + gtk::Button { + set_label: "Block", + #[watch] + set_visible: settings::get_current_account().jwt.is_some() && settings::get_current_account().id != model.info.person_view.person.id.0, + connect_clicked => ProfileInput::BlockUser, + }, gtk::Button { set_label: "Send message", connect_clicked => ProfileInput::SendMessageRequest, - set_margin_start: 10, set_visible: settings::get_current_account().jwt.is_some(), } }, @@ -232,6 +239,17 @@ impl SimpleComponent for ProfilePage { } }; }); + }, + ProfileInput::BlockUser => { + let person_id = self.info.person_view.person.id; + std::thread::spawn(move || { + match api::user::block_user(person_id, true) { + Ok(_resp) => {} + Err(err) => { + println!("{}", err); + } + } + }); } } }