diff options
Diffstat (limited to 'src/data')
-rw-r--r-- | src/data/config.rs | 1 | ||||
-rw-r--r-- | src/data/content.rs | 25 |
2 files changed, 16 insertions, 10 deletions
diff --git a/src/data/config.rs b/src/data/config.rs index bce5c94..9a17077 100644 --- a/src/data/config.rs +++ b/src/data/config.rs @@ -20,6 +20,7 @@ pub struct Config { footer_copyright: Option<String> } +#[cfg(feature = "ssr")] impl Config { pub fn read_from_file<P: AsRef<Path>>(path: P) -> Result<Self, String> { let config_contents = fs::read_to_string(&path) diff --git a/src/data/content.rs b/src/data/content.rs index a628be0..4a39967 100644 --- a/src/data/content.rs +++ b/src/data/content.rs @@ -1,24 +1,31 @@ +#[cfg(feature="ssr")] use std::fs::File; use std::collections::HashMap; +#[cfg(feature="ssr")] use std::io::{BufRead, BufReader}; use std::path::{PathBuf, Path}; use std::sync::Arc; +#[cfg(feature="ssr")] use tokio::sync::RwLock; use chrono::{DateTime, Utc}; use leptos::prelude::StorageAccess; use serde::Deserialize; use uuid::Uuid; +#[cfg(feature="ssr")] use fs2::FileExt; +#[cfg(feature="ssr")] use tokio::runtime; +#[cfg(feature="ssr")] use tokio_stream::wrappers::ReadDirStream; +#[cfg(feature="ssr")] use futures::stream::StreamExt; #[derive(Hash, PartialEq, Eq, Clone)] -struct PageUuid(Uuid); +pub struct PageUuid(Uuid); #[derive(Hash, PartialEq, Eq, Clone)] -struct NamespaceUuid(Uuid); +pub struct NamespaceUuid(Uuid); #[derive(Hash, PartialEq, Eq, Clone)] -struct MediaUuid(Uuid); +pub struct MediaUuid(Uuid); pub struct ContentSnapshot { pub pages: HashMap<PageUuid, Page>, @@ -58,6 +65,7 @@ struct Media { used_on: Vec<PageUuid>, } +#[cfg(feature="ssr")] #[derive(Clone)] pub struct ContentController { snapshot: Arc<RwLock<Box<Arc<ContentSnapshot>>>>, @@ -66,7 +74,7 @@ pub struct ContentController { #[cfg(feature = "ssr")] impl ContentController { - pub fn init(data_dir: PathBuf) -> Result<Self, String> { + pub async fn init(data_dir: PathBuf) -> Result<Self, String> { let lock_path = Path::join(&data_dir, ".lock"); let lockfile = std::fs::OpenOptions::new() .read(true).write(true).create(true) @@ -76,12 +84,8 @@ impl ContentController { lockfile.try_lock_exclusive() .map_err(|_| "Could not lock data directory".to_string())?; - let runtime = runtime::Builder::new_multi_thread() - .build() - .map_err(|_| "Could not start async runtime".to_string())?; - // Read the things - let snapshot = runtime.block_on(Self::read_data(&data_dir))?; + let snapshot = Self::read_data(&data_dir).await?; Ok(Self { lock: Arc::new(lockfile), @@ -153,7 +157,7 @@ impl ContentController { }) .unzip(); - let pages_dir = Path::join(&data_dir, "pages/id"); + let pages_dir = Path::join(&data_dir, "pages"); let pages = fs::read_dir(&pages_dir).await .map_err(|_| "Could not open pages data directory".to_string()) .map(|dir_entries| { ReadDirStream::new(dir_entries) })? @@ -205,6 +209,7 @@ impl ContentController { const METADATA_DIVIDER : &'static str = "<!-- trans rights ~ath&+ -->"; +#[cfg(feature = "ssr")] impl Page { async fn init_from_file(path: &PathBuf, pagedata_cache: &HashMap::<PageUuid, (String, NamespaceUuid)>) -> Option<Self> { let mut reader = BufReader::new(File::open(path).ok()?); |