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"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
relm4 = { version = "0.6.0", features = ["libadwaita"] }
|
relm4 = { version = "0.6.2", features = ["libadwaita"] }
|
||||||
relm4-components = { version = "0.6.0", features = ["web"] }
|
relm4-components = { version = "0.6.2", features = ["web"] }
|
||||||
reqwest = { version = "0.11", features = ["json", "blocking", "multipart"] }
|
reqwest = { version = "0.11", features = ["json", "blocking", "multipart"] }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
|
|
|
@ -9,7 +9,7 @@ use lemmy_api_common::{
|
||||||
lemmy_db_views::structs::CommentView,
|
lemmy_db_views::structs::CommentView,
|
||||||
post::{
|
post::{
|
||||||
CreatePost, CreatePostLike, CreatePostReport, DeletePost, EditPost, GetPost,
|
CreatePost, CreatePostLike, CreatePostReport, DeletePost, EditPost, GetPost,
|
||||||
GetPostResponse, PostReportResponse, PostResponse, SavePost,
|
GetPostResponse, MarkPostAsRead, PostReportResponse, PostResponse, SavePost,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
use std::result::Result;
|
use std::result::Result;
|
||||||
|
@ -129,3 +129,12 @@ pub fn report_post(post_id: PostId, reason: String) -> Result<PostReportResponse
|
||||||
};
|
};
|
||||||
super::post("/post/report", ¶ms)
|
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,
|
OpenCommunity,
|
||||||
OpenPerson,
|
OpenPerson,
|
||||||
ToggleSaved,
|
ToggleSaved,
|
||||||
|
ToggleRead,
|
||||||
DeletePost,
|
DeletePost,
|
||||||
UpdateSaved(bool),
|
UpdateSaved(bool),
|
||||||
|
UpdateRead(bool),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[relm4::factory(pub)]
|
#[relm4::factory(pub)]
|
||||||
|
@ -128,6 +130,14 @@ impl FactoryComponent for PostRow {
|
||||||
#[watch]
|
#[watch]
|
||||||
set_active: self.post.saved,
|
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 {
|
gtk::Button {
|
||||||
set_icon_name: "edit-delete",
|
set_icon_name: "edit-delete",
|
||||||
connect_clicked => PostRowMsg::DeletePost,
|
connect_clicked => PostRowMsg::DeletePost,
|
||||||
|
@ -207,13 +217,26 @@ impl FactoryComponent for PostRow {
|
||||||
let post_id = self.post.post.id;
|
let post_id = self.post.post.id;
|
||||||
let new_state = !self.post.saved;
|
let new_state = !self.post.saved;
|
||||||
std::thread::spawn(move || match api::post::save_post(post_id, new_state) {
|
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),
|
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) => {
|
PostRowMsg::UpdateSaved(is_saved) => {
|
||||||
self.post.saved = is_saved;
|
self.post.saved = is_saved;
|
||||||
}
|
}
|
||||||
|
PostRowMsg::UpdateRead(is_read) => {
|
||||||
|
self.post.read = is_read;
|
||||||
|
}
|
||||||
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