Skip to content

Commit

Permalink
add support for storaging hosts.
Browse files Browse the repository at this point in the history
  • Loading branch information
WanMotion committed Sep 18, 2022
1 parent 453a664 commit 0211fa1
Show file tree
Hide file tree
Showing 4 changed files with 69 additions and 43 deletions.
8 changes: 1 addition & 7 deletions LANDrop/addhostsmanuldialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,19 +28,13 @@ void AddHostsManulDialog::accept()
tr("Invalid Host"));
return;
}
QHostAddress hostAddr(host);
if(hostAddr.isNull()){
QMessageBox::critical(this, QApplication::applicationName(),
tr("Invalid Host"));
return;
}
bool ok;
quint16 port=ui->portLineEdit->text().toUShort(&ok);
if(!ok){
QMessageBox::critical(this, QApplication::applicationName(),
tr("Invalid port. Please enter a number between 1 and 65535."));
return;
}
emit addHostManully(deviceName,hostAddr,port);
emit addHostManully(deviceName,host,port);
this->setVisible(false);
}
2 changes: 1 addition & 1 deletion LANDrop/addhostsmanuldialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class AddHostsManulDialog : public QDialog
Ui::AddHostsManulDialog *ui;

signals:
void addHostManully(const QString &deviceName, const QHostAddress &addr, quint16 port);
void addHostManully(const QString &deviceName, const QString &addr, quint16 port);
private slots:
void accept();
};
Expand Down
94 changes: 61 additions & 33 deletions LANDrop/sendtodialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,15 @@

#include <QMessageBox>
#include <QPushButton>
#include <QJsonDocument>

#include "filetransferdialog.h"
#include "filetransfersender.h"
#include "sendtodialog.h"
#include "ui_sendtodialog.h"

#define HOST_MANUL_FILE "hosts.json"

SendToDialog::SendToDialog(QWidget *parent, const QList<QSharedPointer<QFile>> &files,
DiscoveryService &discoveryService) :
QDialog(parent), ui(new Ui::SendToDialog), files(files)
Expand Down Expand Up @@ -75,6 +78,35 @@ SendToDialog::SendToDialog(QWidget *parent, const QList<QSharedPointer<QFile>> &

connect(&socketTimeoutTimer, &QTimer::timeout, this, &SendToDialog::socketTimeout);
socketTimeoutTimer.setSingleShot(true);

// read hosts file
QFile file(HOST_MANUL_FILE);
if(file.exists()&&!file.open(QIODevice::ReadOnly)){
QMessageBox::critical(this, QApplication::applicationName(),
tr("Error! When open hosts.json!"));
return;
}
if(!file.exists()){
return;
}
QByteArray data(file.readAll());
file.close();
QJsonParseError jsonErr;
QJsonDocument jsonDoc=QJsonDocument::fromJson(data,&jsonErr);
if(jsonErr.error!=QJsonParseError::NoError){
QMessageBox::critical(this, QApplication::applicationName(),
tr("Parse json Failed!"));
return;
}
jsonObj=jsonDoc.object();
QStringList l=hostsManulStringListModel.stringList();
for(QJsonObject::iterator iter=jsonObj.begin();iter!=jsonObj.end();iter++){
l.append(iter.key());
QString addr=iter.value().toObject().value("host").toString();
quint16 port=iter.value().toObject().value("port").toInt();
endpointsManul.push_back({addr,port});
}
hostsManulStringListModel.setStringList(l);
}

SendToDialog::~SendToDialog()
Expand All @@ -88,7 +120,7 @@ void SendToDialog::newHost(const QString &deviceName, const QHostAddress &addr,
QStringList l = hostsStringListModel.stringList();
if (port == 0) {
for (int i = 0; i < endpoints.size(); ++i) {
if (endpoints[i].addr.isEqual(addr)) {
if (endpoints[i].addr==addr.toString()) {
endpoints.removeAt(i);
l.removeAt(i);
hostsStringListModel.setStringList(l);
Expand All @@ -98,7 +130,7 @@ void SendToDialog::newHost(const QString &deviceName, const QHostAddress &addr,
return;
}
for (int i = 0; i < endpoints.size(); ++i) {
if (endpoints[i].addr.isEqual(addr)) {
if (endpoints[i].addr==addr.toString()) {
if (l.at(i) != deviceName) {
l.replace(i, deviceName);
hostsStringListModel.setStringList(l);
Expand All @@ -107,18 +139,15 @@ void SendToDialog::newHost(const QString &deviceName, const QHostAddress &addr,
return;
}
}
endpoints.append({addr, port});
endpoints.append({addr.toString(), port});
l.append(deviceName);
hostsStringListModel.setStringList(l);
}

void SendToDialog::hostsListViewClicked(const QModelIndex &index)
{
Endpoint endpoint = endpoints[index.row()];
bool isV4;
quint32 ipv4 = endpoint.addr.toIPv4Address(&isV4);
QString addr = isV4 ? QHostAddress(ipv4).toString() : endpoint.addr.toString();
ui->addrLineEdit->setText(addr);
ui->addrLineEdit->setText(endpoints[index.row()].addr);
ui->portLineEdit->setText(QString::number(endpoint.port));
}

Expand Down Expand Up @@ -182,10 +211,7 @@ void SendToDialog::socketTimeout()
void SendToDialog::hostsListViewManulClicked(const QModelIndex &index)
{
Endpoint endpoint = endpointsManul[index.row()];
bool isV4;
quint32 ipv4 = endpoint.addr.toIPv4Address(&isV4);
QString addr = isV4 ? QHostAddress(ipv4).toString() : endpoint.addr.toString();
ui->addrLineEdit->setText(addr);
ui->addrLineEdit->setText(endpointsManul[index.row()].addr);
ui->portLineEdit->setText(QString::number(endpoint.port));
ui->deleteButton->setEnabled(true);
}
Expand All @@ -195,41 +221,43 @@ void SendToDialog::showAddHostsManulDialog()
addHostDialog->setVisible(true);
}

void SendToDialog::addHostManul(const QString &deviceName, const QHostAddress &addr, quint16 port)
void SendToDialog::addHostManul(const QString &deviceName, const QString &addr, quint16 port)
{
QStringList l = hostsManulStringListModel.stringList();
if (port == 0) {
for (int i = 0; i < endpointsManul.size(); ++i) {
if (endpointsManul[i].addr.isEqual(addr)) {
endpointsManul.removeAt(i);
l.removeAt(i);
hostsManulStringListModel.setStringList(l);
return;
}
}
return;
}
for (int i = 0; i < endpointsManul.size(); ++i) {
if (endpointsManul[i].addr.isEqual(addr)) {
if (l.at(i) != deviceName) {
l.replace(i, deviceName);
hostsManulStringListModel.setStringList(l);
}
endpointsManul[i].port = port;
return;
}
}
QJsonValue addrValue(addr);
QJsonValue portValue(port);
QJsonObject obj;
obj["host"]=addrValue;
obj["port"]=portValue;
jsonObj[deviceName]=obj;
endpointsManul.append({addr, port});
l.append(deviceName);
hostsManulStringListModel.setStringList(l);
writeHostsJson();
}

void SendToDialog::onDeleteButtonClicked()
{
QModelIndex index=ui->hostsListViewManul->currentIndex();
jsonObj.remove(hostsManulStringListModel.stringList().at(index.row()));
hostsManulStringListModel.removeRow(index.row());
endpointsManul.removeAt(index.row());
ui->addrLineEdit->setText("");
ui->portLineEdit->setText("");
ui->deleteButton->setEnabled(false);
writeHostsJson();
}

void SendToDialog::writeHostsJson()
{
QFile file(HOST_MANUL_FILE);
if(!file.open(QIODevice::WriteOnly)){
QMessageBox::critical(this, QApplication::applicationName(),
tr("Error! When open hosts.json!"));
return;
}
QJsonDocument jsonDoc(jsonObj);
QByteArray data=jsonDoc.toJson();
file.write(data);
file.close();
}
8 changes: 6 additions & 2 deletions LANDrop/sendtodialog.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
#include <QStringListModel>
#include <QTcpSocket>
#include <QTimer>
#include <QJsonObject>

#include "discoveryservice.h"
#include "addhostsmanuldialog.h"
Expand All @@ -57,7 +58,7 @@ class SendToDialog : public QDialog {
QStringListModel hostsStringListModel;
QStringListModel hostsManulStringListModel;
struct Endpoint {
QHostAddress addr;
QString addr;
quint16 port;
};
QVector<Endpoint> endpoints;
Expand All @@ -66,6 +67,9 @@ class SendToDialog : public QDialog {
QTcpSocket *socket;
QTimer socketTimeoutTimer;
AddHostsManulDialog *addHostDialog;
QJsonObject jsonObj;

void writeHostsJson();

private slots:
void newHost(const QString &deviceName, const QHostAddress &addr, quint16 port);
Expand All @@ -76,6 +80,6 @@ private slots:
void socketTimeout();
void hostsListViewManulClicked(const QModelIndex &index);
void showAddHostsManulDialog();
void addHostManul(const QString &deviceName, const QHostAddress &addr, quint16 port);
void addHostManul(const QString &deviceName, const QString &addr, quint16 port);
void onDeleteButtonClicked();
};

0 comments on commit 0211fa1

Please sign in to comment.