From ad16325ceea4984f0d383158f167af7791869477 Mon Sep 17 00:00:00 2001 From: Damyan Ivanov Date: Thu, 7 Mar 2019 07:50:17 +0200 Subject: [PATCH] fallback to legacy HTML parsing --- .../async/RetrieveTransactionsTask.java | 26 +++++++++++---- .../ktnx/mobileledger/err/HTTPException.java | 33 +++++++++++++++++++ 2 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/net/ktnx/mobileledger/err/HTTPException.java diff --git a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java index 062c9336..e17b40c7 100644 --- a/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java +++ b/app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java @@ -23,6 +23,7 @@ import android.os.AsyncTask; import android.os.OperationCanceledException; import android.util.Log; +import net.ktnx.mobileledger.err.HTTPException; import net.ktnx.mobileledger.json.AccountListParser; import net.ktnx.mobileledger.json.ParsedBalance; import net.ktnx.mobileledger.json.ParsedLedgerAccount; @@ -38,7 +39,6 @@ import net.ktnx.mobileledger.utils.MLDB; import net.ktnx.mobileledger.utils.NetworkUtil; import java.io.BufferedReader; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -357,11 +357,20 @@ public class RetrieveTransactionsTask new String[]{profile.getUuid()}); db.execSQL("update accounts set keep=0 where profile=?;", new String[]{profile.getUuid()}); } - private boolean retrieveAccountList(MobileLedgerProfile profile) throws IOException { + private boolean retrieveAccountList(MobileLedgerProfile profile) + throws IOException, HTTPException { Progress progress = new Progress(); HttpURLConnection http = NetworkUtil.prepareConnection(profile, "accounts"); http.setAllowUserInteraction(false); + switch (http.getResponseCode()) { + case 200: + break; + case 404: + return false; + default: + throw new HTTPException(http.getResponseCode(), http.getResponseMessage()); + } publishProgress(progress); try (SQLiteDatabase db = MLDB.getWritableDatabase()) { try (InputStream resp = http.getInputStream()) { @@ -405,13 +414,18 @@ public class RetrieveTransactionsTask return true; } private boolean retrieveTransactionList(MobileLedgerProfile profile) - throws IOException, ParseException { + throws IOException, ParseException, HTTPException { Progress progress = new Progress(); int maxTransactionId = Progress.INDETERMINATE; HttpURLConnection http = NetworkUtil.prepareConnection(profile, "transactions"); http.setAllowUserInteraction(false); publishProgress(progress); + switch (http.getResponseCode()) { + case 200: break; + case 404: return false; + default: throw new HTTPException(http.getResponseCode(), http.getResponseMessage()); + } try (SQLiteDatabase db = MLDB.getWritableDatabase()) { try (InputStream resp = http.getInputStream()) { if (http.getResponseCode() != 200) @@ -483,13 +497,13 @@ public class RetrieveTransactionsTask e.printStackTrace(); return "Invalid server URL"; } - catch (FileNotFoundException e) { + catch (HTTPException e) { e.printStackTrace(); - return "Invalid user name or password"; + return String.format("HTTP error %d: %s", e.getResponseCode(), e.getResponseMessage()); } catch (IOException e) { e.printStackTrace(); - return "Network error"; + return "Parse error"; } catch (ParseException e) { e.printStackTrace(); diff --git a/app/src/main/java/net/ktnx/mobileledger/err/HTTPException.java b/app/src/main/java/net/ktnx/mobileledger/err/HTTPException.java new file mode 100644 index 00000000..17b578c4 --- /dev/null +++ b/app/src/main/java/net/ktnx/mobileledger/err/HTTPException.java @@ -0,0 +1,33 @@ +/* + * Copyright © 2019 Damyan Ivanov. + * This file is part of MoLe. + * MoLe is free software: you can distribute it and/or modify it + * under the term of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your opinion), any later version. + * + * MoLe is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License terms for details. + * + * You should have received a copy of the GNU General Public License + * along with MoLe. If not, see . + */ + +package net.ktnx.mobileledger.err; + +public class HTTPException extends Throwable { + private final int responseCode; + private final String responseMessage; + public int getResponseCode() { + return responseCode; + } + public String getResponseMessage() { + return responseMessage; + } + public HTTPException(int responseCode, String responseMessage) { + this.responseCode = responseCode; + this.responseMessage = responseMessage; + } +} -- 2.39.5