const RootPage = require('./RootPage'); const AuthorPage = require('./AuthorPage'); const SeriesPage = require('./SeriesPage'); const TitlePage = require('./TitlePage'); const GenrePage = require('./GenrePage'); const BookPage = require('./BookPage'); const OpensearchPage = require('./OpensearchPage'); module.exports = function(app, config) { const opdsRoot = '/opds'; config.opdsRoot = opdsRoot; const root = new RootPage(config); const author = new AuthorPage(config); const series = new SeriesPage(config); const title = new TitlePage(config); const genre = new GenrePage(config); const book = new BookPage(config); const opensearch = new OpensearchPage(config); const routes = [ ['', root], ['/root', root], ['/author', author], ['/series', series], ['/title', title], ['/genre', genre], ['/book', book], ['/opensearch', opensearch], ]; const pages = new Map(); for (const r of routes) { pages.set(`${opdsRoot}${r[0]}`, r[1]); } const opds = async(req, res, next) => { try { const page = pages.get(req.path); if (page) { res.set('Content-Type', 'application/atom+xml; charset=utf-8'); const result = await page.body(req, res); if (result !== false) res.send(result); } else { next(); } } catch (e) { res.status(500).send({error: e.message}); if (config.branch == 'development') { console.error({error: e.message, url: req.originalUrl}); } } }; app.get([opdsRoot, `${opdsRoot}/*`], opds); };