From 8a0e9250c8a63408e8fa8dbc5ce99817219d052d Mon Sep 17 00:00:00 2001 From: Alex Ling Date: Mon, 1 Jun 2020 13:22:04 +0000 Subject: [PATCH] Finish OPDS --- src/routes/opds.cr | 32 ++++++++++++++++++++++++++++++++ src/server.cr | 1 + src/views/opds/index.ecr | 24 ++++++++++++++++++++++++ src/views/opds/title.ecr | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 src/routes/opds.cr create mode 100644 src/views/opds/index.ecr create mode 100644 src/views/opds/title.ecr diff --git a/src/routes/opds.cr b/src/routes/opds.cr new file mode 100644 index 0000000..648bcac --- /dev/null +++ b/src/routes/opds.cr @@ -0,0 +1,32 @@ +require "./router" + +class OPDSRouter < Router + def initialize + get "/opds" do |env| + titles = @context.library.titles + render_xml "src/views/opds/index.ecr" + end + + get "/opds/book/:title_id" do |env| + begin + title = @context.library.get_title(env.params.url["title_id"]).not_nil! + render_xml "src/views/opds/title.ecr" + rescue e + @context.error e + env.response.status_code = 404 + end + end + + get "/opds/download/:title/:entry" do |env| + begin + title = (@context.library.get_title env.params.url["title"]).not_nil! + entry = (title.get_entry env.params.url["entry"]).not_nil! + + send_attachment env, entry.zip_path + rescue e + @context.error e + env.response.status_code = 404 + end + end + end +end diff --git a/src/server.cr b/src/server.cr index 8412d0e..f12d470 100644 --- a/src/server.cr +++ b/src/server.cr @@ -53,6 +53,7 @@ class Server AdminRouter.new ReaderRouter.new APIRouter.new + OPDSRouter.new Kemal.config.logging = false add_handler LogHandler.new diff --git a/src/views/opds/index.ecr b/src/views/opds/index.ecr new file mode 100644 index 0000000..3bcf68f --- /dev/null +++ b/src/views/opds/index.ecr @@ -0,0 +1,24 @@ + + + + + urn:mango:index + + + + + Library + + + Mango + https://github.com/hkalexling/Mango + + + <% titles.each do |t| %> + + <%= t.display_name %> + urn:mango:<%= t.id %> + + + <% end %> + diff --git a/src/views/opds/title.ecr b/src/views/opds/title.ecr new file mode 100644 index 0000000..bd4567c --- /dev/null +++ b/src/views/opds/title.ecr @@ -0,0 +1,38 @@ + + + urn:mango:<%= title.id %> + + + + + <%= title.display_name %> + + + Mango + https://github.com/hkalexling/Mango + + + <% title.titles.each do |t| %> + + <%= t.display_name %> + urn:mango:<%= t.id %> + + + <% end %> + + <% title.entries.each do |e| %> + + <%= e.display_name %> + urn:mango:<%= e.id %> + + + + + + + + + + <% end %> + +