Files
Mango/src/routes/reader.cr
2021-03-05 17:02:45 +00:00

61 lines
1.7 KiB
Crystal

struct ReaderRouter
def initialize
get "/reader/:title/:entry" do |env|
begin
username = get_username env
title = (Library.default.get_title env.params.url["title"]).not_nil!
entry = (title.get_entry env.params.url["entry"]).not_nil!
next layout "reader-error" if entry.err_msg
# load progress
page_idx = [1, entry.load_progress username].max
# start from page 1 if the user has finished reading the entry
page_idx = 1 if entry.finished? username
redirect env, "/reader/#{title.id}/#{entry.id}/#{page_idx}"
rescue e
Logger.error e
env.response.status_code = 404
end
end
get "/reader/:title/:entry/:page" do |env|
begin
base_url = Config.current.base_url
username = get_username env
title = (Library.default.get_title env.params.url["title"]).not_nil!
entry = (title.get_entry env.params.url["entry"]).not_nil!
sort_opt = SortOptions.from_info_json title.dir, username
get_sort_opt
entries = title.sorted_entries username, sort_opt
page_idx = env.params.url["page"].to_i
if page_idx > entry.pages || page_idx <= 0
raise "Page #{page_idx} not found."
end
exit_url = "#{base_url}book/#{title.id}"
next_entry_url = entry.next_entry(username).try do |e|
"#{base_url}reader/#{title.id}/#{e.id}"
end
previous_entry_url = entry.previous_entry(username).try do |e|
"#{base_url}reader/#{title.id}/#{e.id}"
end
render "src/views/reader.html.ecr"
rescue e
Logger.error e
env.response.status_code = 404
end
end
end
end