pinakes-server: relativize media paths against configured root directories

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: I9f113e6402030c46ad97f636985b5d6c6a6a6964
This commit is contained in:
raf 2026-03-11 17:07:17 +03:00
commit 9c67c81a79
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
11 changed files with 212 additions and 42 deletions

View file

@ -194,8 +194,9 @@ pub async fn list_books(
)
.await?;
let roots = state.config.read().await.directories.roots.clone();
let response: Vec<MediaResponse> =
items.into_iter().map(MediaResponse::from).collect();
items.into_iter().map(|item| MediaResponse::new(item, &roots)).collect();
Ok(Json(response))
}
@ -223,8 +224,9 @@ pub async fn get_series_books(
Path(series_name): Path<String>,
) -> Result<impl IntoResponse, ApiError> {
let items = state.storage.get_series_books(&series_name).await?;
let roots = state.config.read().await.directories.roots.clone();
let response: Vec<MediaResponse> =
items.into_iter().map(MediaResponse::from).collect();
items.into_iter().map(|item| MediaResponse::new(item, &roots)).collect();
Ok(Json(response))
}
@ -258,8 +260,9 @@ pub async fn get_author_books(
.search_books(None, Some(&author_name), None, None, None, &pagination)
.await?;
let roots = state.config.read().await.directories.roots.clone();
let response: Vec<MediaResponse> =
items.into_iter().map(MediaResponse::from).collect();
items.into_iter().map(|item| MediaResponse::new(item, &roots)).collect();
Ok(Json(response))
}
@ -317,8 +320,9 @@ pub async fn get_reading_list(
.get_reading_list(user_id.0, params.status)
.await?;
let roots = state.config.read().await.directories.roots.clone();
let response: Vec<MediaResponse> =
items.into_iter().map(MediaResponse::from).collect();
items.into_iter().map(|item| MediaResponse::new(item, &roots)).collect();
Ok(Json(response))
}