summary refs log tree commit diff
path: root/src/data
diff options
context:
space:
mode:
Diffstat (limited to 'src/data')
-rw-r--r--src/data/config.rs1
-rw-r--r--src/data/content.rs25
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()?);