#include <QtWidgets/QStyle>
#include <QPushButton>
+#include "constants.h"
+#include "networktype.h"
#include "utils.h"
+#include "utils/ColorScheme.h"
#include "utils/config.h"
#include "utils/os/tails.h"
#include "utils/os/whonix.h"
-#include "utils/ColorScheme.h"
-#include "constants.h"
QByteArray Utils::fileGetContents(const QString &path)
{
#elif defined(Q_OS_WIN)
return QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/Monero/wallets";
#endif
+}
+
+quint16 Utils::getDefaultRpcPort(NetworkType::Type type) {
+ switch (type) {
+ case NetworkType::Type::MAINNET:
+ return 18081;
+ case NetworkType::Type::TESTNET:
+ return 28081;
+ case NetworkType::Type::STAGENET:
+ return 38081;
+ }
+ return 18081;
}
\ No newline at end of file
#include "PageNetwork.h"
#include "ui_PageNetwork.h"
-#include "WalletWizard.h"
+
+#include <QtConcurrent/QtConcurrent>
+
#include "constants.h"
+#include "utils.h"
+#include "WalletWizard.h"
PageNetwork::PageNetwork(QWidget *parent)
: QWizardPage(parent)
, ui(new Ui::PageNetwork)
+ , m_portOpenWatcher(new QFutureWatcher<QPair<bool, QString>>(this))
{
ui->setupUi(this);
this->setTitle("Welcome to Feather");
+ ui->frame_nodeDetected->hide();
ui->frame_customNode->hide();
- ui->btnGroup_network->setId(ui->radio_autoConnect, 0);
- ui->btnGroup_network->setId(ui->radio_custom, 1);
+ ui->btnGroup_network->setId(ui->radio_autoConnect, Button::AUTO);
+ ui->btnGroup_network->setId(ui->radio_custom, Button::CUSTOM);
+
+ QPixmap infoIcon = QPixmap(":/assets/images/info2.svg");
+ ui->infoIcon->setPixmap(infoIcon.scaledToWidth(32, Qt::SmoothTransformation));
connect(ui->btnGroup_network, &QButtonGroup::idClicked, [this](int id) {
- ui->frame_customNode->setVisible(id == 1);
+ ui->frame_customNode->setVisible(id == Button::CUSTOM);
});
connect(ui->line_customNode, &QLineEdit::textEdited, [this]{
this->completeChanged();
});
+
+ connect(m_portOpenWatcher, &QFutureWatcher<QPair<bool, QString>>::finished, [this](){
+ auto res = m_portOpenWatcher->result();
+ bool nodeFound = res.first;
+ if (nodeFound) {
+ ui->frame_nodeDetected->show();
+ ui->label_nodeDetected->setText(QString("Feather detected a local node on %1").arg(res.second));
+
+ ui->btnGroup_network->button(Button::CUSTOM)->click();
+ ui->line_customNode->setText(res.second);
+ }
+ });
+
+ QFuture<QPair<bool, QString>> portOpen = QtConcurrent::run([]{
+ QString localhost = "127.0.0.1";
+ quint16 port = Utils::getDefaultRpcPort(constants::networkType);
+ return QPair<bool, QString>{Utils::portOpen(localhost, port), QString("%1:%2").arg(localhost, QString::number(port))};
+ });
+ m_portOpenWatcher->setFuture(portOpen);
}
int PageNetwork::nextId() const {
int id = ui->btnGroup_network->checkedId();
config()->set(Config::nodeSource, id);
- if (id == 1) {
+ if (id == Button::CUSTOM) {
NodeList nodeList;
nodeList.addNode(ui->line_customNode->text(), constants::networkType, NodeList::Type::custom);
}
}
bool PageNetwork::isComplete() const {
- if (ui->btnGroup_network->checkedId() == 0) {
+ if (ui->btnGroup_network->checkedId() == Button::AUTO) {
return true;
}
</item>
</layout>
</item>
+ <item>
+ <widget class="QFrame" name="frame_nodeDetected">
+ <property name="frameShape">
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="infoIcon">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>icon</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>5</width>
+ <height>0</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_nodeDetected">
+ <property name="text">
+ <string>Feather detected a local node on port 18081.</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>