implement MoneroTxWallet::merge() and placeholder for transfer merges

This commit is contained in:
woodser
2019-07-03 14:36:38 -04:00
parent 397f6b9e7a
commit fc6805a93c
2 changed files with 53 additions and 0 deletions
+49
View File
@@ -15,6 +15,15 @@ namespace monero {
// ----------------------- UNDECLARED PRIVATE HELPERS -----------------------
void mergeIncomingTransfer(const vector<shared_ptr<MoneroIncomingTransfer>> transfers, const shared_ptr<MoneroIncomingTransfer>& transfer) {
for (const shared_ptr<MoneroIncomingTransfer>& aTransfer : transfers) {
if (aTransfer->accountIndex.get() == transfer->accountIndex.get() && aTransfer->subaddressIndex.get() == transfer->subaddressIndex.get()) {
aTransfer->merge(aTransfer, transfer);
return;
}
}
}
// ---------------------------- MONERO ACCOUNT ------------------------------
// TODO: ensure return object is not being unecessarily copied
@@ -65,6 +74,31 @@ namespace monero {
return !incomingTransfers.empty();
}
void MoneroTxWallet::merge(const shared_ptr<MoneroTxWallet>& self, const shared_ptr<MoneroTxWallet>& other) {
cout << "MoneroTxWallet::merge()" << endl;
if (this != self.get()) throw runtime_error("this != self");
if (self == other) return;
MoneroTx::merge(self, other);
// merge wallet extensions
note = MoneroUtils::reconcile(note, other->note);
// merge incoming transfers
if (!other->incomingTransfers.empty()) {
for (const shared_ptr<MoneroIncomingTransfer>& transfer : other->incomingTransfers) {
transfer->tx = self;
mergeIncomingTransfer(self->incomingTransfers, transfer);
}
}
// merge outgoing transfer
if (other->outgoingTransfer != boost::none) {
other->outgoingTransfer.get()->tx = self;
if (self->outgoingTransfer == boost::none) self->outgoingTransfer = other->outgoingTransfer;
else self->outgoingTransfer.get()->merge(self->outgoingTransfer.get(), other->outgoingTransfer.get());
}
}
//boost::property_tree::ptree MoneroUtils::txWalletToPropertyTree(const MoneroTxWallet& tx) {
// cout << "txWalletToPropertyTree(tx)" << endl;
// boost::property_tree::ptree txNode = txToPropertyTree(tx);
@@ -197,6 +231,11 @@ namespace monero {
return node;
}
void MoneroTransfer::merge(const shared_ptr<MoneroTransfer>& self, const shared_ptr<MoneroTransfer>& other) {
cout << "MoneroTransfer::merge" << endl;
throw runtime_error("Not implemented");
}
// ----------------------- MONERO INCOMING TRANSFER -------------------------
boost::optional<bool> MoneroIncomingTransfer::getIsIncoming() const { return true; }
@@ -209,6 +248,11 @@ namespace monero {
return node;
}
void MoneroIncomingTransfer::merge(const shared_ptr<MoneroIncomingTransfer>& self, const shared_ptr<MoneroIncomingTransfer>& other) {
cout << "MoneroIncomingTransfer::merge" << endl;
throw runtime_error("Not implemented");
}
// ----------------------- MONERO OUTGOING TRANSFER -------------------------
boost::optional<bool> MoneroOutgoingTransfer::getIsIncoming() const { return false; }
@@ -222,6 +266,11 @@ namespace monero {
return node;
}
void MoneroOutgoingTransfer::merge(const shared_ptr<MoneroOutgoingTransfer>& self, const shared_ptr<MoneroOutgoingTransfer>& other) {
cout << "MoneroIncomingTransfer::merge" << endl;
throw runtime_error("Not implemented");
}
// ----------------------- MONERO TRANSFER REQUEST --------------------------
boost::optional<bool> MoneroTransferRequest::getIsIncoming() const { return isIncoming; }
+4
View File
@@ -102,6 +102,7 @@ namespace monero {
return !(*getIsIncoming());
}
boost::property_tree::ptree toPropertyTree() const;
void merge(const shared_ptr<MoneroTransfer>& self, const shared_ptr<MoneroTransfer>& other);
};
/**
@@ -113,6 +114,7 @@ namespace monero {
boost::optional<bool> getIsIncoming() const;
boost::property_tree::ptree toPropertyTree() const;
void merge(const shared_ptr<MoneroIncomingTransfer>& self, const shared_ptr<MoneroIncomingTransfer>& other);
};
/**
@@ -125,6 +127,7 @@ namespace monero {
boost::optional<bool> getIsIncoming() const;
boost::property_tree::ptree toPropertyTree() const;
void merge(const shared_ptr<MoneroOutgoingTransfer>& self, const shared_ptr<MoneroOutgoingTransfer>& other);
};
/**
@@ -185,6 +188,7 @@ namespace monero {
bool getIsIncoming() const;
bool getIsOutgoing() const;
boost::property_tree::ptree toPropertyTree() const;
void merge(const shared_ptr<MoneroTxWallet>& self, const shared_ptr<MoneroTxWallet>& other);
};
/**