From eac72fabfa9fdfc4028303ddc6b4ff19f6e7a96c Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 20 May 2024 18:16:54 +0200 Subject: [PATCH] Gemini: improved error handling --- .../main/java/eu/faircode/email/Gemini.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Gemini.java b/app/src/main/java/eu/faircode/email/Gemini.java index d6fef9db91..458c0716bd 100644 --- a/app/src/main/java/eu/faircode/email/Gemini.java +++ b/app/src/main/java/eu/faircode/email/Gemini.java @@ -188,15 +188,27 @@ public class Gemini { int status = connection.getResponseCode(); if (status != HttpURLConnection.HTTP_OK) { String error = "Error " + status + ": " + connection.getResponseMessage(); + String detail = null; try { InputStream is = connection.getErrorStream(); if (is != null) - error += "\n" + Helper.readStream(is); + detail = Helper.readStream(is); } catch (Throwable ex) { Log.w(ex); } - Log.w("Gemini error=" + error); - throw new IOException(error); + Log.w("Gemini error=" + error + " detail=" + detail); + if (detail != null) + try { + JSONObject jroot = new JSONObject(detail); + JSONObject jerror = jroot.optJSONObject("error"); + if (jerror != null) { + String msg = jerror.optString("message"); + if (!TextUtils.isEmpty(msg)) + detail = msg; + } + } catch (Throwable ignored) { + } + throw new IOException(TextUtils.isEmpty(detail) ? error : detail); } String response = Helper.readStream(connection.getInputStream());