add series and author links to books

This commit is contained in:
Sebastian Hugentobler 2024-05-06 20:54:58 +02:00
parent ab937d0201
commit 47e8c74419
Signed by: shu
GPG Key ID: BB32CF3CA052C2F0
4 changed files with 21 additions and 9 deletions

View File

@ -6,7 +6,7 @@ use super::{
pagination::{Pagination, SortOrder},
};
#[derive(Debug, Serialize)]
#[derive(Debug, Clone, Serialize)]
pub struct Author {
pub id: u64,
pub name: String,

View File

@ -1,6 +1,8 @@
use std::{collections::HashMap, path::Path};
use calibre_db::data::{book::Book as DbBook, series::Series as DbSeries};
use calibre_db::data::{
author::Author as DbAuthor, book::Book as DbBook, series::Series as DbSeries,
};
use serde::Serialize;
use crate::app_state::AppState;
@ -11,8 +13,8 @@ pub struct Book {
pub title: String,
pub sort: String,
pub path: String,
pub author: String,
pub series: Option<(String, f64)>,
pub author: DbAuthor,
pub series: Option<(DbSeries, f64)>,
pub formats: HashMap<String, String>,
}
@ -20,7 +22,7 @@ impl Book {
pub fn from_db_book(
db_book: &DbBook,
db_series: Option<(DbSeries, f64)>,
author: &str,
author: DbAuthor,
formats: HashMap<String, String>,
) -> Self {
Self {
@ -28,8 +30,8 @@ impl Book {
title: db_book.title.clone(),
sort: db_book.sort.clone(),
path: db_book.path.clone(),
author: author.to_string(),
series: db_series.map(|x| (x.0.name, x.1)),
author: author.clone(),
series: db_series.map(|x| (x.0, x.1)),
formats,
}
}
@ -58,6 +60,6 @@ impl Book {
let formats = Book::formats(book, &state.config.library_path);
let author = state.calibre.book_author(book.id).ok()?;
let series = state.calibre.book_series(book.id).ok()?;
Some(Book::from_db_book(book, series, &author.name, formats))
Some(Book::from_db_book(book, series, author, formats))
}
}

View File

@ -37,4 +37,5 @@ nav ul li {
.grid-item {
text-align: center;
height: 6rem;
}

View File

@ -2,7 +2,16 @@
<header class="grid-item">
<hgroup>
<h5>{{ book.title }}</h5>
<p>{{ book.author }}</p>
<p>
<a class="secondary" href="/authors/{{ book.author.id }}">{{ book.author.name }}</a>
</p>
{% if book.series %}
<p>
<small>
<a class="secondary" href="/series/{{ book.series.0.id }}">{{ book.series.0.name }} ({{ book.series.1 }})</a>
</small>
</p>
{% endif %}
</hgroup>
</header>
<img class="cover" src="/cover/{{ book.id }}" alt="book cover">