summaryrefslogtreecommitdiff
path: root/src/page.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/page.rs')
-rw-r--r--src/page.rs68
1 files changed, 23 insertions, 45 deletions
diff --git a/src/page.rs b/src/page.rs
index 41a8584..d3bc8e7 100644
--- a/src/page.rs
+++ b/src/page.rs
@@ -1,8 +1,9 @@
use crate::error::SiteError;
use crate::html::{parse, Content, Element, ElementTag, HtmlPage};
+use crate::name::Name;
use crate::parser::WikitextParser;
use crate::site::Site;
-use crate::util::{get_mtime, join_subpath, make_path_relative_to};
+use crate::util::get_mtime;
use crate::wikitext::Snippet;
use log::{info, trace};
use std::path::{Path, PathBuf};
@@ -19,21 +20,16 @@ impl WikitextPage {
Self { meta, wikitext }
}
- pub fn read(srcdir: &Path, filename: &Path) -> Result<Self, SiteError> {
- info!("input file: {}", filename.display());
- let relative = make_path_relative_to(srcdir, filename).with_extension("");
- let absolute = Path::new("/").join(&relative);
- let name = relative
- .file_name()
- .unwrap_or_else(|| panic!("get filename from {}", relative.display()))
- .to_string_lossy()
- .to_string();
- let data = std::fs::read(filename).map_err(|e| SiteError::FileRead(filename.into(), e))?;
- let wikitext = String::from_utf8(data).map_err(|e| SiteError::Utf8(filename.into(), e))?;
- let mtime = get_mtime(filename)?;
+ pub fn read(name: &Name) -> Result<Self, SiteError> {
+ info!("input file: {}", name);
+
+ let src = name.source_path();
+ let data = std::fs::read(&src).map_err(|e| SiteError::FileRead(src.into(), e))?;
+ let wikitext = String::from_utf8(data).map_err(|e| SiteError::Utf8(src.into(), e))?;
+ let mtime = get_mtime(src)?;
+
let meta = MetaBuilder::default()
- .name(name)
- .path(absolute)
+ .name(name.clone())
.mtime(mtime)
.build();
Ok(Self::new(meta, wikitext))
@@ -125,35 +121,24 @@ impl MarkdownPage {
#[derive(Debug, Clone, Eq, PartialEq)]
pub struct PageMeta {
- name: String,
+ name: Name,
title: Option<String>,
- path: PathBuf,
mtime: SystemTime,
}
impl PageMeta {
- fn new(name: String, title: Option<String>, path: PathBuf, mtime: SystemTime) -> Self {
+ fn new(name: Name, title: Option<String>, mtime: SystemTime) -> Self {
trace!(
- "PageMeta: name={:?} title={:?} path={:?} mtime={:?}",
+ "PageMeta: name={:?} title={:?} mtime={:?}",
name,
title,
- path,
mtime,
);
- Self {
- name,
- title,
- path,
- mtime,
- }
+ Self { name, title, mtime }
}
- pub fn destination_filename(&self, destdir: &Path) -> PathBuf {
- join_subpath(destdir, &self.path).with_extension("html")
- }
-
- pub fn name(&self) -> &str {
- &self.name
+ pub fn destination_filename(&self) -> PathBuf {
+ self.name.destination_path().into()
}
pub fn set_title(&mut self, title: String) {
@@ -165,12 +150,12 @@ impl PageMeta {
if let Some(title) = &self.title {
title
} else {
- &self.name
+ self.name.page_name()
}
}
pub fn path(&self) -> &Path {
- &self.path
+ self.name.page_path()
}
pub fn mtime(&self) -> SystemTime {
@@ -180,24 +165,22 @@ impl PageMeta {
#[derive(Debug, Default)]
pub struct MetaBuilder {
- name: String,
+ name: Option<Name>,
title: Option<String>,
- path: Option<PathBuf>,
mtime: Option<SystemTime>,
}
impl MetaBuilder {
pub fn build(self) -> PageMeta {
PageMeta::new(
- self.name,
+ self.name.expect("name set on MetaBuilder"),
self.title,
- self.path.expect("path set on MetaBuilder"),
self.mtime.expect("mtime set on MetaBuilder"),
)
}
- pub fn name(mut self, name: String) -> Self {
- self.name = name;
+ pub fn name(mut self, name: Name) -> Self {
+ self.name = Some(name);
self
}
@@ -206,11 +189,6 @@ impl MetaBuilder {
self
}
- pub fn path(mut self, path: PathBuf) -> Self {
- self.path = Some(path);
- self
- }
-
pub fn mtime(mut self, mtime: SystemTime) -> Self {
self.mtime = Some(mtime);
self