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,
|
lemmy_db_views::structs::CommentView,
|
||||||
post::{
|
post::{
|
||||||
CreatePost, CreatePostLike, DeletePost, EditPost, GetPost, GetPostResponse, PostResponse,
|
CreatePost, CreatePostLike, DeletePost, EditPost, GetPost, GetPostResponse, PostResponse,
|
||||||
|
SavePost,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
use std::result::Result;
|
||||||
|
|
||||||
pub fn get_post(id: PostId) -> Result<GetPostResponse, reqwest::Error> {
|
pub fn get_post(id: PostId) -> Result<GetPostResponse, reqwest::Error> {
|
||||||
let params = GetPost {
|
let params = GetPost {
|
||||||
|
@ -109,3 +111,12 @@ pub fn delete_post(post_id: PostId) -> Result<PostResponse, reqwest::Error> {
|
||||||
};
|
};
|
||||||
super::post("/post/delete", ¶ms)
|
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),
|
EditPostRequest(EditorData),
|
||||||
CreatedComment(CommentView),
|
CreatedComment(CommentView),
|
||||||
OpenEditPostDialog,
|
OpenEditPostDialog,
|
||||||
|
ToggleSaved,
|
||||||
|
UpdateSaved(bool),
|
||||||
DeletePost,
|
DeletePost,
|
||||||
DoneEditPost(PostView),
|
DoneEditPost(PostView),
|
||||||
PassAppMessage(crate::AppMsg),
|
PassAppMessage(crate::AppMsg),
|
||||||
|
@ -173,7 +175,15 @@ impl SimpleComponent for PostPage {
|
||||||
connect_clicked => PostPageInput::OpenCreateCommentDialog,
|
connect_clicked => PostPageInput::OpenCreateCommentDialog,
|
||||||
#[watch]
|
#[watch]
|
||||||
set_visible: settings::get_current_account().jwt.is_some(),
|
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]
|
#[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 => {
|
PostPageInput::DeletePost => {
|
||||||
let post_id = self.info.post_view.post.id;
|
let post_id = self.info.post_view.post.id;
|
||||||
std::thread::spawn(move || {
|
std::thread::spawn(move || {
|
||||||
|
|
|
@ -21,7 +21,9 @@ pub enum PostRowMsg {
|
||||||
OpenPost,
|
OpenPost,
|
||||||
OpenCommunity,
|
OpenCommunity,
|
||||||
OpenPerson,
|
OpenPerson,
|
||||||
|
ToggleSaved,
|
||||||
DeletePost,
|
DeletePost,
|
||||||
|
UpdateSaved(bool),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[relm4::factory(pub)]
|
#[relm4::factory(pub)]
|
||||||
|
@ -98,6 +100,14 @@ impl FactoryComponent for PostRow {
|
||||||
set_halign: gtk::Align::Start,
|
set_halign: gtk::Align::Start,
|
||||||
set_text: &format!("{} comments", self.post.counts.comments.clone()),
|
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 {
|
gtk::Button {
|
||||||
set_icon_name: "edit-delete",
|
set_icon_name: "edit-delete",
|
||||||
connect_clicked => PostRowMsg::DeletePost,
|
connect_clicked => PostRowMsg::DeletePost,
|
||||||
|
@ -161,6 +171,17 @@ impl FactoryComponent for PostRow {
|
||||||
PostRowMsg::OpenPost => {
|
PostRowMsg::OpenPost => {
|
||||||
sender.output(crate::AppMsg::OpenPost(self.post.post.id.clone()))
|
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 => {
|
PostRowMsg::DeletePost => {
|
||||||
let post_id = self.post.post.id;
|
let post_id = self.post.post.id;
|
||||||
std::thread::spawn(move || {
|
std::thread::spawn(move || {
|
||||||
|
|
Loading…
Reference in New Issue