mirror of
https://github.com/spikecodes/libreddit.git
synced 2025-12-23 22:12:36 +01:00
Default Comment Sort Setting
This commit is contained in:
@@ -6,27 +6,33 @@ use time::{Duration, OffsetDateTime};
|
||||
|
||||
// STRUCTS
|
||||
#[derive(Template)]
|
||||
#[template(path = "settings.html", escape = "none")]
|
||||
#[template(path = "settings.html")]
|
||||
struct SettingsTemplate {
|
||||
layout: String,
|
||||
comment_sort: String,
|
||||
}
|
||||
|
||||
#[derive(serde::Deserialize)]
|
||||
pub struct Preferences {
|
||||
pub struct SettingsForm {
|
||||
layout: Option<String>,
|
||||
comment_sort: Option<String>,
|
||||
}
|
||||
|
||||
// FUNCTIONS
|
||||
|
||||
// Retrieve cookies from request "Cookie" header
|
||||
pub async fn get(req: HttpRequest) -> HttpResponse {
|
||||
let s = SettingsTemplate { layout: cookie(req, "layout") }.render().unwrap();
|
||||
|
||||
let s = SettingsTemplate {
|
||||
layout: cookie(req.to_owned(), "layout"),
|
||||
comment_sort: cookie(req, "comment_sort"),
|
||||
}
|
||||
.render()
|
||||
.unwrap();
|
||||
HttpResponse::Ok().content_type("text/html").body(s)
|
||||
}
|
||||
|
||||
// Set cookies using response "Set-Cookie" header
|
||||
pub async fn set(req: HttpRequest, form: Form<Preferences>) -> HttpResponse {
|
||||
pub async fn set(req: HttpRequest, form: Form<SettingsForm>) -> HttpResponse {
|
||||
let mut response = HttpResponse::Found();
|
||||
|
||||
match &form.layout {
|
||||
@@ -40,6 +46,17 @@ pub async fn set(req: HttpRequest, form: Form<Preferences>) -> HttpResponse {
|
||||
None => response.del_cookie(&actix_web::HttpMessage::cookie(&req, "layout").unwrap()),
|
||||
};
|
||||
|
||||
match &form.comment_sort {
|
||||
Some(value) => response.cookie(
|
||||
Cookie::build("comment_sort", value)
|
||||
.path("/")
|
||||
.http_only(true)
|
||||
.expires(OffsetDateTime::now_utc() + Duration::weeks(52))
|
||||
.finish(),
|
||||
),
|
||||
None => response.del_cookie(&actix_web::HttpMessage::cookie(&req, "comment_sort").unwrap()),
|
||||
};
|
||||
|
||||
response
|
||||
.content_type("text/html")
|
||||
.set_header("Location", "/settings")
|
||||
|
||||
Reference in New Issue
Block a user