fallback to legacy HTML parsing
authorDamyan Ivanov <dam+mobileledger@ktnx.net>
Thu, 7 Mar 2019 05:50:17 +0000 (07:50 +0200)
committerDamyan Ivanov <dam+mobileledger@ktnx.net>
Thu, 7 Mar 2019 05:50:17 +0000 (07:50 +0200)
app/src/main/java/net/ktnx/mobileledger/async/RetrieveTransactionsTask.java
app/src/main/java/net/ktnx/mobileledger/err/HTTPException.java [new file with mode: 0644]

index 062c933..e17b40c 100644 (file)
@@ -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 (file)
index 0000000..17b578c
--- /dev/null
@@ -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 <https://www.gnu.org/licenses/>.
+ */
+
+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;
+    }
+}