mirror of
https://github.com/wownero/wownero-cpp.git
synced 2026-10-19 08:08:39 +02:00
implement MoneroTxWallet::merge() and placeholder for transfer merges
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -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);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user