Contacts: import via csv file

This commit is contained in:
mrdeveloper 2020-10-21 08:25:02 +02:00
parent 49f072eea4
commit 78516f4546
5 changed files with 51 additions and 0 deletions

View file

@ -474,6 +474,8 @@ void MainWindow::initMenu() {
Utils::showMessageBox("Address book exported", QString("Address book exported to %1").arg(fn), false); Utils::showMessageBox("Address book exported", QString("Address book exported to %1").arg(fn), false);
}); });
connect(ui->actionImportContactsCSV, &QAction::triggered, this, &MainWindow::importContacts);
// Tools // Tools
connect(ui->actionSignVerify, &QAction::triggered, this, &MainWindow::menuSignVerifyClicked); connect(ui->actionSignVerify, &QAction::triggered, this, &MainWindow::menuSignVerifyClicked);
connect(ui->actionVerifyTxProof, &QAction::triggered, this, &MainWindow::menuVerifyTxProof); connect(ui->actionVerifyTxProof, &QAction::triggered, this, &MainWindow::menuVerifyTxProof);
@ -1045,6 +1047,29 @@ void MainWindow::onAddContact(const QString &address, const QString &name) {
} }
} }
void MainWindow::importContacts() {
const QString targetFile = QFileDialog::getOpenFileName(this, "Import CSV file", QDir::homePath(), "CSV Files (*.csv)");
if(targetFile.isEmpty()) return;
auto *model = m_ctx->currentWallet->addressBookModel();
QMapIterator<QString, QString> i(model->readCSV(targetFile));
int inserts = 0;
while (i.hasNext()) {
i.next();
bool addressValid = WalletManager::addressValid(i.value(), m_ctx->currentWallet->nettype());
if(addressValid) {
m_ctx->currentWallet->addressBook()->addRow(i.value(), "", i.key());
inserts++;
}
}
if(inserts > 0) {
m_ctx->storeWallet();
}
QMessageBox::information(this, "Contacts imported", QString("Total contacts imported: %1").arg(inserts));
}
MainWindow *MainWindow::getInstance() { MainWindow *MainWindow::getInstance() {
return pMainWindow; return pMainWindow;
} }

View file

@ -99,6 +99,7 @@ public slots:
void onWalletOpenPasswordRequired(bool invalidPassword); void onWalletOpenPasswordRequired(bool invalidPassword);
void onViewOnBlockExplorer(const QString &txid); void onViewOnBlockExplorer(const QString &txid);
void onAddContact(const QString &address, const QString &name); void onAddContact(const QString &address, const QString &name);
void importContacts();
void showRestoreHeightDialog(); void showRestoreHeightDialog();
// offline tx signing // offline tx signing

View file

@ -333,6 +333,7 @@
<string>Contacts</string> <string>Contacts</string>
</property> </property>
<addaction name="actionExportContactsCSV"/> <addaction name="actionExportContactsCSV"/>
<addaction name="actionImportContactsCSV"/>
</widget> </widget>
<widget class="QMenu" name="menuAdvanced"> <widget class="QMenu" name="menuAdvanced">
<property name="title"> <property name="title">
@ -538,6 +539,11 @@
<string>Refresh models</string> <string>Refresh models</string>
</property> </property>
</action> </action>
<action name="actionImportContactsCSV">
<property name="text">
<string>Import CSV</string>
</property>
</action>
<action name="actionExportContactsCSV"> <action name="actionExportContactsCSV">
<property name="text"> <property name="text">
<string>Export CSV</string> <string>Export CSV</string>

View file

@ -174,3 +174,21 @@ bool AddressBookModel::writeCSV(const QString &path) {
csv = QString("address,description\n%1").arg(csv); csv = QString("address,description\n%1").arg(csv);
return Utils::fileWrite(path, csv); return Utils::fileWrite(path, csv);
} }
QMap<QString, QString> AddressBookModel::readCSV(const QString &path) {
if(!Utils::fileExists(path)) {
return QMap<QString, QString>();
}
QString csv = Utils::barrayToString(Utils::fileOpen(path));
QTextStream stream(&csv);
QMap<QString, QString> map;
while(!stream.atEnd()) {
QStringList line = stream.readLine().split(",");
QString name = line.at(0);
QString address = line.at(1);
if(!name.isEmpty() && !address.isEmpty()) {
map[name] = address;
}
}
return map;
}

View file

@ -36,6 +36,7 @@ public:
bool isShowFullAddresses() const; bool isShowFullAddresses() const;
void setShowFullAddresses(bool show); void setShowFullAddresses(bool show);
bool writeCSV(const QString &path); bool writeCSV(const QString &path);
QMap<QString, QString> readCSV(const QString &path);
public slots: public slots:
void startReset(); void startReset();