From 1cb12cfd965e0dd1b32aa1384e07c37adca03d22 Mon Sep 17 00:00:00 2001 From: adityapk00 Date: Sun, 27 Jan 2019 20:26:01 -0800 Subject: [PATCH] recurring item serialization --- src/recurring.h | 88 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 76 insertions(+), 12 deletions(-) diff --git a/src/recurring.h b/src/recurring.h index b32badb..b2f385e 100644 --- a/src/recurring.h +++ b/src/recurring.h @@ -17,27 +17,91 @@ enum Schedule { QString schedule_desc(Schedule s); struct RecurringPaymentInfo { - QString hashid; + QString hashid; - QString desc; - QString fromAddr; - QString toAddr; - double amt; - QString memo; - QString currency; - Schedule schedule; - int numPayments; + QString desc; + QString fromAddr; + QString toAddr; + double amt; + QString memo; + QString currency; + Schedule schedule; + int frequency; + int numPayments; - QDateTime startDate; - int completedPayments; + QDateTime startDate; + int completedPayments; struct HistoryItem { int paymentNumber; - QDateTime dt; + QDateTime date; QString txid; }; QList history; + static RecurringPaymentInfo fromJson(QJsonObject j) { + RecurringPaymentInfo r; + r.hashid = j["hash"].toString(); + r.desc = j["desc"].toString(); + r.fromAddr = j["from"].toString(); + r.toAddr = j["to"].toString(); + r.amt = j["amt"].toString().toDouble(); + r.memo = j["memo"].toString(); + r.currency = j["currency"].toString(); + r.schedule = (Schedule)j["schedule"].toInt(); + r.frequency = j["frequency"].toInt(); + r.numPayments = j["numpayments"].toInt(); + r.startDate = QDateTime::fromSecsSinceEpoch(j["startdate"].toString().toLongLong()); + r.completedPayments = j["completed"].toInt(); + + r.history = QList(); + for (auto h : j["history"].toArray()) { + HistoryItem item; + + item.paymentNumber = h.toObject()["paymentnumber"].toInt(); + item.date = QDateTime::fromSecsSinceEpoch(h.toObject()["date"].toString().toLongLong()); + item.txid = h.toObject()["txid"].toString(); + + r.history.append(item); + } + + return r; + } + + void updateHash() { + auto val = getScheduleDescription() + fromAddr + toAddr; + hashid = QCryptographicHash::hash(val.toUtf8(), QCryptographicHash::Sha256); + } + + QJsonObject toJson() { + QJsonArray historyJson; + for (auto h : history) { + historyJson.append(QJsonObject{ + {"paymentnumber", h.paymentNumber}, + {"date", QString::number(h.date.toSecsSinceEpoch())}, + {"txid", h.txid} + }); + } + + auto j = QJsonObject{ + {"hash", hashid}, + {"desc", desc}, + {"from", fromAddr}, + {"to", toAddr}, + {"amt", Settings::getDecimalString(amt)}, + {"memo", memo}, + {"currency", currency}, + {"schedule", (int)schedule}, + {"frequency", frequency}, + {"numpayments", numPayments}, + {"startdate", QString::number(startDate.toSecsSinceEpoch())}, + {"completed", completedPayments}, + {"history", historyJson} + }; + + return j; + } + QString getScheduleDescription() { return "Pay " % (currency == "USD" ? Settings::getUSDFormat(amt) : Settings::getZECDisplayFormat(amt)) % " every " % schedule_desc(schedule) % ", starting " % startDate.toString("yyyy-MMM-dd")