Add batch creation of addresses and export of addresses

This commit is contained in:
Stig Atle Steffensen 2025-03-11 21:11:07 +01:00
parent 055b898c85
commit 714e3449a7
3 changed files with 57 additions and 4 deletions

View file

@ -4,6 +4,7 @@
#include "ReceiveWidget.h"
#include "ui_ReceiveWidget.h"
#include <QFileDialog>
#include <QMenu>
#include "dialog/PaymentRequestDialog.h"
@ -80,6 +81,7 @@ ReceiveWidget::ReceiveWidget(Wallet *wallet, QWidget *parent)
connect(ui->btn_generateSubaddress, &QPushButton::clicked, this, &ReceiveWidget::generateSubaddress);
connect(ui->btn_createPaymentRequest, &QPushButton::clicked, this, &ReceiveWidget::createPaymentRequest);
connect(ui->btn_exportSubAddresses, &QPushButton::clicked, this, &ReceiveWidget::exportSubaddresses);
}
void ReceiveWidget::addOption(QMenu *menu, const QString &text, Config::ConfigKey key, const std::function<void(bool show)>& func) {
@ -220,9 +222,39 @@ void ReceiveWidget::showOnDevice() {
}
void ReceiveWidget::generateSubaddress() {
bool r = m_wallet->subaddress()->addRow(m_wallet->currentSubaddressAccount(), "");
if (!r) {
Utils::showError(this, "Failed to generate subaddress", m_wallet->subaddress()->getError());
int numSubaddressesToGenerate = ui->spn_numBatchSubaddresses->value();
for (int subAddressIndex = 0; subAddressIndex < numSubaddressesToGenerate; subAddressIndex++) {
bool r = m_wallet->subaddress()->addRow(m_wallet->currentSubaddressAccount(), "");
if (!r) {
Utils::showError(this, "Failed to generate subaddress", m_wallet->subaddress()->getError());
//Stop the loop on first error, to prevent multiple errors if we batch create more than 1 address.
subAddressIndex = numSubaddressesToGenerate;
}
}
}
void ReceiveWidget::exportSubaddresses() {
QFileDialog exportAddressesdialog;
exportAddressesdialog.setAcceptMode(QFileDialog::AcceptSave);
exportAddressesdialog.setDirectory(".");
exportAddressesdialog.selectFile("Addresses.txt");
if (exportAddressesdialog.exec()) {
QString fileName = exportAddressesdialog.selectedFiles().first();
QFile file(fileName);
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
Utils::showError(this, "Failed to export subaddress", "Could not export subaddresses to file.");
}
QTextStream stream(&file);
for (int i = 0; i < m_wallet->numSubaddresses(m_wallet->currentSubaddressAccount()); i++) {
QString address = this->getAddress(i);
stream << address << "\n";
}
file.close();
}
}
@ -263,4 +295,4 @@ SubaddressRow* ReceiveWidget::currentEntry() {
}
}
ReceiveWidget::~ReceiveWidget() = default;
ReceiveWidget::~ReceiveWidget() = default;

View file

@ -46,6 +46,7 @@ private slots:
void showHeaderMenu(const QPoint& position);
void showOnDevice();
void generateSubaddress();
void exportSubaddresses();
private:
QScopedPointer<Ui::ReceiveWidget> ui;

View file

@ -127,6 +127,19 @@
</property>
</spacer>
</item>
<item>
<widget class="QSpinBox" name="spn_numBatchSubaddresses">
<property name="toolTip">
<string>Number of addresses to generate.</string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_generateSubaddress">
<property name="text">
@ -134,6 +147,13 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btn_exportSubAddresses">
<property name="text">
<string>Export addresses</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>