Add purpose arg to Wallet::getAddress

Also make all arguments to getAddress required and document args at call sites.
This commit is contained in:
James O'Beirne 2018-04-10 11:50:10 -04:00
parent a785bc3667
commit c5b277033a
5 changed files with 22 additions and 10 deletions

View File

@ -152,7 +152,10 @@ public:
{ {
return m_wallet.DelAddressBook(dest); return m_wallet.DelAddressBook(dest);
} }
bool getAddress(const CTxDestination& dest, std::string* name, isminetype* is_mine) override bool getAddress(const CTxDestination& dest,
std::string* name,
isminetype* is_mine,
std::string* purpose) override
{ {
LOCK(m_wallet.cs_wallet); LOCK(m_wallet.cs_wallet);
auto it = m_wallet.mapAddressBook.find(dest); auto it = m_wallet.mapAddressBook.find(dest);
@ -165,6 +168,9 @@ public:
if (is_mine) { if (is_mine) {
*is_mine = IsMine(m_wallet, dest); *is_mine = IsMine(m_wallet, dest);
} }
if (purpose) {
*purpose = it->second.purpose;
}
return true; return true;
} }
std::vector<WalletAddress> getAddresses() override std::vector<WalletAddress> getAddresses() override

View File

@ -99,8 +99,9 @@ public:
//! Look up address in wallet, return whether exists. //! Look up address in wallet, return whether exists.
virtual bool getAddress(const CTxDestination& dest, virtual bool getAddress(const CTxDestination& dest,
std::string* name = nullptr, std::string* name,
isminetype* is_mine = nullptr) = 0; isminetype* is_mine,
std::string* purpose) = 0;
//! Get wallet address list. //! Get wallet address list.
virtual std::vector<WalletAddress> getAddresses() = 0; virtual std::vector<WalletAddress> getAddresses() = 0;

View File

@ -266,7 +266,8 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
} }
// Check for duplicate addresses to prevent accidental deletion of addresses, if you try // Check for duplicate addresses to prevent accidental deletion of addresses, if you try
// to paste an existing address over another address (with a different label) // to paste an existing address over another address (with a different label)
if (walletModel->wallet().getAddress(newAddress)) if (walletModel->wallet().getAddress(
newAddress, /* name= */ nullptr, /* is_mine= */ nullptr, /* purpose= */ nullptr))
{ {
editStatus = DUPLICATE_ADDRESS; editStatus = DUPLICATE_ADDRESS;
return false; return false;
@ -351,7 +352,8 @@ QString AddressTableModel::addRow(const QString &type, const QString &label, con
} }
// Check for duplicate addresses // Check for duplicate addresses
{ {
if(walletModel->wallet().getAddress(DecodeDestination(strAddress))) if (walletModel->wallet().getAddress(
DecodeDestination(strAddress), /* name= */ nullptr, /* is_mine= */ nullptr, /* purpose= */ nullptr))
{ {
editStatus = DUPLICATE_ADDRESS; editStatus = DUPLICATE_ADDRESS;
return QString(); return QString();

View File

@ -102,7 +102,7 @@ QString TransactionDesc::toHTML(interfaces::Node& node, interfaces::Wallet& wall
if (IsValidDestination(address)) { if (IsValidDestination(address)) {
std::string name; std::string name;
isminetype ismine; isminetype ismine;
if (wallet.getAddress(address, &name, &ismine)) if (wallet.getAddress(address, &name, &ismine, /* purpose= */ nullptr))
{ {
strHTML += "<b>" + tr("From") + ":</b> " + tr("unknown") + "<br>"; strHTML += "<b>" + tr("From") + ":</b> " + tr("unknown") + "<br>";
strHTML += "<b>" + tr("To") + ":</b> "; strHTML += "<b>" + tr("To") + ":</b> ";
@ -128,7 +128,8 @@ QString TransactionDesc::toHTML(interfaces::Node& node, interfaces::Wallet& wall
strHTML += "<b>" + tr("To") + ":</b> "; strHTML += "<b>" + tr("To") + ":</b> ";
CTxDestination dest = DecodeDestination(strAddress); CTxDestination dest = DecodeDestination(strAddress);
std::string name; std::string name;
if (wallet.getAddress(dest, &name) && !name.empty()) if (wallet.getAddress(
dest, &name, /* is_mine= */ nullptr, /* purpose= */ nullptr) && !name.empty())
strHTML += GUIUtil::HtmlEscape(name) + " "; strHTML += GUIUtil::HtmlEscape(name) + " ";
strHTML += GUIUtil::HtmlEscape(strAddress) + "<br>"; strHTML += GUIUtil::HtmlEscape(strAddress) + "<br>";
} }
@ -196,7 +197,8 @@ QString TransactionDesc::toHTML(interfaces::Node& node, interfaces::Wallet& wall
{ {
strHTML += "<b>" + tr("To") + ":</b> "; strHTML += "<b>" + tr("To") + ":</b> ";
std::string name; std::string name;
if (wallet.getAddress(address, &name) && !name.empty()) if (wallet.getAddress(
address, &name, /* is_mine= */ nullptr, /* purpose= */ nullptr) && !name.empty())
strHTML += GUIUtil::HtmlEscape(name) + " "; strHTML += GUIUtil::HtmlEscape(name) + " ";
strHTML += GUIUtil::HtmlEscape(EncodeDestination(address)); strHTML += GUIUtil::HtmlEscape(EncodeDestination(address));
if(toSelf == ISMINE_SPENDABLE) if(toSelf == ISMINE_SPENDABLE)
@ -319,7 +321,7 @@ QString TransactionDesc::toHTML(interfaces::Node& node, interfaces::Wallet& wall
if (ExtractDestination(vout.scriptPubKey, address)) if (ExtractDestination(vout.scriptPubKey, address))
{ {
std::string name; std::string name;
if (wallet.getAddress(address, &name) && !name.empty()) if (wallet.getAddress(address, &name, /* is_mine= */ nullptr, /* purpose= */ nullptr) && !name.empty())
strHTML += GUIUtil::HtmlEscape(name) + " "; strHTML += GUIUtil::HtmlEscape(name) + " ";
strHTML += QString::fromStdString(EncodeDestination(address)); strHTML += QString::fromStdString(EncodeDestination(address));
} }

View File

@ -274,7 +274,8 @@ WalletModel::SendCoinsReturn WalletModel::sendCoins(WalletModelTransaction &tran
{ {
// Check if we have a new address or an updated label // Check if we have a new address or an updated label
std::string name; std::string name;
if (!m_wallet->getAddress(dest, &name)) if (!m_wallet->getAddress(
dest, &name, /* is_mine= */ nullptr, /* purpose= */ nullptr))
{ {
m_wallet->setAddressBook(dest, strLabel, "send"); m_wallet->setAddressBook(dest, strLabel, "send");
} }