/*
- * Copyright © 2018 Damyan Ivanov.
- * This file is part of Mobile-Ledger.
- * Mobile-Ledger is free software: you can distribute it and/or modify it
+ * 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.
*
- * Mobile-Ledger is distributed in the hope that it will be useful,
+ * 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 Mobile-Ledger. If not, see <https://www.gnu.org/licenses/>.
+ * along with MoLe. If not, see <https://www.gnu.org/licenses/>.
*/
package net.ktnx.mobileledger.async;
-import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.util.Log;
+import net.ktnx.mobileledger.model.Data;
import net.ktnx.mobileledger.model.LedgerTransaction;
import net.ktnx.mobileledger.model.LedgerTransactionAccount;
+import net.ktnx.mobileledger.utils.Globals;
import net.ktnx.mobileledger.utils.NetworkUtil;
import net.ktnx.mobileledger.utils.UrlEncodedFormData;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
+import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import static java.lang.Thread.sleep;
public class SaveTransactionTask extends AsyncTask<LedgerTransaction, Void, Void> {
- private final TaskCallback task_callback;
+ private final TaskCallback taskCallback;
+ protected String error;
private String token;
private String session;
- private String backend_url;
+ private String backendUrl;
private LedgerTransaction ltr;
- protected String error;
-
- private SharedPreferences pref;
- public void setPref(SharedPreferences pref) {
- this.pref = pref;
- }
public SaveTransactionTask(TaskCallback callback) {
- task_callback = callback;
+ taskCallback = callback;
}
- private boolean send_ok() throws IOException {
- HttpURLConnection http = NetworkUtil.prepare_connection(pref, "add");
+ private boolean sendOK() throws IOException {
+ HttpURLConnection http = NetworkUtil.prepareConnection(Data.profile.get(), "add");
http.setRequestMethod("POST");
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
http.setRequestProperty("Accept", "*/*");
http.setDoInput(true);
UrlEncodedFormData params = new UrlEncodedFormData();
- params.add_pair("_formid", "identify-add");
- if (token != null) params.add_pair("_token", token);
- params.add_pair("date", ltr.getDate());
- params.add_pair("description", ltr.getDescription());
+ params.addPair("_formid", "identify-add");
+ if (token != null) params.addPair("_token", token);
+ params.addPair("date", Globals.formatLedgerDate(ltr.getDate()));
+ params.addPair("description", ltr.getDescription());
for (LedgerTransactionAccount acc : ltr.getAccounts()) {
- params.add_pair("account", acc.getAccountName());
+ params.addPair("account", acc.getAccountName());
if (acc.isAmountSet())
- params.add_pair("amount", String.format(Locale.US, "%1.2f", acc.getAmount()));
- else params.add_pair("amount", "");
+ params.addPair("amount", String.format(Locale.US, "%1.2f", acc.getAmount()));
+ else params.addPair("amount", "");
}
String body = params.toString();
try (OutputStream req = http.getOutputStream()) {
Log.d("network", "Request body: " + body);
- req.write(body.getBytes("ASCII"));
+ req.write(body.getBytes(StandardCharsets.US_ASCII));
try (InputStream resp = http.getInputStream()) {
Log.d("update_accounts", String.valueOf(http.getResponseCode()));
if (http.getResponseCode() == 303) {
// everything is fine
return true;
- } else if (http.getResponseCode() == 200) {
+ }
+ else if (http.getResponseCode() == 200) {
// get the new cookie
{
- Pattern sess_cookie_re = Pattern.compile("_SESSION=([^;]+);.*");
+ Pattern reSessionCookie = Pattern.compile("_SESSION=([^;]+);.*");
Map<String, List<String>> header = http.getHeaderFields();
- List<String> cookie_header = header.get("Set-Cookie");
- if (cookie_header != null) {
- String cookie = cookie_header.get(0);
- Matcher m = sess_cookie_re.matcher(cookie);
+ List<String> cookieHeader = header.get("Set-Cookie");
+ if (cookieHeader != null) {
+ String cookie = cookieHeader.get(0);
+ Matcher m = reSessionCookie.matcher(cookie);
if (m.matches()) {
session = m.group(1);
Log.d("network", "new session is " + session);
- } else {
+ }
+ else {
Log.d("network", "set-cookie: " + cookie);
- Log.w("network", "Response Set-Cookie headers is not a _SESSION one");
+ Log.w("network",
+ "Response Set-Cookie headers is not a _SESSION one");
}
- } else {
+ }
+ else {
Log.w("network", "Response has no Set-Cookie header");
}
}
// the token needs to be updated
BufferedReader reader = new BufferedReader(new InputStreamReader(resp));
- Pattern re = Pattern.compile("<input type=\"hidden\" name=\"_token\" value=\"([^\"]+)\">");
+ Pattern re = Pattern.compile(
+ "<input type=\"hidden\" name=\"_token\" value=\"([^\"]+)\">");
String line;
while ((line = reader.readLine()) != null) {
//Log.d("dump", line);
}
}
throw new IOException("Can't find _token string");
- } else {
- throw new IOException(String.format("Error response code %d", http.getResponseCode()));
+ }
+ else {
+ throw new IOException(
+ String.format("Error response code %d", http.getResponseCode()));
}
}
}
protected Void doInBackground(LedgerTransaction... ledgerTransactions) {
error = null;
try {
- backend_url = pref.getString("backend_url", "");
+ backendUrl = Data.profile.get().getUrl();
ltr = ledgerTransactions[0];
int tried = 0;
- while (!send_ok()) {
+ while (!sendOK()) {
try {
tried++;
if (tried >= 2)
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
- task_callback.done(error);
+ taskCallback.done(error);
}
}