forked from cadey/xesite
closer integration into android, read estimates
Signed-off-by: Christine Dodrill <me@christine.website>
This commit is contained in:
parent
0019b0a4e9
commit
7dfdd131e4
|
@ -1,5 +1,7 @@
|
||||||
# This file is automatically @generated by Cargo.
|
# This file is automatically @generated by Cargo.
|
||||||
# It is not intended for manual editing.
|
# It is not intended for manual editing.
|
||||||
|
version = 3
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "abnf"
|
name = "abnf"
|
||||||
version = "0.6.1"
|
version = "0.6.1"
|
||||||
|
@ -473,6 +475,12 @@ dependencies = [
|
||||||
"version_check",
|
"version_check",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "estimated_read_time"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "649cfd341410b1f8906e8ca1b39e5534be9312fda9182edd770cec34dfbce8d7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "eyre"
|
name = "eyre"
|
||||||
version = "0.6.5"
|
version = "0.6.5"
|
||||||
|
@ -2593,6 +2601,7 @@ dependencies = [
|
||||||
"color-eyre",
|
"color-eyre",
|
||||||
"comrak",
|
"comrak",
|
||||||
"envy",
|
"envy",
|
||||||
|
"estimated_read_time",
|
||||||
"eyre",
|
"eyre",
|
||||||
"futures",
|
"futures",
|
||||||
"glob",
|
"glob",
|
||||||
|
|
|
@ -13,6 +13,7 @@ color-eyre = "0.5"
|
||||||
chrono = "0.4"
|
chrono = "0.4"
|
||||||
comrak = "0.10"
|
comrak = "0.10"
|
||||||
envy = "0.4"
|
envy = "0.4"
|
||||||
|
estimated_read_time = "1"
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
glob = "0.3"
|
glob = "0.3"
|
||||||
hyper = "0.14"
|
hyper = "0.14"
|
||||||
|
|
|
@ -142,6 +142,8 @@ async fn main() -> Result<()> {
|
||||||
let sitemap = warp::path("sitemap.xml")
|
let sitemap = warp::path("sitemap.xml")
|
||||||
.and(with_state(state.clone()))
|
.and(with_state(state.clone()))
|
||||||
.and_then(handlers::feeds::sitemap);
|
.and_then(handlers::feeds::sitemap);
|
||||||
|
let asset_links = warp::path!(".well-known" / "assetlinks.json")
|
||||||
|
.and(warp::fs::file("./static/assetlinks.json"));
|
||||||
|
|
||||||
let go_vanity_jsonfeed = warp::path("jsonfeed")
|
let go_vanity_jsonfeed = warp::path("jsonfeed")
|
||||||
.and(warp::any().map(move || "christine.website/jsonfeed"))
|
.and(warp::any().map(move || "christine.website/jsonfeed"))
|
||||||
|
@ -162,7 +164,7 @@ async fn main() -> Result<()> {
|
||||||
});
|
});
|
||||||
|
|
||||||
let static_pages = index
|
let static_pages = index
|
||||||
.or(feeds)
|
.or(feeds.or(asset_links))
|
||||||
.or(resume.or(signalboost))
|
.or(resume.or(signalboost))
|
||||||
.or(patrons)
|
.or(patrons)
|
||||||
.or(jsonfeed.or(atom.or(sitemap)).or(rss))
|
.or(jsonfeed.or(atom.or(sitemap)).or(rss))
|
||||||
|
|
|
@ -15,6 +15,7 @@ pub struct Post {
|
||||||
pub date: DateTime<FixedOffset>,
|
pub date: DateTime<FixedOffset>,
|
||||||
pub mentions: Vec<mi::WebMention>,
|
pub mentions: Vec<mi::WebMention>,
|
||||||
pub new_post: NewPost,
|
pub new_post: NewPost,
|
||||||
|
pub read_time_estimate_minutes: u64,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Used with the Android app to show information in a widget.
|
/// Used with the Android app to show information in a widget.
|
||||||
|
@ -80,33 +81,6 @@ impl Post {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn trim(string: &str) -> String {
|
|
||||||
let mut buf = String::new();
|
|
||||||
let mut capturing = false;
|
|
||||||
|
|
||||||
for line in string.lines() {
|
|
||||||
if line.starts_with("#") {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if line == "" {
|
|
||||||
if capturing && buf.len() > 260 {
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
capturing = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if capturing {
|
|
||||||
buf.push_str(" ");
|
|
||||||
buf.push_str(line);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
buf
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn read_post(dir: &str, fname: PathBuf) -> Result<Post> {
|
async fn read_post(dir: &str, fname: PathBuf) -> Result<Post> {
|
||||||
let body = fs::read_to_string(fname.clone())
|
let body = fs::read_to_string(fname.clone())
|
||||||
.await
|
.await
|
||||||
|
@ -133,9 +107,17 @@ async fn read_post(dir: &str, fname: PathBuf) -> Result<Post> {
|
||||||
Err(_) => vec![],
|
Err(_) => vec![],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let time_taken = estimated_read_time::text(
|
||||||
|
&body,
|
||||||
|
&estimated_read_time::Options::new()
|
||||||
|
.build()
|
||||||
|
.unwrap_or_default(),
|
||||||
|
);
|
||||||
|
let read_time_estimate_minutes = time_taken.seconds() / 60;
|
||||||
|
|
||||||
let new_post = NewPost {
|
let new_post = NewPost {
|
||||||
title: front_matter.title.clone(),
|
title: front_matter.title.clone(),
|
||||||
summary: trim(body).to_string(),
|
summary: format!("{} minute read", read_time_estimate_minutes),
|
||||||
link: format!("https://christine.website/{}", link),
|
link: format!("https://christine.website/{}", link),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -146,6 +128,7 @@ async fn read_post(dir: &str, fname: PathBuf) -> Result<Post> {
|
||||||
date,
|
date,
|
||||||
mentions,
|
mentions,
|
||||||
new_post,
|
new_post,
|
||||||
|
read_time_estimate_minutes,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
[{
|
||||||
|
"relation": ["delegate_permission/common.handle_all_urls"],
|
||||||
|
"target": {
|
||||||
|
"namespace": "android_app",
|
||||||
|
"package_name": "website.christine.xesite",
|
||||||
|
"sha256_cert_fingerprints":
|
||||||
|
["C9:5B:9C:65:85:FF:D5:6F:6C:12:46:61:1D:1F:2E:A3:C7:E1:7E:8F:B0:F1:F6:7C:EF:24:DE:54:2E:94:24:0C"]
|
||||||
|
}
|
||||||
|
}]
|
Loading…
Reference in New Issue