From e2d01f7eb9e4af2cb6a75c07abb810aae1e1bad3 Mon Sep 17 00:00:00 2001 From: Alex Ling Date: Tue, 3 Mar 2020 02:33:32 +0000 Subject: [PATCH] Remove error handling in the `parse_query_result` method of MangaDex::Job, and pass the possible exceptions to the frontend and handle them there. --- public/js/download-manager.js | 4 ++++ src/mangadex/downloader.cr | 35 +++++++++++++++-------------------- src/routes/api.cr | 18 +++++++++++++----- 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/public/js/download-manager.js b/public/js/download-manager.js index 7488ee0..d302aa5 100644 --- a/public/js/download-manager.js +++ b/public/js/download-manager.js @@ -91,6 +91,10 @@ const load = () => { dataType: 'json' }) .done(data => { + if (!data.success && data.error) { + alert('danger', `Failed to fetch download queue. Error: ${data.error}`); + return; + } console.log(data); const btnText = data.paused ? "Resume download" : "Pause download"; $('#pause-resume-btn').text(btnText); diff --git a/src/mangadex/downloader.cr b/src/mangadex/downloader.cr index a061ed2..d773c23 100644 --- a/src/mangadex/downloader.cr +++ b/src/mangadex/downloader.cr @@ -33,30 +33,25 @@ module MangaDex property time : Time def parse_query_result(res : DB::ResultSet) - begin - @id = res.read String - @manga_id = res.read String - @title = res.read String - @manga_title = res.read String - status = res.read Int32 - @status_message = res.read String - @pages = res.read Int32 - @success_count = res.read Int32 - @fail_count = res.read Int32 - time = res.read Int64 - @status = JobStatus.new status - @time = Time.unix_ms time - return true - rescue e - puts e - return false - end + @id = res.read String + @manga_id = res.read String + @title = res.read String + @manga_title = res.read String + status = res.read Int32 + @status_message = res.read String + @pages = res.read Int32 + @success_count = res.read Int32 + @fail_count = res.read Int32 + time = res.read Int64 + @status = JobStatus.new status + @time = Time.unix_ms time end + # Raises if the result set does not contain the correct set of columns def self.from_query_result(res : DB::ResultSet) job = Job.allocate - success = job.parse_query_result res - return success ? job : nil + job.parse_query_result res + return job end def initialize(@id, @manga_id, @title, @manga_title, @status, @time) diff --git a/src/routes/api.cr b/src/routes/api.cr index 1b9cf9e..5b78ba8 100644 --- a/src/routes/api.cr +++ b/src/routes/api.cr @@ -128,11 +128,19 @@ class APIRouter < Router end get "/api/admin/mangadex/queue" do |env| - jobs = @context.queue.get_all - send_json env, { - "jobs" => jobs, - "paused" => @context.queue.paused? - }.to_json + begin + jobs = @context.queue.get_all + send_json env, { + "jobs" => jobs, + "paused" => @context.queue.paused?, + "success" => true + }.to_json + rescue e + send_json env, { + "success" => false, + "error" => e.message + }.to_json + end end post "/api/admin/mangadex/queue/delete/:id" do |env|