/*
- * Copyright © 2020 Damyan Ivanov.
+ * Copyright © 2023 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
package net.ktnx.mobileledger.async;
-import android.os.AsyncTask;
+import static net.ktnx.mobileledger.utils.Logger.debug;
+
import android.util.Log;
+import net.ktnx.mobileledger.db.Profile;
import net.ktnx.mobileledger.json.API;
import net.ktnx.mobileledger.json.ApiNotSupportedException;
import net.ktnx.mobileledger.json.Gateway;
import net.ktnx.mobileledger.model.LedgerTransaction;
import net.ktnx.mobileledger.model.LedgerTransactionAccount;
-import net.ktnx.mobileledger.model.MobileLedgerProfile;
import net.ktnx.mobileledger.utils.Globals;
import net.ktnx.mobileledger.utils.Logger;
+import net.ktnx.mobileledger.utils.Misc;
import net.ktnx.mobileledger.utils.NetworkUtil;
import net.ktnx.mobileledger.utils.SimpleDate;
import net.ktnx.mobileledger.utils.UrlEncodedFormData;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import static android.os.SystemClock.sleep;
-import static net.ktnx.mobileledger.utils.Logger.debug;
-
/* TODO: get rid of the custom session/cookie and auth code?
* (the last problem with the POST was the missing content-length header)
* This will resolve itself when hledger-web 1.14+ is released with Debian/stable,
* at which point the HTML form emulation can be dropped entirely
*/
-public class SendTransactionTask extends AsyncTask<LedgerTransaction, Void, Void> {
+public class SendTransactionTask extends Thread {
private final TaskCallback taskCallback;
- private final MobileLedgerProfile mProfile;
+ private final Profile mProfile;
private final boolean simulate;
+ private final LedgerTransaction transaction;
protected String error;
private String token;
private String session;
- private LedgerTransaction transaction;
- public SendTransactionTask(TaskCallback callback, MobileLedgerProfile profile,
- boolean simulate) {
+ public SendTransactionTask(TaskCallback callback, Profile profile,
+ LedgerTransaction transaction, boolean simulate) {
taskCallback = callback;
mProfile = profile;
+ this.transaction = transaction;
this.simulate = simulate;
}
- public SendTransactionTask(TaskCallback callback, MobileLedgerProfile profile) {
- taskCallback = callback;
- mProfile = profile;
- simulate = false;
- }
private void sendOK(API apiVersion) throws IOException, ApiNotSupportedException {
HttpURLConnection http = NetworkUtil.prepareConnection(mProfile, "add");
http.setRequestMethod("PUT");
}
}
@Override
- protected Void doInBackground(LedgerTransaction... ledgerTransactions) {
+ public void run() {
error = null;
try {
- transaction = ledgerTransactions[0];
-
- final API profileApiVersion = mProfile.getApiVersion();
+ final API profileApiVersion = API.valueOf(mProfile.getApiVersion());
switch (profileApiVersion) {
case auto:
boolean sendOK = false;
case v1_14:
case v1_15:
case v1_19_1:
+ case v1_23:
sendOK(profileApiVersion);
break;
default:
error = e.getMessage();
}
- return null;
+ Misc.onMainThread(() -> taskCallback.onTransactionSaveDone(error, transaction));
}
private void legacySendOkWithRetry() throws IOException {
int tried = 0;
tried++;
if (tried >= 2)
throw new IOException(String.format("aborting after %d tries", tried));
- sleep(100);
+ try {
+ sleep(100);
+ }
+ catch (InterruptedException e) {
+ e.printStackTrace();
+ break;
+ }
}
}
- @Override
- protected void onPostExecute(Void aVoid) {
- super.onPostExecute(aVoid);
- taskCallback.done(error);
- }
-
}
\ No newline at end of file