Fix all page
This commit is contained in:
@@ -57,7 +57,7 @@ async fn main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn index_handler(State(state): State<AppState>) -> impl IntoResponse {
|
async fn index_handler(State(state): State<AppState>) -> impl IntoResponse {
|
||||||
match render_template("index.html", &state, Some(50)).await {
|
match render_template("index.html", &state).await {
|
||||||
Ok(html) => Html(html).into_response(),
|
Ok(html) => Html(html).into_response(),
|
||||||
Err(e) => (StatusCode::INTERNAL_SERVER_ERROR, e).into_response(),
|
Err(e) => (StatusCode::INTERNAL_SERVER_ERROR, e).into_response(),
|
||||||
}
|
}
|
||||||
@@ -67,7 +67,7 @@ async fn all_handler(State(state): State<AppState>, Path(page): Path<String>) ->
|
|||||||
if page.contains("..") {
|
if page.contains("..") {
|
||||||
return (StatusCode::NOT_FOUND, "Invalid path").into_response();
|
return (StatusCode::NOT_FOUND, "Invalid path").into_response();
|
||||||
}
|
}
|
||||||
match render_template(&format!("page_{}.html", page), &state, None).await {
|
match render_template(&format!("page_{}.html", page), &state).await {
|
||||||
Ok(html) => Html(html).into_response(),
|
Ok(html) => Html(html).into_response(),
|
||||||
Err(e) => (StatusCode::INTERNAL_SERVER_ERROR, e).into_response(),
|
Err(e) => (StatusCode::INTERNAL_SERVER_ERROR, e).into_response(),
|
||||||
}
|
}
|
||||||
@@ -97,14 +97,13 @@ async fn post_handler(
|
|||||||
async fn render_template(
|
async fn render_template(
|
||||||
template_name: &str,
|
template_name: &str,
|
||||||
state: &AppState,
|
state: &AppState,
|
||||||
limit: Option<usize>,
|
|
||||||
) -> Result<String, String> {
|
) -> Result<String, String> {
|
||||||
let template_path = format!("templates/{}", template_name);
|
let template_path = format!("templates/{}", template_name);
|
||||||
let template_content = std::fs::read_to_string(&template_path)
|
let template_content = std::fs::read_to_string(&template_path)
|
||||||
.map_err(|e| format!("Failed to read template: {}", e))?;
|
.map_err(|e| format!("Failed to read template: {}", e))?;
|
||||||
|
|
||||||
let manager = state.post_manager.read().await;
|
let manager = state.post_manager.read().await;
|
||||||
template_engine::render_template(&template_content, &*manager, None, limit)
|
template_engine::render_template(&template_content, &*manager, None)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn render_post_template(state: &AppState, post_name: String) -> Result<String, String> {
|
async fn render_post_template(state: &AppState, post_name: String) -> Result<String, String> {
|
||||||
@@ -112,5 +111,5 @@ async fn render_post_template(state: &AppState, post_name: String) -> Result<Str
|
|||||||
.map_err(|e| format!("Failed to read post template: {}", e))?;
|
.map_err(|e| format!("Failed to read post template: {}", e))?;
|
||||||
|
|
||||||
let manager = state.post_manager.read().await;
|
let manager = state.post_manager.read().await;
|
||||||
template_engine::render_template(&template_content, &*manager, Some(&post_name), None)
|
template_engine::render_template(&template_content, &*manager, Some(&post_name))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,6 +137,9 @@ impl PostManager {
|
|||||||
fn refresh_posts(&mut self) -> Result<(), String> {
|
fn refresh_posts(&mut self) -> Result<(), String> {
|
||||||
self.posts.clear();
|
self.posts.clear();
|
||||||
|
|
||||||
|
// Get timestamps from git history
|
||||||
|
let git_timestamps = self.get_post_timestamps()?;
|
||||||
|
|
||||||
let entries = fs::read_dir(&self.posts_dir)
|
let entries = fs::read_dir(&self.posts_dir)
|
||||||
.map_err(|e| format!("Failed to read posts directory: {}", e))?;
|
.map_err(|e| format!("Failed to read posts directory: {}", e))?;
|
||||||
|
|
||||||
@@ -162,14 +165,19 @@ impl PostManager {
|
|||||||
|
|
||||||
let html_content = markdown_to_html(&markdown_content);
|
let html_content = markdown_to_html(&markdown_content);
|
||||||
|
|
||||||
// Mock creation date for now
|
// Use git timestamp if available, otherwise fall back to file metadata
|
||||||
let metadata = fs::metadata(&path)
|
let created_at = git_timestamps
|
||||||
.map_err(|e| format!("Failed to read file metadata: {}", e))?;
|
.get(&name)
|
||||||
let created_at = metadata
|
.copied()
|
||||||
|
.or_else(|| {
|
||||||
|
let metadata = fs::metadata(&path).ok()?;
|
||||||
|
metadata
|
||||||
.created()
|
.created()
|
||||||
.or_else(|_| metadata.modified())
|
.or_else(|_| metadata.modified())
|
||||||
|
.ok()
|
||||||
.map(|t| DateTime::<Utc>::from(t))
|
.map(|t| DateTime::<Utc>::from(t))
|
||||||
.unwrap_or_else(|_| Utc::now());
|
})
|
||||||
|
.unwrap_or_else(|| Utc::now());
|
||||||
|
|
||||||
let post = Post {
|
let post = Post {
|
||||||
name: name.clone(),
|
name: name.clone(),
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ pub fn render_template(
|
|||||||
template: &str,
|
template: &str,
|
||||||
post_manager: &PostManager,
|
post_manager: &PostManager,
|
||||||
current_post: Option<&str>,
|
current_post: Option<&str>,
|
||||||
limit_override: Option<usize>,
|
|
||||||
) -> Result<String, String> {
|
) -> Result<String, String> {
|
||||||
let mut result = template.to_string();
|
let mut result = template.to_string();
|
||||||
|
|
||||||
@@ -19,7 +18,7 @@ pub fn render_template(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Process post-list tag
|
// Process post-list tag
|
||||||
result = process_post_list(&result, post_manager, limit_override)?;
|
result = process_post_list(&result, post_manager)?;
|
||||||
|
|
||||||
Ok(result)
|
Ok(result)
|
||||||
}
|
}
|
||||||
@@ -75,7 +74,6 @@ fn process_post_html(
|
|||||||
fn process_post_list(
|
fn process_post_list(
|
||||||
template: &str,
|
template: &str,
|
||||||
post_manager: &PostManager,
|
post_manager: &PostManager,
|
||||||
limit_override: Option<usize>,
|
|
||||||
) -> Result<String, String> {
|
) -> Result<String, String> {
|
||||||
let post_list_regex = Regex::new(r#"\$<post-list(?:\s+limit=(\d+))?\s*/>"#).unwrap();
|
let post_list_regex = Regex::new(r#"\$<post-list(?:\s+limit=(\d+))?\s*/>"#).unwrap();
|
||||||
|
|
||||||
@@ -85,7 +83,7 @@ fn process_post_list(
|
|||||||
let full_match = cap.get(0).unwrap().as_str();
|
let full_match = cap.get(0).unwrap().as_str();
|
||||||
let limit_attr = cap.get(1).and_then(|m| m.as_str().parse::<usize>().ok());
|
let limit_attr = cap.get(1).and_then(|m| m.as_str().parse::<usize>().ok());
|
||||||
|
|
||||||
let limit = limit_override.or(limit_attr);
|
let limit = limit_attr;
|
||||||
|
|
||||||
let posts = if let Some(l) = limit {
|
let posts = if let Some(l) = limit {
|
||||||
post_manager.get_posts_limited(l)
|
post_manager.get_posts_limited(l)
|
||||||
|
|||||||
@@ -18,6 +18,11 @@
|
|||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
nav span {
|
||||||
|
font-size: 1.2em;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
nav a {
|
nav a {
|
||||||
margin-right: 20px;
|
margin-right: 20px;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
@@ -73,6 +78,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<nav>
|
<nav>
|
||||||
|
<span>(dis)gus' things</span>
|
||||||
<a href="/">Home</a>
|
<a href="/">Home</a>
|
||||||
<a href="/all">All Posts</a>
|
<a href="/all">All Posts</a>
|
||||||
</nav>
|
</nav>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
$<include src="header.html"/>
|
$<include src="header.html"/>
|
||||||
<h1>Recent Posts</h1>
|
<h1>Recent Posts</h1>
|
||||||
$<post-list limit=50/>
|
$<post-list limit=2/>
|
||||||
$<include src="footer.html"/>
|
$<include src="footer.html"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user