diff --git a/Cargo.lock b/Cargo.lock index 3c3865f..df32cb1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -498,9 +498,9 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "bytes" -version = "1.0.0" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1f8e949d755f9d79112b5bb46938e0ef9d3804a0b16dfab13aafcaa5f0fa72" +checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040" [[package]] name = "bytestring" @@ -508,7 +508,7 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "90706ba19e97b90786e19dc0d5e2abd80008d99d4c0c5d1ad0b5e72cec7c494d" dependencies = [ - "bytes 1.0.0", + "bytes 1.0.1", ] [[package]] @@ -752,7 +752,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project-lite 0.2.3", + "pin-project-lite 0.2.4", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -856,7 +856,7 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747" dependencies = [ - "bytes 1.0.0", + "bytes 1.0.1", "fnv", "itoa", ] @@ -1013,9 +1013,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b" +checksum = "fcf3805d4480bb5b86070dcfeb9e2cb2ebc148adb753c5cca5f884d1d65a42b2" dependencies = [ "cfg-if 0.1.10", ] @@ -1244,9 +1244,9 @@ checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b" [[package]] name = "pin-project-lite" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba36e0a6cc5a4c645073f4984f1ed55d09f5857d4de7c14550baa81a39ef5a17" +checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827" [[package]] name = "pin-utils" @@ -1472,18 +1472,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.118" +version = "1.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800" +checksum = "9bdd36f49e35b61d49efd8aa7fc068fd295961fd2286d0b2ee9a4c7a14e99cc3" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.118" +version = "1.0.119" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df" +checksum = "552954ce79a059ddd5fd68c271592374bd15cab2274970380c000118aeffe1cd" dependencies = [ "proc-macro2", "quote", @@ -1805,7 +1805,7 @@ checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3" dependencies = [ "cfg-if 1.0.0", "log", - "pin-project-lite 0.2.3", + "pin-project-lite 0.2.4", "tracing-core", ] diff --git a/src/main.rs b/src/main.rs index 07a351e..b5520c5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ // Import Crates -use actix_web::{get, middleware, web, App, HttpResponse, HttpServer}; // dev::Service +use actix_web::{middleware, web, App, HttpResponse, HttpServer}; // dev::Service // Reference local files mod post; @@ -21,9 +21,10 @@ async fn robots() -> HttpResponse { .body(include_str!("../static/robots.txt")) } -#[get("/favicon.ico")] async fn favicon() -> HttpResponse { - HttpResponse::Ok().body("") + HttpResponse::Ok() + .header("Cache-Control", "public, max-age=1209600, s-maxage=86400") + .body(include_bytes!("../static/favicon.ico").as_ref()) } #[actix_web::main] @@ -64,7 +65,7 @@ async fn main() -> std::io::Result<()> { .default_service(web::get().to(|| utils::error("Nothing here".to_string()))) // GENERAL SERVICES .route("/style.css/", web::get().to(style)) - .route("/favicon.ico/", web::get().to(HttpResponse::Ok)) + .route("/favicon.ico/", web::get().to(favicon)) .route("/robots.txt/", web::get().to(robots)) // SETTINGS SERVICE .route("/settings/", web::get().to(settings::get)) diff --git a/src/post.rs b/src/post.rs index 6f0f38f..adc4708 100644 --- a/src/post.rs +++ b/src/post.rs @@ -117,7 +117,7 @@ async fn parse_comments(json: &serde_json::Value) -> Vec { // Separate the comment JSON into a Vector of comments let comment_data = match json["data"]["children"].as_array() { Some(f) => f.to_owned(), - None => { let v = Vec::new(); v } + None => Vec::new(), }; let mut comments: Vec = Vec::new(); diff --git a/src/utils.rs b/src/utils.rs index 5725435..0ec409f 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -7,7 +7,7 @@ use base64::encode; use regex::Regex; use serde_json::{from_str, Value}; use std::collections::HashMap; -use time::OffsetDateTime; +use time::{OffsetDateTime, Duration}; use url::Url; // @@ -179,10 +179,15 @@ pub async fn media(data: &serde_json::Value) -> (String, String) { format_url(data["secure_media"]["reddit_video"]["fallback_url"].as_str().unwrap_or_default()) } else if data["post_hint"].as_str().unwrap_or("") == "image" { let preview = data["preview"]["images"][0].clone(); - post_type = "image"; match preview["variants"]["mp4"].as_object() { - Some(gif) => format_url(gif["source"]["url"].as_str().unwrap_or_default()), - None => format_url(preview["source"]["url"].as_str().unwrap_or_default()), + Some(gif) => { + post_type = "gif"; + format_url(gif["source"]["url"].as_str().unwrap_or_default()) + }, + None => { + post_type = "image"; + format_url(preview["source"]["url"].as_str().unwrap_or_default()) + }, } } else if data["is_self"].as_bool().unwrap_or_default() { post_type = "self"; @@ -222,6 +227,18 @@ pub fn parse_rich_flair(flair_type: String, rich_flair: Option<&Vec>, tex result } +pub fn time(unix_time: i64) -> String { + let time = OffsetDateTime::from_unix_timestamp(unix_time); + let time_delta = OffsetDateTime::now_utc() - time; + if time_delta > Duration::days(1) { + time.format("%b %d '%y") // %b %e '%y + } else if time_delta.whole_hours() > 0 { + format!("{}h ago", time_delta.whole_hours()) + } else { + format!("{}m ago", time_delta.whole_minutes()) + } +} + // // JSON PARSING // @@ -300,7 +317,7 @@ pub async fn fetch_posts(path: &str, fallback_title: String) -> Result<(Vec + {% endblock %} diff --git a/templates/post.html b/templates/post.html index e9c7a5b..7eeb4f7 100644 --- a/templates/post.html +++ b/templates/post.html @@ -27,7 +27,7 @@ {% endif %} {{ item.time }} -

{{ item.body }}

+
{{ item.body }}
{%- endmacro %} @@ -66,7 +66,7 @@ {% if post.post_type == "image" %} - {% else if post.post_type == "video" %} + {% else if post.post_type == "video" || post.post_type == "gif" %} {% else if post.post_type == "link" %} {{ post.media }}