diff --git a/ptth_handlebars/file_server_dir.html b/ptth_handlebars/file_server_dir.html index cc75253..d95a06b 100644 --- a/ptth_handlebars/file_server_dir.html +++ b/ptth_handlebars/file_server_dir.html @@ -1,10 +1,39 @@ - + + + + + diff --git a/ptth_handlebars/test_file_server_dir.html b/ptth_handlebars/test_file_server_dir.html new file mode 100644 index 0000000..b7dcab5 --- /dev/null +++ b/ptth_handlebars/test_file_server_dir.html @@ -0,0 +1,43 @@ + + + + + +/home/user/stuff + + + +
+ +
+../ +
+ +
+some_dir/ +
+ +
+alice +
+ +
+alice +
+ +
+ + + diff --git a/src/server/file_server.rs b/src/server/file_server.rs index 7c9b9fd..7b4723b 100644 --- a/src/server/file_server.rs +++ b/src/server/file_server.rs @@ -95,8 +95,11 @@ async fn read_dir_entry (entry: DirEntry) -> TemplateDirEntry } } +use std::borrow::Cow; + async fn serve_dir ( handlebars: Arc >, + path: Cow <'_, str>, mut dir: ReadDir ) -> http_serde::Response { @@ -107,11 +110,13 @@ async fn serve_dir ( } #[derive (Serialize)] - struct TemplateDirPage { + struct TemplateDirPage <'a> { + path: Cow <'a, str>, entries: Vec , } let s = handlebars.render ("file_server_dir", &TemplateDirPage { + path, entries, }).unwrap (); @@ -258,7 +263,7 @@ pub async fn serve_all ( full_path.push (&*path); if let Ok (dir) = read_dir (&full_path).await { - serve_dir (handlebars, dir).await + serve_dir (handlebars, full_path.to_string_lossy (), dir).await } else if let Ok (file) = File::open (&full_path).await { serve_file (