better handling of book details, use custom columns

This commit is contained in:
Meutel 2014-09-03 19:40:12 +02:00
parent c5fe707e34
commit e811b461af
4 changed files with 50 additions and 15 deletions

View File

@ -42,6 +42,7 @@ var db = new sqlite3.Database(dbPath);
app.use(function(req, res, next) { app.use(function(req, res, next) {
req.db = db; req.db = db;
req.locals = app.locals;
next(); next();
}); });

View File

@ -1,5 +1,16 @@
{ {
"calibre_path": "./public/calibre", "calibre_path": "./public/calibre",
"calibre_db_path": "./public/calibre/metadata.db", "calibre_db_path": "./public/calibre/metadata.db",
"trust proxy": true "trust proxy": true,
"book_details_custom": [
{
"name": "a_lire",
"query": "SELECT custom_columns.name AS label, custom_column_2.value AS value FROM custom_column_2 LEFT OUTER JOIN custom_columns ON custom_columns.id = 2 WHERE custom_column_2.book = ?",
"type": "bool"
}, {
"name": "phy",
"query": "SELECT custom_columns.name AS label, custom_column_3.value AS value FROM custom_column_3 LEFT OUTER JOIN custom_columns ON custom_columns.id = 3 WHERE custom_column_3.book = ?",
"type": "bool"
}
]
} }

View File

@ -151,7 +151,8 @@ router.post('/', function(req,res) {
/* Single book */ /* Single book */
router.get('/:id', function(req, res) { router.get('/:id', function(req, res) {
var book, authors, tags, details; var book, authors, tags, details;
var queries = 4; var queries = 3;
if (req.locals.book_details_custom) queries+=req.locals.book_details_custom.length;
var callback = function() { var callback = function() {
if (queries == 0) { if (queries == 0) {
book.authors = authors; book.authors = authors;
@ -170,12 +171,14 @@ router.get('/:id', function(req, res) {
// book // book
req.db.get('SELECT books.id AS id,title,timestamp,pubdate,series_index,isbn,lccn,path,uuid,has_cover,' + req.db.get('SELECT books.id AS id,title,timestamp,pubdate,series_index,isbn,lccn,path,uuid,has_cover,' +
'languages.lang_code,format,uncompressed_size,data.name AS data_name,series.name AS series_name,' + 'languages.lang_code,format,uncompressed_size,data.name AS data_name,series.name AS series_name,' +
'series.id AS series_id FROM books ' + 'series.id AS series_id, publishers.name AS pubname FROM books ' +
' LEFT OUTER JOIN books_languages_link ON books_languages_link.book = books.id ' + ' LEFT OUTER JOIN books_languages_link ON books_languages_link.book = books.id ' +
' LEFT OUTER JOIN languages ON languages.id = books_languages_link.lang_code ' + ' LEFT OUTER JOIN languages ON languages.id = books_languages_link.lang_code ' +
' LEFT OUTER JOIN data ON data.book = books.id ' + ' LEFT OUTER JOIN data ON data.book = books.id ' +
' LEFT OUTER JOIN books_series_link ON books.id = books_series_link.book ' + ' LEFT OUTER JOIN books_series_link ON books.id = books_series_link.book ' +
' LEFT OUTER JOIN series ON series.id = books_series_link.series ' + ' LEFT OUTER JOIN series ON series.id = books_series_link.series ' +
' LEFT OUTER JOIN books_publishers_link ON books.id = books_publishers_link.book ' +
' LEFT OUTER JOIN publishers ON publishers.id = books_publishers_link.publisher ' +
' WHERE books.id = ?', req.params.id, ' WHERE books.id = ?', req.params.id,
function(err, row) { function(err, row) {
if (err) console.log('ERR book: '+err); if (err) console.log('ERR book: '+err);
@ -210,16 +213,22 @@ router.get('/:id', function(req, res) {
); );
// details // details
custom = new Array(); custom = new Array();
req.db.each('SELECT publishers.name as pubname FROM publishers, books_publishers_link WHERE books_publishers_link.publisher = publishers.id AND books_publishers_link.book = ?', req.params.id, if (req.locals.book_details_custom) {
function(err, publisher) { _.each(req.locals.book_details_custom, function(detail) {
custom.push({name:'pubname',value:publisher.pubname}); req.db.each(detail.query, req.params.id,
}, function(err, row) {
function(err) { row.name = detail.name;
if (err) console.log('ERR tags: '+err); row.type = detail.type;
queries--; custom.push(row);
callback(); },
} function(err) {
); if (err) console.log('ERR tags: '+err);
queries--;
callback();
}
);
});
}
}); });

View File

@ -48,11 +48,25 @@ block content
li li
strong #{t('bouquins.book.detail.pubdate')} strong #{t('bouquins.book.detail.pubdate')}
| #{new Date(pubdate).getMonth()}-#{new Date(pubdate).getFullYear()} | #{new Date(pubdate).getMonth()}-#{new Date(pubdate).getFullYear()}
if pubname
li
strong #{t('bouquins.book.detail.pubname')}
| #{pubname}
if custom if custom
each item in custom each item in custom
li li
strong #{t('bouquins.book.detail.'+item.name)} if item.label
| #{item.value} strong #{item.label}
else
strong #{t('bouquins.book.detail.'+item.name)}
case item.type
when "bool"
if item.value == 1
span.glyphicon.glyphicon-ok
else
span.glyphicon.glyphicon-remove
default
| #{item.value}
div.col-md-7 div.col-md-7
if has_cover == 1 if has_cover == 1
img.img-rounded.img-responsive(src='/calibre/'+path+'/cover.jpg',alt=t('bouquins.book.nocover')) img.img-rounded.img-responsive(src='/calibre/'+path+'/cover.jpg',alt=t('bouquins.book.nocover'))