diff options
Diffstat (limited to 'src/collect_files.rs')
-rw-r--r-- | src/collect_files.rs | 53 |
1 files changed, 32 insertions, 21 deletions
diff --git a/src/collect_files.rs b/src/collect_files.rs index de577cf..4eee1dc 100644 --- a/src/collect_files.rs +++ b/src/collect_files.rs @@ -10,19 +10,20 @@ pub struct Website { pub config: HashMap<String, String>, pub pages: Vec<Page>, pub redirects: Vec<Redirect>, - pub static_files: Vec<StaticItem>, - pub static_dirs: Vec<StaticItem>, + pub static_files: Vec<StaticItem>, // Redirects, !-prefixed-dir contents + pub static_dirs: Vec<StaticItem>, // Only !-prefixed static dirs } pub struct Page { - pub name: String, // Display name of this page - pub name_url: String, // URL name for this page, no extension - pub full_url: String, // Full URL for this page, no extension - pub parents: Vec<String>, // Parent directory components, unsafe - pub parent_url: String, // Base URL for links in this page - pub source_path: PathBuf, // Absolute path to source file - pub document: MarkdownDocument, // File content parsed as markdown - pub headings: Vec<Heading>, // Ordered list of all headings in page + pub name: String, // Display name of this page + pub name_url: String, // URL name for this page, no extension + pub full_url: String, // Full URL for this page, no extension + pub parents: Vec<String>, // Parent directory components, unsafe + pub parent_url: String, // Base URL for links in this page + pub source_path: PathBuf, // Absolute path to source file + pub document: MarkdownDocument, // File content parsed as markdown + pub headings: Vec<Heading>, // Ordered list of all headings in page + pub last_modified: Option<SystemTime>, // last-modified time of source file } pub struct Heading { @@ -32,16 +33,18 @@ pub struct Heading { } pub struct StaticItem { - pub full_url: String, // Safe full URL, with extension - pub source_path: PathBuf, // Absolute path to source file + pub full_url: String, // Safe full URL, with extension + pub source_path: PathBuf, // Absolute path to source file + pub last_modified: Option<SystemTime>, // last-modified time of source file } pub struct Redirect { - pub name: String, // Display name of this redirect - pub full_url: String, // Safe full URL, no extension - pub parents: Vec<String>, // Parent directory components, unsafe - pub parent_url: String, // Base URL for relative redirects - pub redirect: String, // Page to redirect to, as an internal link + pub name: String, // Display name of this redirect + pub full_url: String, // Safe full URL, no extension + pub parents: Vec<String>, // Parent directory components, unsafe + pub parent_url: String, // Base URL for relative redirects + pub redirect: String, // Page to redirect to, as an internal link + pub last_modified: Option<SystemTime>, // last-modified time of source file } pub trait LinkFrom { @@ -110,6 +113,8 @@ impl Website { } } let name_url = make_url_safe(&name); + // Get last-modified time. + let last_modified = entry.last_modified; // Generate parent URL, used only for files. let source_path = entry.original_path.clone(); let relative_path = source_path.strip_prefix(prefix).unwrap_or_else( @@ -128,10 +133,10 @@ impl Website { |_| error!("Path doesn't start with {prefix:?}: {source_path:?}")) .as_os_str().to_string_lossy().to_string(); let full_url = format!("{stripped}/{relative_path}"); - self.static_files.push(StaticItem { full_url, source_path }) + self.static_files.push(StaticItem { full_url, source_path, last_modified }) } let full_url = make_url_safe(stripped); - self.static_dirs.push(StaticItem { full_url, source_path }); + self.static_dirs.push(StaticItem { full_url, source_path, last_modified }); } else { for child in list_directory(entry.original_path).unwrap() { self.collect_entry(&child.original_path, prefix); @@ -191,6 +196,7 @@ impl Website { source_path, document, headings, + last_modified, }); } else { // This is an index file for a directory. @@ -213,6 +219,7 @@ impl Website { source_path, document, headings, + last_modified, }); } } else { @@ -229,6 +236,7 @@ impl Website { parents, parent_url, source_path, document, headings, + last_modified, }); } }, @@ -242,7 +250,10 @@ impl Website { full_url.push_str(&name_url); let redirect = std::fs::read_to_string(&source_path) .unwrap().trim().to_string(); - self.redirects.push(Redirect { name, full_url, parents, parent_url, redirect }); + self.redirects.push(Redirect { + name, full_url, parents, parent_url, + redirect, last_modified, + }); } _ => { let mut parent_url = String::new(); @@ -251,7 +262,7 @@ impl Website { parent_url.push('/'); } let full_url = format!("{parent_url}{name_url}.{extension}"); - self.static_files.push(StaticItem { full_url, source_path }); + self.static_files.push(StaticItem { full_url, source_path, last_modified }); }, } } |