1
0
mirror of https://gitlab.com/Anson-Projects/anson-stuff/zinetest.git synced 2025-06-15 05:26:39 +00:00

Use Fewer Posts for Building in Development

This commit is contained in:
Anson Biggs 2024-02-24 03:41:03 +00:00
parent a46030a251
commit 890c488e0f

View File

@ -11,6 +11,7 @@ use maud::{html, Markup};
use reqwest::blocking::get;
use scraper::{Html, Selector};
use std::cmp::Reverse;
use std::env;
use std::error::Error;
use std::fs;
use std::fs::write;
@ -22,7 +23,7 @@ use rayon::prelude::*;
fn fetch_feed(url: &str) -> Result<Vec<Entry>, Box<dyn Error>> {
let content = get(url)?.text()?;
let feed = parser::parse(content.as_bytes())?;
println!("Feed {} returned {} items", url, feed.entries.len());
println!("\tFeed {} returned {} items", url, feed.entries.len());
Ok(feed.entries)
}
@ -259,7 +260,17 @@ fn group_by_nth<T: Clone>(slice: &[T], n: usize) -> Vec<Vec<T>> {
.collect()
}
fn generate_index(entries: Vec<Entry>) -> Markup {
fn generate_index(mut entries: Vec<Entry>) -> Markup {
let running_in_gitlab = env::var("CI").map(|val| val == "true").unwrap_or(false);
if running_in_gitlab {
println!("Building for deployment");
entries.truncate(30);
} else {
println!("Building for development");
entries.truncate(10);
}
html! {
(maud::DOCTYPE)
html {
@ -297,6 +308,7 @@ fn main() -> Result<(), Box<dyn Error>> {
let binding = fs::read_to_string("feeds.txt").unwrap();
let feed_urls: Vec<&str> = binding.lines().collect();
println!("Fetching feeds:");
let raw_entries: Vec<Result<Vec<Entry>, String>> = feed_urls
.into_par_iter()
.map(|url| {
@ -304,7 +316,6 @@ fn main() -> Result<(), Box<dyn Error>> {
})
.collect();
// Flatten the entries and filter out the errors
let mut entries: Vec<Entry> = Vec::new();
for entry in raw_entries {
match entry {
@ -312,13 +323,12 @@ fn main() -> Result<(), Box<dyn Error>> {
Err(e) => println!("{}", e),
}
}
// Remove any entries that don't have a timestamp, and then sort by timestamps
entries.retain(|entry| entry.published.is_some() || entry.updated.is_some());
entries
.sort_by_key(|entry| Reverse(entry.published.unwrap_or(entry.updated.unwrap_or_default())));
entries.truncate(30);
let html_string = generate_index(entries).into_string();
let output_path = Path::new("output/index.html");