support for bookmarking posts
This commit is contained in:
parent
2442843ce3
commit
572b1992b1
|
@ -9,8 +9,10 @@ use lemmy_api_common::{
|
|||
lemmy_db_views::structs::CommentView,
|
||||
post::{
|
||||
CreatePost, CreatePostLike, DeletePost, EditPost, GetPost, GetPostResponse, PostResponse,
|
||||
SavePost,
|
||||
},
|
||||
};
|
||||
use std::result::Result;
|
||||
|
||||
pub fn get_post(id: PostId) -> Result<GetPostResponse, reqwest::Error> {
|
||||
let params = GetPost {
|
||||
|
@ -109,3 +111,12 @@ pub fn delete_post(post_id: PostId) -> Result<PostResponse, reqwest::Error> {
|
|||
};
|
||||
super::post("/post/delete", ¶ms)
|
||||
}
|
||||
|
||||
pub fn save_post(post_id: PostId, save: bool) -> Result<PostResponse, reqwest::Error> {
|
||||
let params = SavePost {
|
||||
auth: settings::get_current_account().jwt.unwrap(),
|
||||
post_id,
|
||||
save,
|
||||
};
|
||||
super::put("/post/save", ¶ms)
|
||||
}
|
||||
|
|
|
@ -42,6 +42,8 @@ pub enum PostPageInput {
|
|||
EditPostRequest(EditorData),
|
||||
CreatedComment(CommentView),
|
||||
OpenEditPostDialog,
|
||||
ToggleSaved,
|
||||
UpdateSaved(bool),
|
||||
DeletePost,
|
||||
DoneEditPost(PostView),
|
||||
PassAppMessage(crate::AppMsg),
|
||||
|
@ -173,7 +175,15 @@ impl SimpleComponent for PostPage {
|
|||
connect_clicked => PostPageInput::OpenCreateCommentDialog,
|
||||
#[watch]
|
||||
set_visible: settings::get_current_account().jwt.is_some(),
|
||||
}
|
||||
},
|
||||
gtk::ToggleButton {
|
||||
set_icon_name: "bookmark-new",
|
||||
set_margin_start: 10,
|
||||
connect_clicked => PostPageInput::ToggleSaved,
|
||||
set_visible: settings::get_current_account().jwt.is_some(),
|
||||
#[watch]
|
||||
set_active: model.info.post_view.saved,
|
||||
},
|
||||
},
|
||||
|
||||
#[local_ref]
|
||||
|
@ -310,6 +320,17 @@ impl SimpleComponent for PostPage {
|
|||
};
|
||||
});
|
||||
}
|
||||
PostPageInput::ToggleSaved => {
|
||||
let post_id = self.info.post_view.post.id;
|
||||
let new_state = !self.info.post_view.saved;
|
||||
std::thread::spawn(move || match api::post::save_post(post_id, new_state) {
|
||||
Ok(post) => sender.input(PostPageInput::UpdateSaved(post.post_view.saved)),
|
||||
Err(err) => println!("{}", err),
|
||||
});
|
||||
}
|
||||
PostPageInput::UpdateSaved(is_saved) => {
|
||||
self.info.post_view.saved = is_saved;
|
||||
}
|
||||
PostPageInput::DeletePost => {
|
||||
let post_id = self.info.post_view.post.id;
|
||||
std::thread::spawn(move || {
|
||||
|
|
|
@ -21,7 +21,9 @@ pub enum PostRowMsg {
|
|||
OpenPost,
|
||||
OpenCommunity,
|
||||
OpenPerson,
|
||||
ToggleSaved,
|
||||
DeletePost,
|
||||
UpdateSaved(bool),
|
||||
}
|
||||
|
||||
#[relm4::factory(pub)]
|
||||
|
@ -98,6 +100,14 @@ impl FactoryComponent for PostRow {
|
|||
set_halign: gtk::Align::Start,
|
||||
set_text: &format!("{} comments", self.post.counts.comments.clone()),
|
||||
},
|
||||
gtk::ToggleButton {
|
||||
set_icon_name: "bookmark-new",
|
||||
set_margin_start: 10,
|
||||
connect_clicked => PostRowMsg::ToggleSaved,
|
||||
set_visible: settings::get_current_account().jwt.is_some(),
|
||||
#[watch]
|
||||
set_active: self.post.saved,
|
||||
},
|
||||
gtk::Button {
|
||||
set_icon_name: "edit-delete",
|
||||
connect_clicked => PostRowMsg::DeletePost,
|
||||
|
@ -161,6 +171,17 @@ impl FactoryComponent for PostRow {
|
|||
PostRowMsg::OpenPost => {
|
||||
sender.output(crate::AppMsg::OpenPost(self.post.post.id.clone()))
|
||||
}
|
||||
PostRowMsg::ToggleSaved => {
|
||||
let post_id = self.post.post.id;
|
||||
let new_state = !self.post.saved;
|
||||
std::thread::spawn(move || match api::post::save_post(post_id, new_state) {
|
||||
Ok(post) => sender.input(PostRowMsg::UpdateSaved(post.post_view.saved)),
|
||||
Err(err) => println!("{}", err),
|
||||
});
|
||||
}
|
||||
PostRowMsg::UpdateSaved(is_saved) => {
|
||||
self.post.saved = is_saved;
|
||||
}
|
||||
PostRowMsg::DeletePost => {
|
||||
let post_id = self.post.post.id;
|
||||
std::thread::spawn(move || {
|
||||
|
|
Loading…
Reference in New Issue