1010#include < qt/walletmodel.h>
1111
1212#include < key_io.h>
13+ #include < wallet/types.h>
1314
1415#include < algorithm>
1516
@@ -53,17 +54,16 @@ struct AddressTableEntryLessThan
5354};
5455
5556/* Determine address type from address purpose */
56- static AddressTableEntry::Type translateTransactionType (const QString &strPurpose , bool isMine)
57+ static AddressTableEntry::Type translateTransactionType (wallet::AddressPurpose purpose , bool isMine)
5758{
58- AddressTableEntry::Type addressType = AddressTableEntry::Hidden;
5959 // "refund" addresses aren't shown, and change addresses aren't returned by getAddresses at all.
60- if (strPurpose == " send " )
61- addressType = AddressTableEntry::Sending;
62- else if (strPurpose == " receive " )
63- addressType = AddressTableEntry::Receiving ;
64- else if (strPurpose == " unknown " || strPurpose == " " ) // if purpose not set, guess
65- addressType = (isMine ? AddressTableEntry::Receiving : AddressTableEntry::Sending);
66- return addressType ;
60+ switch (purpose) {
61+ case wallet::AddressPurpose::SEND: return AddressTableEntry::Sending;
62+ case wallet::AddressPurpose::RECEIVE: return AddressTableEntry::Receiving;
63+ case wallet::AddressPurpose::REFUND: return AddressTableEntry::Hidden ;
64+ // No default case to allow for compiler to warn
65+ }
66+ assert ( false ) ;
6767}
6868
6969// Private implementation
@@ -83,7 +83,7 @@ class AddressTablePriv
8383 for (const auto & address : wallet.getAddresses ())
8484 {
8585 AddressTableEntry::Type addressType = translateTransactionType (
86- QString::fromStdString ( address.purpose ) , address.is_mine );
86+ address.purpose , address.is_mine );
8787 cachedAddressTable.append (AddressTableEntry (addressType,
8888 QString::fromStdString (address.name ),
8989 QString::fromStdString (EncodeDestination (address.dest ))));
@@ -95,7 +95,7 @@ class AddressTablePriv
9595 std::sort (cachedAddressTable.begin (), cachedAddressTable.end (), AddressTableEntryLessThan ());
9696 }
9797
98- void updateEntry (const QString &address, const QString &label, bool isMine, const QString & purpose, int status)
98+ void updateEntry (const QString &address, const QString &label, bool isMine, wallet::AddressPurpose purpose, int status)
9999 {
100100 // Find address / label in model
101101 QList<AddressTableEntry>::iterator lower = std::lower_bound (
@@ -237,7 +237,7 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
237237 if (!index.isValid ())
238238 return false ;
239239 AddressTableEntry *rec = static_cast <AddressTableEntry*>(index.internalPointer ());
240- std::string strPurpose = ( rec->type == AddressTableEntry::Sending ? " send " : " receive " ) ;
240+ wallet::AddressPurpose purpose = rec->type == AddressTableEntry::Sending ? wallet::AddressPurpose::SEND : wallet::AddressPurpose::RECEIVE ;
241241 editStatus = OK;
242242
243243 if (role == Qt::EditRole)
@@ -251,7 +251,7 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
251251 editStatus = NO_CHANGES;
252252 return false ;
253253 }
254- walletModel->wallet ().setAddressBook (curAddress, value.toString ().toStdString (), strPurpose );
254+ walletModel->wallet ().setAddressBook (curAddress, value.toString ().toStdString (), purpose );
255255 } else if (index.column () == Address) {
256256 CTxDestination newAddress = DecodeDestination (value.toString ().toStdString ());
257257 // Refuse to set invalid address, set error status and return false
@@ -280,7 +280,7 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
280280 // Remove old entry
281281 walletModel->wallet ().delAddressBook (curAddress);
282282 // Add new entry with new address
283- walletModel->wallet ().setAddressBook (newAddress, value.toString ().toStdString (), strPurpose );
283+ walletModel->wallet ().setAddressBook (newAddress, value.toString ().toStdString (), purpose );
284284 }
285285 }
286286 return true ;
@@ -332,7 +332,7 @@ QModelIndex AddressTableModel::index(int row, int column, const QModelIndex &par
332332}
333333
334334void AddressTableModel::updateEntry (const QString &address,
335- const QString &label, bool isMine, const QString & purpose, int status)
335+ const QString &label, bool isMine, wallet::AddressPurpose purpose, int status)
336336{
337337 // Update address book model from Dash core
338338 priv->updateEntry (address, label, isMine, purpose, status);
@@ -362,7 +362,7 @@ QString AddressTableModel::addRow(const QString &type, const QString &label, con
362362 }
363363 }
364364 // Add entry
365- walletModel->wallet ().setAddressBook (DecodeDestination (strAddress), strLabel, " send " );
365+ walletModel->wallet ().setAddressBook (DecodeDestination (strAddress), strLabel, wallet::AddressPurpose::SEND );
366366 }
367367 else if (type == Receive)
368368 {
@@ -413,18 +413,18 @@ QString AddressTableModel::labelForAddress(const QString &address) const
413413 return QString ();
414414}
415415
416- QString AddressTableModel::purposeForAddress (const QString &address) const
416+ std::optional<wallet::AddressPurpose> AddressTableModel::purposeForAddress (const QString &address) const
417417{
418- std::string purpose;
418+ wallet::AddressPurpose purpose;
419419 if (getAddressData (address, /* name= */ nullptr , &purpose)) {
420- return QString::fromStdString ( purpose) ;
420+ return purpose;
421421 }
422- return QString () ;
422+ return std:: nullopt ;
423423}
424424
425425bool AddressTableModel::getAddressData (const QString &address,
426426 std::string* name,
427- std::string * purpose) const {
427+ wallet::AddressPurpose * purpose) const {
428428 CTxDestination destination = DecodeDestination (address.toStdString ());
429429 return walletModel->wallet ().getAddress (destination, name, /* is_mine= */ nullptr , purpose);
430430}
0 commit comments