feat: indicate and mark posts as read/unread (closes #32)

This commit is contained in:
Bnyro 2023-12-14 13:46:41 +01:00
parent 7dc4841e2d
commit 545b7bc313
4 changed files with 603 additions and 439 deletions

1002
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -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"

View File

@ -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", &params)
}
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", &params)
}

View File

@ -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 || {