171 - Validate address
This commit is contained in:
parent
df1cbe6570
commit
1219651f76
|
@ -1,6 +1,7 @@
|
|||
#include "mainwindow.h"
|
||||
#include "addressbook.h"
|
||||
#include "viewalladdresses.h"
|
||||
#include "validateaddress.h"
|
||||
#include "ui_mainwindow.h"
|
||||
#include "ui_mobileappconnector.h"
|
||||
#include "ui_addressbook.h"
|
||||
|
@ -11,6 +12,7 @@
|
|||
#include "ui_turnstile.h"
|
||||
#include "ui_turnstileprogress.h"
|
||||
#include "ui_viewalladdresses.h"
|
||||
#include "ui_validateaddress.h"
|
||||
#include "rpc.h"
|
||||
#include "balancestablemodel.h"
|
||||
#include "settings.h"
|
||||
|
@ -83,6 +85,9 @@ MainWindow::MainWindow(QWidget *parent) :
|
|||
// z-Board.net
|
||||
QObject::connect(ui->actionz_board_net, &QAction::triggered, this, &MainWindow::postToZBoard);
|
||||
|
||||
// Validate Address
|
||||
QObject::connect(ui->actionValidate_Address, &QAction::triggered, this, &MainWindow::validateAddress);
|
||||
|
||||
// Connect mobile app
|
||||
QObject::connect(ui->actionConnect_Mobile_App, &QAction::triggered, this, [=] () {
|
||||
if (rpc->getConnection() == nullptr)
|
||||
|
@ -644,6 +649,48 @@ void MainWindow::donate() {
|
|||
ui->tabWidget->setCurrentIndex(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate an address
|
||||
*/
|
||||
void MainWindow::validateAddress() {
|
||||
// Make sure everything is up and running
|
||||
if (!getRPC() || !getRPC()->getConnection())
|
||||
return;
|
||||
|
||||
// First thing is ask the user for an address
|
||||
bool ok;
|
||||
auto address = QInputDialog::getText(this, tr("Enter Address to validate"),
|
||||
tr("Transparent or Shielded Address:") + QString(" ").repeated(140), // Pad the label so the dialog box is wide enough
|
||||
QLineEdit::Normal, "", &ok);
|
||||
if (!ok)
|
||||
return;
|
||||
|
||||
getRPC()->validateAddress(address, [=] (json props) {
|
||||
QDialog d(this);
|
||||
Ui_ValidateAddress va;
|
||||
va.setupUi(&d);
|
||||
Settings::saveRestore(&d);
|
||||
Settings::saveRestoreTableHeader(va.tblProps, &d, "validateaddressprops");
|
||||
va.tblProps->horizontalHeader()->setStretchLastSection(true);
|
||||
|
||||
va.lblAddress->setText(address);
|
||||
|
||||
QList<QPair<QString, QString>> propsList;
|
||||
for (auto it = props.begin(); it != props.end(); it++) {
|
||||
|
||||
propsList.append(
|
||||
QPair<QString, QString>(
|
||||
QString::fromStdString(it.key()), QString::fromStdString(it.value().dump()))
|
||||
);
|
||||
}
|
||||
|
||||
ValidateAddressesModel model(va.tblProps, propsList);
|
||||
va.tblProps->setModel(&model);
|
||||
|
||||
d.exec();
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::postToZBoard() {
|
||||
QDialog d(this);
|
||||
|
@ -1233,7 +1280,6 @@ void MainWindow::setupTransactionsTab() {
|
|||
}
|
||||
|
||||
void MainWindow::addNewZaddr(bool sapling) {
|
||||
|
||||
rpc->newZaddr(sapling, [=] (json reply) {
|
||||
QString addr = QString::fromStdString(reply.get<json::string_t>());
|
||||
// Make sure the RPC class reloads the z-addrs for future use
|
||||
|
@ -1325,6 +1371,7 @@ void MainWindow::setupReceiveTab() {
|
|||
viewaddrs.setupUi(&d);
|
||||
Settings::saveRestore(&d);
|
||||
Settings::saveRestoreTableHeader(viewaddrs.tblAddresses, &d, "viewalladdressestable");
|
||||
viewaddrs.tblAddresses->horizontalHeader()->setStretchLastSection(true);
|
||||
|
||||
ViewAllAddressesModel model(viewaddrs.tblAddresses, *getRPC()->getAllTAddresses(), getRPC());
|
||||
viewaddrs.tblAddresses->setModel(&model);
|
||||
|
|
|
@ -58,6 +58,8 @@ public:
|
|||
void balancesReady();
|
||||
void payZcashURI(QString uri = "", QString myAddr = "");
|
||||
|
||||
void validateAddress();
|
||||
|
||||
void updateLabels();
|
||||
void updateTAddrCombo(bool checked);
|
||||
void updateFromCombo();
|
||||
|
|
|
@ -1084,6 +1084,7 @@
|
|||
<string>&Apps</string>
|
||||
</property>
|
||||
<addaction name="actionConnect_Mobile_App"/>
|
||||
<addaction name="actionValidate_Address"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionz_board_net"/>
|
||||
<addaction name="actionTurnstile_Migration"/>
|
||||
|
@ -1202,6 +1203,11 @@
|
|||
<string>File a bug...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionValidate_Address">
|
||||
<property name="text">
|
||||
<string>Validate Address</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11"/>
|
||||
<customwidgets>
|
||||
|
|
12
src/rpc.cpp
12
src/rpc.cpp
|
@ -219,6 +219,18 @@ void RPC::importTPrivKey(QString addr, bool rescan, const std::function<void(jso
|
|||
conn->doRPCWithDefaultErrorHandling(payload, cb);
|
||||
}
|
||||
|
||||
void RPC::validateAddress(QString address, const std::function<void(json)>& cb) {
|
||||
QString method = address.startsWith("z") ? "z_validateaddress" : "validateaddress";
|
||||
|
||||
json payload = {
|
||||
{"jsonrpc", "1.0"},
|
||||
{"id", "someid"},
|
||||
{"method", method.toStdString() },
|
||||
{"params", { address.toStdString() } },
|
||||
};
|
||||
|
||||
conn->doRPCWithDefaultErrorHandling(payload, cb);
|
||||
}
|
||||
|
||||
void RPC::getBalance(const std::function<void(json)>& cb) {
|
||||
json payload = {
|
||||
|
|
|
@ -84,6 +84,7 @@ public:
|
|||
void getTPrivKey(QString addr, const std::function<void(json)>& cb);
|
||||
void importZPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb);
|
||||
void importTPrivKey(QString addr, bool rescan, const std::function<void(json)>& cb);
|
||||
void validateAddress(QString address, const std::function<void(json)>& cb);
|
||||
|
||||
void shutdownZcashd();
|
||||
void noConnection();
|
||||
|
@ -121,7 +122,6 @@ private:
|
|||
void getZAddresses (const std::function<void(json)>& cb);
|
||||
void getTAddresses (const std::function<void(json)>& cb);
|
||||
|
||||
|
||||
Connection* conn = nullptr;
|
||||
QProcess* ezcashd = nullptr;
|
||||
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
#include "validateaddress.h"
|
||||
|
||||
|
||||
ValidateAddressesModel::ValidateAddressesModel(QTableView *parent, QList<QPair<QString, QString>> props)
|
||||
: QAbstractTableModel(parent) {
|
||||
headers << tr("Property") << tr("Value");
|
||||
this->props = props;
|
||||
}
|
||||
|
||||
|
||||
int ValidateAddressesModel::rowCount(const QModelIndex&) const {
|
||||
return props.size();
|
||||
}
|
||||
|
||||
int ValidateAddressesModel::columnCount(const QModelIndex&) const {
|
||||
return headers.size();
|
||||
}
|
||||
|
||||
QVariant ValidateAddressesModel::data(const QModelIndex &index, int role) const {
|
||||
QPair<QString, QString> p = props.at(index.row());
|
||||
if (role == Qt::DisplayRole) {
|
||||
switch(index.column()) {
|
||||
case 0: return p.first;
|
||||
case 1: return p.second;
|
||||
}
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
|
||||
QVariant ValidateAddressesModel::headerData(int section, Qt::Orientation orientation, int role) const {
|
||||
if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
|
||||
return headers.at(section);
|
||||
}
|
||||
|
||||
return QVariant();
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
#ifndef VALIDATEADDRESS_H
|
||||
#define VALIDATEADDRESS_H
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
class ValidateAddressesModel : public QAbstractTableModel {
|
||||
|
||||
public:
|
||||
ValidateAddressesModel(QTableView* parent, QList<QPair<QString, QString>> props);
|
||||
~ValidateAddressesModel() = default;
|
||||
|
||||
int rowCount(const QModelIndex &parent) const;
|
||||
int columnCount(const QModelIndex &parent) const;
|
||||
QVariant data(const QModelIndex &index, int role) const;
|
||||
QVariant headerData(int section, Qt::Orientation orientation, int role) const;
|
||||
|
||||
private:
|
||||
QList<QPair<QString, QString>> props;
|
||||
QStringList headers;
|
||||
};
|
||||
|
||||
|
||||
#endif // VALIDATEADDRESS_H
|
|
@ -0,0 +1,85 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>ValidateAddress</class>
|
||||
<widget class="QDialog" name="ValidateAddress">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Validate Address</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="lblAddress">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Address:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QTableView" name="tblProps">
|
||||
<attribute name="horizontalHeaderStretchLastSection">
|
||||
<bool>true</bool>
|
||||
</attribute>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Close</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>accepted()</signal>
|
||||
<receiver>ValidateAddress</receiver>
|
||||
<slot>accept()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>248</x>
|
||||
<y>254</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>157</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>buttonBox</sender>
|
||||
<signal>rejected()</signal>
|
||||
<receiver>ValidateAddress</receiver>
|
||||
<slot>reject()</slot>
|
||||
<hints>
|
||||
<hint type="sourcelabel">
|
||||
<x>316</x>
|
||||
<y>260</y>
|
||||
</hint>
|
||||
<hint type="destinationlabel">
|
||||
<x>286</x>
|
||||
<y>274</y>
|
||||
</hint>
|
||||
</hints>
|
||||
</connection>
|
||||
</connections>
|
||||
</ui>
|
|
@ -53,6 +53,7 @@ SOURCES += \
|
|||
src/addressbook.cpp \
|
||||
src/logger.cpp \
|
||||
src/addresscombo.cpp \
|
||||
src/validateaddress.cpp \
|
||||
src/websockets.cpp \
|
||||
src/mobileappconnector.cpp \
|
||||
src/recurring.cpp \
|
||||
|
@ -79,6 +80,7 @@ HEADERS += \
|
|||
src/addressbook.h \
|
||||
src/logger.h \
|
||||
src/addresscombo.h \
|
||||
src/validateaddress.h \
|
||||
src/websockets.h \
|
||||
src/mobileappconnector.h \
|
||||
src/recurring.h \
|
||||
|
@ -97,6 +99,7 @@ FORMS += \
|
|||
src/turnstileprogress.ui \
|
||||
src/privkey.ui \
|
||||
src/memodialog.ui \
|
||||
src/validateaddress.ui \
|
||||
src/viewalladdresses.ui \
|
||||
src/connection.ui \
|
||||
src/zboard.ui \
|
||||
|
|
Loading…
Reference in New Issue