aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libwalletqt/SubaddressAccount.cpp56
-rw-r--r--src/libwalletqt/SubaddressAccount.h33
-rw-r--r--src/libwalletqt/Wallet.cpp22
-rw-r--r--src/libwalletqt/Wallet.h12
-rw-r--r--src/model/SubaddressAccountModel.cpp66
-rw-r--r--src/model/SubaddressAccountModel.h36
6 files changed, 225 insertions, 0 deletions
diff --git a/src/libwalletqt/SubaddressAccount.cpp b/src/libwalletqt/SubaddressAccount.cpp
new file mode 100644
index 00000000..83557141
--- /dev/null
+++ b/src/libwalletqt/SubaddressAccount.cpp
@@ -0,0 +1,56 @@
+#include "SubaddressAccount.h"
+#include <QDebug>
+
+SubaddressAccount::SubaddressAccount(Monero::SubaddressAccount *subaddressAccountImpl, QObject *parent)
+ : QObject(parent), m_subaddressAccountImpl(subaddressAccountImpl)
+{
+ qDebug(__FUNCTION__);
+ getAll();
+}
+
+QList<Monero::SubaddressAccountRow*> SubaddressAccount::getAll(bool update) const
+{
+ qDebug(__FUNCTION__);
+
+ emit refreshStarted();
+
+ if(update)
+ m_rows.clear();
+
+ if (m_rows.empty()){
+ for (auto &row: m_subaddressAccountImpl->getAll()) {
+ m_rows.append(row);
+ }
+ }
+
+ emit refreshFinished();
+ return m_rows;
+}
+
+Monero::SubaddressAccountRow * SubaddressAccount::getRow(int index) const
+{
+ return m_rows.at(index);
+}
+
+void SubaddressAccount::addRow(const QString &label) const
+{
+ m_subaddressAccountImpl->addRow(label.toStdString());
+ getAll(true);
+}
+
+void SubaddressAccount::setLabel(quint32 accountIndex, const QString &label) const
+{
+ m_subaddressAccountImpl->setLabel(accountIndex, label.toStdString());
+ getAll(true);
+}
+
+void SubaddressAccount::refresh() const
+{
+ m_subaddressAccountImpl->refresh();
+ getAll(true);
+}
+
+quint64 SubaddressAccount::count() const
+{
+ return m_rows.size();
+}
diff --git a/src/libwalletqt/SubaddressAccount.h b/src/libwalletqt/SubaddressAccount.h
new file mode 100644
index 00000000..ee40c22e
--- /dev/null
+++ b/src/libwalletqt/SubaddressAccount.h
@@ -0,0 +1,33 @@
+#ifndef SUBADDRESSACCOUNT_H
+#define SUBADDRESSACCOUNT_H
+
+#include <wallet/api/wallet2_api.h>
+#include <QObject>
+#include <QList>
+#include <QDateTime>
+
+class SubaddressAccount : public QObject
+{
+ Q_OBJECT
+public:
+ Q_INVOKABLE QList<Monero::SubaddressAccountRow*> getAll(bool update = false) const;
+ Q_INVOKABLE Monero::SubaddressAccountRow * getRow(int index) const;
+ Q_INVOKABLE void addRow(const QString &label) const;
+ Q_INVOKABLE void setLabel(quint32 accountIndex, const QString &label) const;
+ Q_INVOKABLE void refresh() const;
+ quint64 count() const;
+
+signals:
+ void refreshStarted() const;
+ void refreshFinished() const;
+
+public slots:
+
+private:
+ explicit SubaddressAccount(Monero::SubaddressAccount * subaddressAccountImpl, QObject *parent);
+ friend class Wallet;
+ Monero::SubaddressAccount * m_subaddressAccountImpl;
+ mutable QList<Monero::SubaddressAccountRow*> m_rows;
+};
+
+#endif // SUBADDRESSACCOUNT_H
diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp
index 85761e0b..e488b635 100644
--- a/src/libwalletqt/Wallet.cpp
+++ b/src/libwalletqt/Wallet.cpp
@@ -4,10 +4,12 @@
#include "TransactionHistory.h"
#include "AddressBook.h"
#include "Subaddress.h"
+#include "SubaddressAccount.h"
#include "model/TransactionHistoryModel.h"
#include "model/TransactionHistorySortFilterModel.h"
#include "model/AddressBookModel.h"
#include "model/SubaddressModel.h"
+#include "model/SubaddressAccountModel.h"
#include "wallet/api/wallet2_api.h"
#include <QFile>
@@ -357,6 +359,7 @@ bool Wallet::refresh()
bool result = m_walletImpl->refresh();
m_history->refresh(currentSubaddressAccount());
m_subaddress->refresh(currentSubaddressAccount());
+ m_subaddressAccount->getAll(true);
if (result)
emit updated();
return result;
@@ -543,6 +546,20 @@ SubaddressModel *Wallet::subaddressModel()
return m_subaddressModel;
}
+SubaddressAccount *Wallet::subaddressAccount() const
+{
+ return m_subaddressAccount;
+}
+
+SubaddressAccountModel *Wallet::subaddressAccountModel() const
+{
+ if (!m_subaddressAccountModel) {
+ Wallet * w = const_cast<Wallet*>(this);
+ m_subaddressAccountModel = new SubaddressAccountModel(w,m_subaddressAccount);
+ }
+ return m_subaddressAccountModel;
+}
+
QString Wallet::generatePaymentId() const
{
return QString::fromStdString(Monero::Wallet::genPaymentId());
@@ -858,6 +875,8 @@ Wallet::Wallet(Monero::Wallet *w, QObject *parent)
, m_addressBookModel(nullptr)
, m_subaddress(nullptr)
, m_subaddressModel(nullptr)
+ , m_subaddressAccount(nullptr)
+ , m_subaddressAccountModel(nullptr)
, m_daemonBlockChainHeight(0)
, m_daemonBlockChainHeightTtl(DAEMON_BLOCKCHAIN_HEIGHT_CACHE_TTL_SECONDS)
, m_daemonBlockChainTargetHeight(0)
@@ -868,6 +887,7 @@ Wallet::Wallet(Monero::Wallet *w, QObject *parent)
m_history = new TransactionHistory(m_walletImpl->history(), this);
m_addressBook = new AddressBook(m_walletImpl->addressBook(), this);
m_subaddress = new Subaddress(m_walletImpl->subaddress(), this);
+ m_subaddressAccount = new SubaddressAccount(m_walletImpl->subaddressAccount(), this);
m_walletListener = new WalletListenerImpl(this);
m_walletImpl->setListener(m_walletListener);
m_connectionStatus = Wallet::ConnectionStatus_Disconnected;
@@ -893,6 +913,8 @@ Wallet::~Wallet()
m_addressBook = NULL;
delete m_subaddress;
m_subaddress = NULL;
+ delete m_subaddressAccount;
+ m_subaddressAccount = NULL;
//Monero::WalletManagerFactory::getWalletManager()->closeWallet(m_walletImpl);
if(status() == Status_Critical)
qDebug("Not storing wallet cache");
diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h
index 8197e567..e3357528 100644
--- a/src/libwalletqt/Wallet.h
+++ b/src/libwalletqt/Wallet.h
@@ -24,6 +24,8 @@ class AddressBook;
class AddressBookModel;
class Subaddress;
class SubaddressModel;
+class SubaddressAccount;
+class SubaddressAccountModel;
class Wallet : public QObject
{
@@ -44,6 +46,8 @@ class Wallet : public QObject
Q_PROPERTY(AddressBook * addressBook READ addressBook)
Q_PROPERTY(SubaddressModel * subaddressModel READ subaddressModel)
Q_PROPERTY(Subaddress * subaddress READ subaddress)
+ Q_PROPERTY(SubaddressAccountModel * subaddressAccountModel READ subaddressAccountModel)
+ Q_PROPERTY(SubaddressAccount * subaddressAccount READ subaddressAccount)
Q_PROPERTY(bool viewOnly READ viewOnly)
Q_PROPERTY(QString secretViewKey READ getSecretViewKey)
Q_PROPERTY(QString publicViewKey READ getPublicViewKey)
@@ -234,6 +238,12 @@ public:
//! returns subadress model
SubaddressModel *subaddressModel();
+ //! returns subaddress account
+ SubaddressAccount *subaddressAccount() const;
+
+ //! returns subadress account model
+ SubaddressAccountModel *subaddressAccountModel() const;
+
//! generate payment id
Q_INVOKABLE QString generatePaymentId() const;
@@ -348,6 +358,8 @@ private:
mutable AddressBookModel * m_addressBookModel;
Subaddress * m_subaddress;
mutable SubaddressModel * m_subaddressModel;
+ SubaddressAccount * m_subaddressAccount;
+ mutable SubaddressAccountModel * m_subaddressAccountModel;
QMutex m_connectionStatusMutex;
bool m_connectionStatusRunning;
QString m_daemonUsername;
diff --git a/src/model/SubaddressAccountModel.cpp b/src/model/SubaddressAccountModel.cpp
new file mode 100644
index 00000000..fa2ce0b2
--- /dev/null
+++ b/src/model/SubaddressAccountModel.cpp
@@ -0,0 +1,66 @@
+#include "SubaddressAccountModel.h"
+#include "SubaddressAccount.h"
+#include <QDebug>
+#include <QHash>
+#include <wallet/api/wallet2_api.h>
+
+SubaddressAccountModel::SubaddressAccountModel(QObject *parent, SubaddressAccount *subaddressAccount)
+ : QAbstractListModel(parent), m_subaddressAccount(subaddressAccount)
+{
+ qDebug(__FUNCTION__);
+ connect(m_subaddressAccount,SIGNAL(refreshStarted()),this,SLOT(startReset()));
+ connect(m_subaddressAccount,SIGNAL(refreshFinished()),this,SLOT(endReset()));
+}
+
+void SubaddressAccountModel::startReset(){
+ qDebug("SubaddressAccountModel::startReset");
+ beginResetModel();
+}
+void SubaddressAccountModel::endReset(){
+ qDebug("SubaddressAccountModel::endReset");
+ endResetModel();
+}
+
+int SubaddressAccountModel::rowCount(const QModelIndex &parent) const
+{
+ return m_subaddressAccount->count();
+}
+
+QVariant SubaddressAccountModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid() || index.row() < 0 || (unsigned)index.row() >= m_subaddressAccount->count())
+ return {};
+
+ Monero::SubaddressAccountRow * sr = m_subaddressAccount->getRow(index.row());
+
+ QVariant result = "";
+ switch (role) {
+ case SubaddressAccountAddressRole:
+ result = QString::fromStdString(sr->getAddress());
+ break;
+ case SubaddressAccountLabelRole:
+ result = QString::fromStdString(sr->getLabel());
+ break;
+ case SubaddressAccountBalanceRole:
+ result = QString::fromStdString(sr->getBalance());
+ break;
+ case SubaddressAccountUnlockedBalanceRole:
+ result = QString::fromStdString(sr->getUnlockedBalance());
+ break;
+ }
+
+ return result;
+}
+
+QHash<int, QByteArray> SubaddressAccountModel::roleNames() const
+{
+ static QHash<int, QByteArray> roleNames;
+ if (roleNames.empty())
+ {
+ roleNames.insert(SubaddressAccountAddressRole, "address");
+ roleNames.insert(SubaddressAccountLabelRole, "label");
+ roleNames.insert(SubaddressAccountBalanceRole, "balance");
+ roleNames.insert(SubaddressAccountUnlockedBalanceRole, "unlockedBalance");
+ }
+ return roleNames;
+}
diff --git a/src/model/SubaddressAccountModel.h b/src/model/SubaddressAccountModel.h
new file mode 100644
index 00000000..e78a3f84
--- /dev/null
+++ b/src/model/SubaddressAccountModel.h
@@ -0,0 +1,36 @@
+#ifndef SUBADDRESSACCOUNTMODEL_H
+#define SUBADDRESSACCOUNTMODEL_H
+
+#include <QAbstractListModel>
+
+class SubaddressAccount;
+
+class SubaddressAccountModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ enum SubaddressAccountRowRole {
+ SubaddressAccountRole = Qt::UserRole + 1, // for the SubaddressAccountRow object;
+ SubaddressAccountAddressRole,
+ SubaddressAccountLabelRole,
+ SubaddressAccountBalanceRole,
+ SubaddressAccountUnlockedBalanceRole,
+ };
+ Q_ENUM(SubaddressAccountRowRole)
+
+ SubaddressAccountModel(QObject *parent, SubaddressAccount *subaddressAccount);
+
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ QHash<int, QByteArray> roleNames() const override;
+
+public slots:
+ void startReset();
+ void endReset();
+
+private:
+ SubaddressAccount *m_subaddressAccount;
+};
+
+#endif // SUBADDRESSACCOUNTMODEL_H