feat: indicate and mark posts as read/unread (closes #32)
This commit is contained in:
parent
7dc4841e2d
commit
545b7bc313
File diff suppressed because it is too large
Load Diff
|
@ -4,8 +4,8 @@ version = "0.4.0"
|
|||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
relm4 = { version = "0.6.0", features = ["libadwaita"] }
|
||||
relm4-components = { version = "0.6.0", features = ["web"] }
|
||||
relm4 = { version = "0.6.2", features = ["libadwaita"] }
|
||||
relm4-components = { version = "0.6.2", features = ["web"] }
|
||||
reqwest = { version = "0.11", features = ["json", "blocking", "multipart"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
|
|
|
@ -9,7 +9,7 @@ use lemmy_api_common::{
|
|||
lemmy_db_views::structs::CommentView,
|
||||
post::{
|
||||
CreatePost, CreatePostLike, CreatePostReport, DeletePost, EditPost, GetPost,
|
||||
GetPostResponse, PostReportResponse, PostResponse, SavePost,
|
||||
GetPostResponse, MarkPostAsRead, PostReportResponse, PostResponse, SavePost,
|
||||
},
|
||||
};
|
||||
use std::result::Result;
|
||||
|
@ -129,3 +129,12 @@ pub fn report_post(post_id: PostId, reason: String) -> Result<PostReportResponse
|
|||
};
|
||||
super::post("/post/report", ¶ms)
|
||||
}
|
||||
|
||||
pub fn mark_post_as_read(post_id: PostId, read: bool) -> Result<PostResponse, reqwest::Error> {
|
||||
let params = MarkPostAsRead {
|
||||
post_id,
|
||||
read,
|
||||
auth: settings::get_current_account().jwt.unwrap(),
|
||||
};
|
||||
super::post("/post/mark_as_read", ¶ms)
|
||||
}
|
||||
|
|
|
@ -24,8 +24,10 @@ pub enum PostRowMsg {
|
|||
OpenCommunity,
|
||||
OpenPerson,
|
||||
ToggleSaved,
|
||||
ToggleRead,
|
||||
DeletePost,
|
||||
UpdateSaved(bool),
|
||||
UpdateRead(bool),
|
||||
}
|
||||
|
||||
#[relm4::factory(pub)]
|
||||
|
@ -128,6 +130,14 @@ impl FactoryComponent for PostRow {
|
|||
#[watch]
|
||||
set_active: self.post.saved,
|
||||
},
|
||||
gtk::ToggleButton {
|
||||
set_icon_name: "mail-mark-read",
|
||||
set_margin_start: 10,
|
||||
connect_clicked => PostRowMsg::ToggleRead,
|
||||
set_visible: settings::get_current_account().jwt.is_some(),
|
||||
#[watch]
|
||||
set_active: self.post.read,
|
||||
},
|
||||
gtk::Button {
|
||||
set_icon_name: "edit-delete",
|
||||
connect_clicked => PostRowMsg::DeletePost,
|
||||
|
@ -207,13 +217,26 @@ impl FactoryComponent for PostRow {
|
|||
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)),
|
||||
Ok(_) => sender.input(PostRowMsg::UpdateSaved(new_state)),
|
||||
Err(err) => println!("{}", err),
|
||||
});
|
||||
}
|
||||
PostRowMsg::ToggleRead => {
|
||||
let post_id = self.post.post.id;
|
||||
let new_state = !self.post.read;
|
||||
std::thread::spawn(move || {
|
||||
match api::post::mark_post_as_read(post_id, new_state) {
|
||||
Ok(_) => sender.input(PostRowMsg::UpdateRead(new_state)),
|
||||
Err(err) => println!("{}", err),
|
||||
}
|
||||
});
|
||||
}
|
||||
PostRowMsg::UpdateSaved(is_saved) => {
|
||||
self.post.saved = is_saved;
|
||||
}
|
||||
PostRowMsg::UpdateRead(is_read) => {
|
||||
self.post.read = is_read;
|
||||
}
|
||||
PostRowMsg::DeletePost => {
|
||||
let post_id = self.post.post.id;
|
||||
std::thread::spawn(move || {
|
||||
|
|
Loading…
Reference in New Issue