Merge branch 'master' into rich-flairs
This commit is contained in:
commit
c6627ceece
28
Cargo.lock
generated
28
Cargo.lock
generated
@ -498,9 +498,9 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bytes"
|
name = "bytes"
|
||||||
version = "1.0.0"
|
version = "1.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ad1f8e949d755f9d79112b5bb46938e0ef9d3804a0b16dfab13aafcaa5f0fa72"
|
checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bytestring"
|
name = "bytestring"
|
||||||
@ -508,7 +508,7 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "90706ba19e97b90786e19dc0d5e2abd80008d99d4c0c5d1ad0b5e72cec7c494d"
|
checksum = "90706ba19e97b90786e19dc0d5e2abd80008d99d4c0c5d1ad0b5e72cec7c494d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes 1.0.0",
|
"bytes 1.0.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -752,7 +752,7 @@ dependencies = [
|
|||||||
"futures-sink",
|
"futures-sink",
|
||||||
"futures-task",
|
"futures-task",
|
||||||
"memchr",
|
"memchr",
|
||||||
"pin-project-lite 0.2.3",
|
"pin-project-lite 0.2.4",
|
||||||
"pin-utils",
|
"pin-utils",
|
||||||
"proc-macro-hack",
|
"proc-macro-hack",
|
||||||
"proc-macro-nested",
|
"proc-macro-nested",
|
||||||
@ -856,7 +856,7 @@ version = "0.2.3"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747"
|
checksum = "7245cd7449cc792608c3c8a9eaf69bd4eabbabf802713748fd739c98b82f0747"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes 1.0.0",
|
"bytes 1.0.1",
|
||||||
"fnv",
|
"fnv",
|
||||||
"itoa",
|
"itoa",
|
||||||
]
|
]
|
||||||
@ -1013,9 +1013,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "log"
|
name = "log"
|
||||||
version = "0.4.11"
|
version = "0.4.13"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
|
checksum = "fcf3805d4480bb5b86070dcfeb9e2cb2ebc148adb753c5cca5f884d1d65a42b2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 0.1.10",
|
"cfg-if 0.1.10",
|
||||||
]
|
]
|
||||||
@ -1244,9 +1244,9 @@ checksum = "c917123afa01924fc84bb20c4c03f004d9c38e5127e3c039bbf7f4b9c76a2f6b"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project-lite"
|
name = "pin-project-lite"
|
||||||
version = "0.2.3"
|
version = "0.2.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ba36e0a6cc5a4c645073f4984f1ed55d09f5857d4de7c14550baa81a39ef5a17"
|
checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-utils"
|
name = "pin-utils"
|
||||||
@ -1472,18 +1472,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.118"
|
version = "1.0.119"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "06c64263859d87aa2eb554587e2d23183398d617427327cf2b3d0ed8c69e4800"
|
checksum = "9bdd36f49e35b61d49efd8aa7fc068fd295961fd2286d0b2ee9a4c7a14e99cc3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.118"
|
version = "1.0.119"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c84d3526699cd55261af4b941e4e725444df67aa4f9e6a3564f18030d12672df"
|
checksum = "552954ce79a059ddd5fd68c271592374bd15cab2274970380c000118aeffe1cd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -1805,7 +1805,7 @@ checksum = "9f47026cdc4080c07e49b37087de021820269d996f581aac150ef9e5583eefe3"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"log",
|
"log",
|
||||||
"pin-project-lite 0.2.3",
|
"pin-project-lite 0.2.4",
|
||||||
"tracing-core",
|
"tracing-core",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Import Crates
|
// 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
|
// Reference local files
|
||||||
mod post;
|
mod post;
|
||||||
@ -21,9 +21,10 @@ async fn robots() -> HttpResponse {
|
|||||||
.body(include_str!("../static/robots.txt"))
|
.body(include_str!("../static/robots.txt"))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/favicon.ico")]
|
|
||||||
async fn favicon() -> HttpResponse {
|
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]
|
#[actix_web::main]
|
||||||
@ -64,7 +65,7 @@ async fn main() -> std::io::Result<()> {
|
|||||||
.default_service(web::get().to(|| utils::error("Nothing here".to_string())))
|
.default_service(web::get().to(|| utils::error("Nothing here".to_string())))
|
||||||
// GENERAL SERVICES
|
// GENERAL SERVICES
|
||||||
.route("/style.css/", web::get().to(style))
|
.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))
|
.route("/robots.txt/", web::get().to(robots))
|
||||||
// SETTINGS SERVICE
|
// SETTINGS SERVICE
|
||||||
.route("/settings/", web::get().to(settings::get))
|
.route("/settings/", web::get().to(settings::get))
|
||||||
|
@ -117,7 +117,7 @@ async fn parse_comments(json: &serde_json::Value) -> Vec<Comment> {
|
|||||||
// Separate the comment JSON into a Vector of comments
|
// Separate the comment JSON into a Vector of comments
|
||||||
let comment_data = match json["data"]["children"].as_array() {
|
let comment_data = match json["data"]["children"].as_array() {
|
||||||
Some(f) => f.to_owned(),
|
Some(f) => f.to_owned(),
|
||||||
None => { let v = Vec::new(); v }
|
None => Vec::new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut comments: Vec<Comment> = Vec::new();
|
let mut comments: Vec<Comment> = Vec::new();
|
||||||
|
27
src/utils.rs
27
src/utils.rs
@ -7,7 +7,7 @@ use base64::encode;
|
|||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
use serde_json::{from_str, Value};
|
use serde_json::{from_str, Value};
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
use time::OffsetDateTime;
|
use time::{OffsetDateTime, Duration};
|
||||||
use url::Url;
|
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())
|
format_url(data["secure_media"]["reddit_video"]["fallback_url"].as_str().unwrap_or_default())
|
||||||
} else if data["post_hint"].as_str().unwrap_or("") == "image" {
|
} else if data["post_hint"].as_str().unwrap_or("") == "image" {
|
||||||
let preview = data["preview"]["images"][0].clone();
|
let preview = data["preview"]["images"][0].clone();
|
||||||
post_type = "image";
|
|
||||||
match preview["variants"]["mp4"].as_object() {
|
match preview["variants"]["mp4"].as_object() {
|
||||||
Some(gif) => format_url(gif["source"]["url"].as_str().unwrap_or_default()),
|
Some(gif) => {
|
||||||
None => format_url(preview["source"]["url"].as_str().unwrap_or_default()),
|
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() {
|
} else if data["is_self"].as_bool().unwrap_or_default() {
|
||||||
post_type = "self";
|
post_type = "self";
|
||||||
@ -222,6 +227,18 @@ pub fn parse_rich_flair(flair_type: String, rich_flair: Option<&Vec<Value>>, tex
|
|||||||
result
|
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
|
// JSON PARSING
|
||||||
//
|
//
|
||||||
@ -300,7 +317,7 @@ pub async fn fetch_posts(path: &str, fallback_title: String) -> Result<(Vec<Post
|
|||||||
stickied: post["data"]["stickied"].as_bool().unwrap_or_default(),
|
stickied: post["data"]["stickied"].as_bool().unwrap_or_default(),
|
||||||
},
|
},
|
||||||
permalink: val(post, "permalink"),
|
permalink: val(post, "permalink"),
|
||||||
time: OffsetDateTime::from_unix_timestamp(unix_time).format("%b %d '%y"), // %b %e '%y
|
time: time(unix_time),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BIN
static/favicon.ico
Normal file
BIN
static/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 789 B |
@ -223,7 +223,7 @@ aside {
|
|||||||
/* Sorting and Search */
|
/* Sorting and Search */
|
||||||
|
|
||||||
.search_label {
|
.search_label {
|
||||||
max-width: 100px;
|
max-width: 300px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
@ -789,6 +789,7 @@ input[type="submit"] {
|
|||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
box-shadow: var(--shadow);
|
box-shadow: var(--shadow);
|
||||||
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.md table {
|
.md table {
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
<meta name="description" content="View on Libreddit, an alternative private front-end to Reddit.">
|
<meta name="description" content="View on Libreddit, an alternative private front-end to Reddit.">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
|
||||||
<link rel="stylesheet" href="/style.css">
|
<link rel="stylesheet" href="/style.css">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</head>
|
</head>
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
<span class="datetime">{{ item.time }}</span>
|
<span class="datetime">{{ item.time }}</span>
|
||||||
</summary>
|
</summary>
|
||||||
<p class="comment_body">{{ item.body }}</p>
|
<div class="comment_body">{{ item.body }}</div>
|
||||||
{%- endmacro %}
|
{%- endmacro %}
|
||||||
|
|
||||||
<!-- CLOSE COMMENT MACRO -->
|
<!-- CLOSE COMMENT MACRO -->
|
||||||
@ -66,7 +66,7 @@
|
|||||||
<!-- POST MEDIA -->
|
<!-- POST MEDIA -->
|
||||||
{% if post.post_type == "image" %}
|
{% if post.post_type == "image" %}
|
||||||
<img class="post_media" src="{{ post.media }}"/>
|
<img class="post_media" src="{{ post.media }}"/>
|
||||||
{% else if post.post_type == "video" %}
|
{% else if post.post_type == "video" || post.post_type == "gif" %}
|
||||||
<video class="post_media" src="{{ post.media }}" controls autoplay loop></video>
|
<video class="post_media" src="{{ post.media }}" controls autoplay loop></video>
|
||||||
{% else if post.post_type == "link" %}
|
{% else if post.post_type == "link" %}
|
||||||
<a id="post_url" href="{{ post.media }}">{{ post.media }}</a>
|
<a id="post_url" href="{{ post.media }}">{{ post.media }}</a>
|
||||||
|
Loading…
Reference in New Issue
Block a user