aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/src/library.rs44
-rw-r--r--server/src/routes/ui/style/directorypage.css1
-rw-r--r--server/src/routes/ui/style/player.css2
3 files changed, 29 insertions, 18 deletions
diff --git a/server/src/library.rs b/server/src/library.rs
index a48e746..ebafa9d 100644
--- a/server/src/library.rs
+++ b/server/src/library.rs
@@ -36,7 +36,9 @@ pub struct Item {
impl Library {
pub fn open(path: &PathBuf) -> anyhow::Result<Self> {
Ok(Self {
- root: Node::from_path(path.clone(), PathBuf::new(), true).context("indexing root")?,
+ root: Node::from_path(path.clone(), PathBuf::new(), true)
+ .context("indexing root")?
+ .ok_or(anyhow!("root need directory.json"))?,
})
}
pub fn nested_path(&self, path: &Path) -> anyhow::Result<Arc<Node>> {
@@ -86,9 +88,12 @@ impl Node {
path: PathBuf,
mut lib_path: PathBuf,
root: bool,
- ) -> anyhow::Result<Arc<Node>> {
+ ) -> anyhow::Result<Option<Arc<Node>>> {
if path.is_dir() {
let mpath = path.join("directory.json");
+ if !mpath.exists() {
+ return Ok(None);
+ }
let data: DirectoryInfo =
serde_json::from_reader(File::open(mpath).context("metadata missing")?)?;
@@ -109,20 +114,23 @@ impl Node {
None
}
})
- .map(|e| {
+ .filter_map(|e| {
Node::from_path(e.clone(), lib_path.clone(), false)
.context(format!("loading {e:?}"))
+ .transpose()
})
.into_iter()
.collect::<anyhow::Result<Vec<_>>>()?;
- Ok(Node::Directory(Arc::new(Directory {
- lib_path,
- children,
- data,
- identifier,
- }))
- .into())
+ Ok(Some(
+ Node::Directory(Arc::new(Directory {
+ lib_path,
+ children,
+ data,
+ identifier,
+ }))
+ .into(),
+ ))
} else if path.is_file() {
info!("loading {path:?}");
let datafile = File::open(path.clone()).context("cant load metadata")?;
@@ -134,13 +142,15 @@ impl Node {
.to_str()
.unwrap()
.to_string();
- Ok(Node::Item(Arc::new(Item {
- fs_path: path.clone(),
- lib_path: lib_path.join(identifier.clone()),
- info: data,
- identifier,
- }))
- .into())
+ Ok(Some(
+ Node::Item(Arc::new(Item {
+ fs_path: path.clone(),
+ lib_path: lib_path.join(identifier.clone()),
+ info: data,
+ identifier,
+ }))
+ .into(),
+ ))
} else {
bail!("did somebody really put a fifo or socket in the library?!")
}
diff --git a/server/src/routes/ui/style/directorypage.css b/server/src/routes/ui/style/directorypage.css
index 8c6d5d9..2773e3c 100644
--- a/server/src/routes/ui/style/directorypage.css
+++ b/server/src/routes/ui/style/directorypage.css
@@ -1,4 +1,3 @@
-
.page.dir {
padding: 1em;
padding-left: 3em;
diff --git a/server/src/routes/ui/style/player.css b/server/src/routes/ui/style/player.css
index b34653e..8d3488f 100644
--- a/server/src/routes/ui/style/player.css
+++ b/server/src/routes/ui/style/player.css
@@ -42,9 +42,11 @@ input[type="radio"] {
width: 1.2em;
height: 1.2em;
border-radius: 8px;
+ padding: 2px;
background-clip: content-box;
border: 2px solid var(--font);
background-color: transparent;
+ transition: background-color 0.3s;
}
input[type="radio"]:checked {
background-color: var(--accent-light);