feat: support for blocking other users

This commit is contained in:
Bnyro 2023-08-07 16:14:42 +02:00
parent 58c77072ed
commit c401ca54a2
2 changed files with 33 additions and 2 deletions

View File

@ -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", &params)
}
pub fn block_user(
person_id: PersonId,
block: bool,
) -> std::result::Result<BlockPersonResponse, reqwest::Error> {
let params = BlockPerson {
person_id,
block,
auth: settings::get_current_account().jwt.unwrap(),
};
super::post("/user/block", &params)
}
pub fn default_person() -> GetPersonDetailsResponse {
serde_json::from_str(include_str!("../examples/person.json")).unwrap()
}

View File

@ -31,6 +31,7 @@ pub struct ProfilePage {
pub enum ProfileInput {
FetchPerson(Option<PersonId>),
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);
}
}
});
}
}
}