X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;ds=inline;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FConfigReader.java;fp=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fasync%2FConfigReader.java;h=0000000000000000000000000000000000000000;hb=41d543229f3231469247e10ec6c197920c0e8bc4;hp=a894f92f74ea010f471c203d67ace3806d646e59;hpb=833544eb24cb630dc1ce221e4aa3dedb3f6341e3;p=mobile-ledger.git
diff --git a/app/src/main/java/net/ktnx/mobileledger/async/ConfigReader.java b/app/src/main/java/net/ktnx/mobileledger/async/ConfigReader.java
deleted file mode 100644
index a894f92f..00000000
--- a/app/src/main/java/net/ktnx/mobileledger/async/ConfigReader.java
+++ /dev/null
@@ -1,398 +0,0 @@
-/*
- * Copyright © 2021 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.async;
-
-import android.content.Context;
-import android.net.Uri;
-import android.util.JsonReader;
-import android.util.JsonToken;
-
-import net.ktnx.mobileledger.dao.CurrencyDAO;
-import net.ktnx.mobileledger.dao.ProfileDAO;
-import net.ktnx.mobileledger.dao.TemplateHeaderDAO;
-import net.ktnx.mobileledger.db.Currency;
-import net.ktnx.mobileledger.db.DB;
-import net.ktnx.mobileledger.db.Profile;
-import net.ktnx.mobileledger.db.TemplateAccount;
-import net.ktnx.mobileledger.db.TemplateHeader;
-import net.ktnx.mobileledger.db.TemplateWithAccounts;
-import net.ktnx.mobileledger.model.Data;
-import net.ktnx.mobileledger.utils.Misc;
-
-import java.io.BufferedReader;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.List;
-
-public class ConfigReader extends ConfigIO {
- private final OnDoneListener onDoneListener;
- private JsonReader r;
- public ConfigReader(Context context, Uri uri, OnErrorListener onErrorListener,
- OnDoneListener onDoneListener) throws FileNotFoundException {
- super(context, uri, onErrorListener);
-
- this.onDoneListener = onDoneListener;
- }
- @Override
- protected String getStreamMode() {
- return "r";
- }
- @Override
- protected void initStream() {
- r = new JsonReader(new BufferedReader(
- new InputStreamReader(new FileInputStream(pfd.getFileDescriptor()))));
- }
- @Override
- protected void processStream() throws IOException {
- List commodities = null;
- List profiles = null;
- List templates = null;
- String currentProfile = null;
- r.beginObject();
- while (r.hasNext()) {
- String item = r.nextName();
- if (r.peek() == JsonToken.NULL) {
- r.nextNull();
- continue;
- }
- switch (item) {
- case Keys.COMMODITIES:
- commodities = readCommodities(r);
- break;
- case Keys.PROFILES:
- profiles = readProfiles(r);
- break;
- case Keys.TEMPLATES:
- templates = readTemplates(r);
- break;
- case Keys.CURRENT_PROFILE:
- currentProfile = r.nextString();
- break;
- default:
- throw new RuntimeException("unexpected top-level item " + item);
- }
- }
- r.endObject();
-
- restoreCommodities(commodities);
- restoreProfiles(profiles);
- restoreTemplates(templates);
-
- if (Data.getProfile() == null) {
- Profile p = null;
- final ProfileDAO dao = DB.get()
- .getProfileDAO();
- if (currentProfile != null)
- p = dao.getByUuidSync(currentProfile);
-
- if (p == null)
- dao.getAnySync();
-
- if (p != null)
- Data.postCurrentProfile(p);
- }
-
- if (onDoneListener != null)
- Misc.onMainThread(onDoneListener::done);
- }
- private void restoreTemplates(List list) {
- if (list == null)
- return;
-
- TemplateHeaderDAO dao = DB.get()
- .getTemplateDAO();
-
- for (TemplateWithAccounts t : list) {
- if (dao.getTemplateWithAccountsByUuidSync(t.header.getUuid()) == null)
- dao.insertSync(t);
- }
- }
- private void restoreProfiles(List list) {
- if (list == null)
- return;
-
- ProfileDAO dao = DB.get()
- .getProfileDAO();
-
- for (Profile p : list) {
- if (dao.getByUuidSync(p.getUuid()) == null)
- dao.insert(p);
- }
- }
- private void restoreCommodities(List list) {
- if (list == null)
- return;
-
- CurrencyDAO dao = DB.get()
- .getCurrencyDAO();
-
- for (Currency c : list) {
- if (dao.getByNameSync(c.getName()) == null)
- dao.insert(c);
- }
- }
- private TemplateAccount readTemplateAccount(JsonReader r) throws IOException {
- r.beginObject();
- TemplateAccount result = new TemplateAccount(0L, 0L, 0L);
- while (r.peek() != JsonToken.END_OBJECT) {
- String item = r.nextName();
- if (r.peek() == JsonToken.NULL) {
- r.nextNull();
- continue;
- }
- switch (item) {
- case Keys.NAME:
- result.setAccountName(r.nextString());
- break;
- case Keys.NAME_GROUP:
- result.setAccountNameMatchGroup(r.nextInt());
- break;
- case Keys.COMMENT:
- result.setAccountComment(r.nextString());
- break;
- case Keys.COMMENT_GROUP:
- result.setAccountCommentMatchGroup(r.nextInt());
- break;
- case Keys.AMOUNT:
- result.setAmount((float) r.nextDouble());
- break;
- case Keys.AMOUNT_GROUP:
- result.setAmountMatchGroup(r.nextInt());
- break;
- case Keys.NEGATE_AMOUNT:
- result.setNegateAmount(r.nextBoolean());
- break;
- case Keys.CURRENCY:
- result.setCurrency(r.nextLong());
- break;
- case Keys.CURRENCY_GROUP:
- result.setCurrencyMatchGroup(r.nextInt());
- break;
-
- default:
- throw new IllegalStateException("Unexpected template account item: " + item);
- }
- }
- r.endObject();
-
- return result;
- }
- private TemplateWithAccounts readTemplate(JsonReader r) throws IOException {
- r.beginObject();
- String name = null;
- TemplateHeader t = new TemplateHeader(0L, "", "");
- List accounts = new ArrayList<>();
-
- while (r.peek() != JsonToken.END_OBJECT) {
- String item = r.nextName();
- if (r.peek() == JsonToken.NULL) {
- r.nextNull();
- continue;
- }
- switch (item) {
- case Keys.UUID:
- t.setUuid(r.nextString());
- break;
- case Keys.NAME:
- t.setName(r.nextString());
- break;
- case Keys.REGEX:
- t.setRegularExpression(r.nextString());
- break;
- case Keys.TEST_TEXT:
- t.setTestText(r.nextString());
- break;
- case Keys.DATE_YEAR:
- t.setDateYear(r.nextInt());
- break;
- case Keys.DATE_YEAR_GROUP:
- t.setDateYearMatchGroup(r.nextInt());
- break;
- case Keys.DATE_MONTH:
- t.setDateMonth(r.nextInt());
- break;
- case Keys.DATE_MONTH_GROUP:
- t.setDateMonthMatchGroup(r.nextInt());
- break;
- case Keys.DATE_DAY:
- t.setDateDay(r.nextInt());
- break;
- case Keys.DATE_DAY_GROUP:
- t.setDateDayMatchGroup(r.nextInt());
- break;
- case Keys.TRANSACTION:
- t.setTransactionDescription(r.nextString());
- break;
- case Keys.TRANSACTION_GROUP:
- t.setTransactionDescriptionMatchGroup(r.nextInt());
- break;
- case Keys.COMMENT:
- t.setTransactionComment(r.nextString());
- break;
- case Keys.COMMENT_GROUP:
- t.setTransactionCommentMatchGroup(r.nextInt());
- break;
- case Keys.IS_FALLBACK:
- t.setFallback(r.nextBoolean());
- break;
- case Keys.ACCOUNTS:
- r.beginArray();
- while (r.peek() == JsonToken.BEGIN_OBJECT) {
- accounts.add(readTemplateAccount(r));
- }
- r.endArray();
- break;
- default:
- throw new RuntimeException("Unknown template header item: " + item);
- }
- }
- r.endObject();
-
- TemplateWithAccounts result = new TemplateWithAccounts();
- result.header = t;
- result.accounts = accounts;
- return result;
- }
- private List readTemplates(JsonReader r) throws IOException {
- List list = new ArrayList<>();
-
- r.beginArray();
- while (r.peek() == JsonToken.BEGIN_OBJECT) {
- list.add(readTemplate(r));
- }
- r.endArray();
-
- return list;
- }
- private List readCommodities(JsonReader r) throws IOException {
- List list = new ArrayList<>();
-
- r.beginArray();
- while (r.peek() == JsonToken.BEGIN_OBJECT) {
- Currency c = new Currency();
-
- r.beginObject();
- while (r.peek() != JsonToken.END_OBJECT) {
- final String item = r.nextName();
- if (r.peek() == JsonToken.NULL) {
- r.nextNull();
- continue;
- }
- switch (item) {
- case Keys.NAME:
- c.setName(r.nextString());
- break;
- case Keys.POSITION:
- c.setPosition(r.nextString());
- break;
- case Keys.HAS_GAP:
- c.setHasGap(r.nextBoolean());
- break;
- default:
- throw new RuntimeException("Unknown commodity key: " + item);
- }
- }
- r.endObject();
-
- if (c.getName()
- .isEmpty())
- throw new RuntimeException("Missing commodity name");
-
- list.add(c);
- }
- r.endArray();
-
- return list;
- }
- private List readProfiles(JsonReader r) throws IOException {
- List list = new ArrayList<>();
- r.beginArray();
- while (r.peek() == JsonToken.BEGIN_OBJECT) {
- Profile p = new Profile();
- r.beginObject();
- while (r.peek() != JsonToken.END_OBJECT) {
- String item = r.nextName();
- if (r.peek() == JsonToken.NULL) {
- r.nextNull();
- continue;
- }
-
- switch (item) {
- case Keys.UUID:
- p.setUuid(r.nextString());
- break;
- case Keys.NAME:
- p.setName(r.nextString());
- break;
- case Keys.URL:
- p.setUrl(r.nextString());
- break;
- case Keys.USE_AUTH:
- p.setUseAuthentication(r.nextBoolean());
- break;
- case Keys.AUTH_USER:
- p.setAuthUser(r.nextString());
- break;
- case Keys.AUTH_PASS:
- p.setAuthPassword(r.nextString());
- break;
- case Keys.API_VER:
- p.setApiVersion(r.nextInt());
- break;
- case Keys.CAN_POST:
- p.setPermitPosting(r.nextBoolean());
- break;
- case Keys.DEFAULT_COMMODITY:
- p.setDefaultCommodity(r.nextString());
- break;
- case Keys.SHOW_COMMODITY:
- p.setShowCommodityByDefault(r.nextBoolean());
- break;
- case Keys.SHOW_COMMENTS:
- p.setShowCommentsByDefault(r.nextBoolean());
- break;
- case Keys.FUTURE_DATES:
- p.setFutureDates(r.nextInt());
- break;
- case Keys.PREF_ACCOUNT:
- p.setPreferredAccountsFilter(r.nextString());
- break;
- case Keys.COLOUR:
- p.setTheme(r.nextInt());
- break;
-
-
- default:
- throw new IllegalStateException("Unexpected profile item: " + item);
- }
- }
- r.endObject();
-
- list.add(p);
- }
- r.endArray();
-
- return list;
- }
- abstract static public class OnDoneListener {
- public abstract void done();
- }
-}