2
0
This commit is contained in:
2026-03-22 09:50:41 +09:00
parent 53db6871d8
commit ddbb60cd48

View File

@@ -2,6 +2,7 @@ use anyhow::Result;
use std::collections::HashMap;
use std::fs;
use std::path::Path;
use serde_json;
/// Rebuild index.json files for all collections in content directory
pub fn run(content_dir: &Path) -> Result<()> {
@@ -46,7 +47,7 @@ pub fn run(content_dir: &Path) -> Result<()> {
// Collect all rkeys from .json files (excluding special files)
let mut rkeys: Vec<String> = Vec::new();
let mut rkey_times: HashMap<String, std::time::SystemTime> = HashMap::new();
let mut rkey_dates: HashMap<String, String> = HashMap::new();
for file_entry in fs::read_dir(&col_path)? {
let file_entry = file_entry?;
@@ -71,10 +72,15 @@ pub fn run(content_dir: &Path) -> Result<()> {
// Extract rkey from filename
let rkey = filename.trim_end_matches(".json").to_string();
// Get file modification time for sorting
if let Ok(metadata) = file_entry.metadata() {
if let Ok(modified) = metadata.modified() {
rkey_times.insert(rkey.clone(), modified);
// Read publishedAt from JSON for chronological sorting
if let Ok(content) = fs::read_to_string(&file_path) {
if let Ok(json) = serde_json::from_str::<serde_json::Value>(&content) {
if let Some(date) = json.pointer("/value/publishedAt")
.or_else(|| json.get("publishedAt"))
.and_then(|v| v.as_str())
{
rkey_dates.insert(rkey.clone(), date.to_string());
}
}
}
@@ -85,11 +91,13 @@ pub fn run(content_dir: &Path) -> Result<()> {
continue;
}
// Sort by modification time (oldest first) or alphabetically
// Sort by publishedAt (oldest first), fallback to rkey string comparison
rkeys.sort_by(|a, b| {
match (rkey_times.get(a), rkey_times.get(b)) {
(Some(ta), Some(tb)) => ta.cmp(tb),
_ => a.cmp(b),
match (rkey_dates.get(a), rkey_dates.get(b)) {
(Some(da), Some(db)) => da.cmp(db),
(Some(_), None) => std::cmp::Ordering::Less,
(None, Some(_)) => std::cmp::Ordering::Greater,
(None, None) => a.cmp(b),
}
});