88#include < qt/walletmodel.h>
99
1010#include < key_io.h>
11+ #include < wallet/types.h>
1112#include < wallet/wallet.h>
1213
1314#include < algorithm>
@@ -52,17 +53,16 @@ struct AddressTableEntryLessThan
5253};
5354
5455/* Determine address type from address purpose */
55- static AddressTableEntry::Type translateTransactionType (const QString &strPurpose , bool isMine)
56+ static AddressTableEntry::Type translateTransactionType (wallet::AddressPurpose purpose , bool isMine)
5657{
57- AddressTableEntry::Type addressType = AddressTableEntry::Hidden;
5858 // "refund" addresses aren't shown, and change addresses aren't returned by getAddresses at all.
59- if (strPurpose == " send " )
60- addressType = AddressTableEntry::Sending;
61- else if (strPurpose == " receive " )
62- addressType = AddressTableEntry::Receiving ;
63- else if (strPurpose == " unknown " || strPurpose == " " ) // if purpose not set, guess
64- addressType = (isMine ? AddressTableEntry::Receiving : AddressTableEntry::Sending);
65- return addressType ;
59+ switch (purpose) {
60+ case wallet::AddressPurpose::SEND: return AddressTableEntry::Sending;
61+ case wallet::AddressPurpose::RECEIVE: return AddressTableEntry::Receiving;
62+ case wallet::AddressPurpose::REFUND: return AddressTableEntry::Hidden ;
63+ // No default case to allow for compiler to warn
64+ }
65+ assert ( false ) ;
6666}
6767
6868// Private implementation
@@ -85,7 +85,7 @@ class AddressTablePriv
8585 continue ;
8686 }
8787 AddressTableEntry::Type addressType = translateTransactionType (
88- QString::fromStdString ( address.purpose ) , address.is_mine );
88+ address.purpose , address.is_mine );
8989 cachedAddressTable.append (AddressTableEntry (addressType,
9090 QString::fromStdString (address.name ),
9191 QString::fromStdString (EncodeDestination (address.dest ))));
@@ -97,7 +97,7 @@ class AddressTablePriv
9797 std::sort (cachedAddressTable.begin (), cachedAddressTable.end (), AddressTableEntryLessThan ());
9898 }
9999
100- void updateEntry (const QString &address, const QString &label, bool isMine, const QString & purpose, int status)
100+ void updateEntry (const QString &address, const QString &label, bool isMine, wallet::AddressPurpose purpose, int status)
101101 {
102102 // Find address / label in model
103103 QList<AddressTableEntry>::iterator lower = std::lower_bound (
@@ -239,7 +239,7 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
239239 if (!index.isValid ())
240240 return false ;
241241 AddressTableEntry *rec = static_cast <AddressTableEntry*>(index.internalPointer ());
242- std::string strPurpose = ( rec->type == AddressTableEntry::Sending ? " send " : " receive " ) ;
242+ wallet::AddressPurpose purpose = rec->type == AddressTableEntry::Sending ? wallet::AddressPurpose::SEND : wallet::AddressPurpose::RECEIVE ;
243243 editStatus = OK;
244244
245245 if (role == Qt::EditRole)
@@ -253,7 +253,7 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
253253 editStatus = NO_CHANGES;
254254 return false ;
255255 }
256- walletModel->wallet ().setAddressBook (curAddress, value.toString ().toStdString (), strPurpose );
256+ walletModel->wallet ().setAddressBook (curAddress, value.toString ().toStdString (), purpose );
257257 } else if (index.column () == Address) {
258258 CTxDestination newAddress = DecodeDestination (value.toString ().toStdString ());
259259 // Refuse to set invalid address, set error status and return false
@@ -282,7 +282,7 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value,
282282 // Remove old entry
283283 walletModel->wallet ().delAddressBook (curAddress);
284284 // Add new entry with new address
285- walletModel->wallet ().setAddressBook (newAddress, value.toString ().toStdString (), strPurpose );
285+ walletModel->wallet ().setAddressBook (newAddress, value.toString ().toStdString (), purpose );
286286 }
287287 }
288288 return true ;
@@ -334,7 +334,7 @@ QModelIndex AddressTableModel::index(int row, int column, const QModelIndex &par
334334}
335335
336336void AddressTableModel::updateEntry (const QString &address,
337- const QString &label, bool isMine, const QString & purpose, int status)
337+ const QString &label, bool isMine, wallet::AddressPurpose purpose, int status)
338338{
339339 // Update address book model from Bitcoin core
340340 priv->updateEntry (address, label, isMine, purpose, status);
@@ -365,7 +365,7 @@ QString AddressTableModel::addRow(const QString &type, const QString &label, con
365365 }
366366
367367 // Add entry
368- walletModel->wallet ().setAddressBook (DecodeDestination (strAddress), strLabel, " send " );
368+ walletModel->wallet ().setAddressBook (DecodeDestination (strAddress), strLabel, wallet::AddressPurpose::SEND );
369369 }
370370 else if (type == Receive)
371371 {
@@ -416,18 +416,18 @@ QString AddressTableModel::labelForAddress(const QString &address) const
416416 return QString ();
417417}
418418
419- QString AddressTableModel::purposeForAddress (const QString &address) const
419+ std::optional<wallet::AddressPurpose> AddressTableModel::purposeForAddress (const QString &address) const
420420{
421- std::string purpose;
421+ wallet::AddressPurpose purpose;
422422 if (getAddressData (address, /* name= */ nullptr , &purpose)) {
423- return QString::fromStdString ( purpose) ;
423+ return purpose;
424424 }
425- return QString () ;
425+ return std:: nullopt ;
426426}
427427
428428bool AddressTableModel::getAddressData (const QString &address,
429429 std::string* name,
430- std::string * purpose) const {
430+ wallet::AddressPurpose * purpose) const {
431431 CTxDestination destination = DecodeDestination (address.toStdString ());
432432 return walletModel->wallet ().getAddress (destination, name, /* is_mine= */ nullptr , purpose);
433433}
0 commit comments