this->bringToFront();
this->setEnabled(true);
- if (!torManager()->torConnected)
- this->setStatusText("Starting Tor (may take a while)");
// receive page
m_ctx->wallet->subaddress()->refresh(m_ctx->wallet->currentSubaddressAccount());
#include "Icons.h"
#include "utils/WebsocketNotifier.h"
+#include "utils/NetworkManager.h"
Settings::Settings(QSharedPointer<AppContext> ctx, QWidget *parent)
: QDialog(parent)
connect(ui->spinBox_inactivityLockTimeout, QOverload<int>::of(&QSpinBox::valueChanged), [](int value){
config()->set(Config::inactivityLockTimeout, value);
});
- connect(ui->checkBox_disableWebsocket, &QCheckBox::toggled, [this](bool toggled){
- config()->set(Config::disableWebsocket, toggled);
- if (toggled) {
- websocketNotifier()->websocketClient.stop();
- } else {
- websocketNotifier()->websocketClient.restart();
- }
+ connect(ui->checkBox_disableWebsocket, &QCheckBox::toggled, [this](bool checked){
+ config()->set(Config::disableWebsocket, checked);
+ this->enableWebsocket(checked);
+ });
+ connect(ui->checkBox_offlineMode, &QCheckBox::toggled, [this](bool checked){
+ config()->set(Config::offlineMode, checked);
+ m_ctx->wallet->setOffline(checked);
+ this->enableWebsocket(checked);
});
connect(ui->closeButton, &QDialogButtonBox::accepted, this, &Settings::close);
ui->checkBox_inactivityLockTimeout->setChecked(config()->get(Config::inactivityLockEnabled).toBool());
ui->spinBox_inactivityLockTimeout->setValue(config()->get(Config::inactivityLockTimeout).toInt());
ui->checkBox_disableWebsocket->setChecked(config()->get(Config::disableWebsocket).toBool());
+ ui->checkBox_offlineMode->setChecked(config()->get(Config::offlineMode).toBool());
// setup comboboxes
this->setupSkinCombobox();
ui->combo_localMoneroFrontend->setCurrentIndex(ui->combo_localMoneroFrontend->findData(config()->get(Config::localMoneroFrontend).toString()));
}
+void Settings::enableWebsocket(bool enabled) {
+ if (enabled && !config()->get(Config::offlineMode).toBool() && !config()->get(Config::disableWebsocket).toBool()) {
+ websocketNotifier()->websocketClient.restart();
+ } else {
+ websocketNotifier()->websocketClient.stop();
+ }
+}
+
Settings::~Settings() = default;
\ No newline at end of file
private:
void setupSkinCombobox();
void setupLocalMoneroFrontendCombobox();
+ void enableWebsocket(bool enabled);
QScopedPointer<Ui::Settings> ui;
QSharedPointer<AppContext> m_ctx;
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
- <number>0</number>
+ <number>1</number>
</property>
<widget class="QWidget" name="tab_general">
<attribute name="title">
</item>
</layout>
</item>
+ <item>
+ <widget class="QCheckBox" name="checkBox_offlineMode">
+ <property name="text">
+ <string>Offline mode</string>
+ </property>
+ </widget>
+ </item>
<item>
<spacer name="verticalSpacer_4">
<property name="orientation">
if (!m_initialNetworkConfigured) {
m_initialNetworkConfigured = true;
appData();
+
this->initTor();
this->initWS();
}
}
void WindowManager::initWS() {
+ if (config()->get(Config::offlineMode).toBool()) {
+ return;
+ }
+
if (config()->get(Config::disableWebsocket).toBool()) {
return;
}
}
}();
- ui->label_netType->setText(Utils::QtEnumToString(m_ctx->wallet->nettype()));
+ QString networkType = Utils::QtEnumToString(m_ctx->wallet->nettype());
+ if (config()->get(Config::offlineMode).toBool()) {
+ networkType += " (offline)";
+ }
+ ui->label_netType->setText(networkType);
ui->label_seedType->setText(seedType);
ui->label_deviceType->setText(deviceType);
ui->label_viewOnly->setText(m_ctx->wallet->viewOnly() ? "True" : "False");
return status == ConnectionStatus_Synchronizing || status == ConnectionStatus_Synchronized;
}
+void Wallet::setOffline(bool offline) const
+{
+ return m_walletImpl->setOffline(offline);
+}
+
QString Wallet::errorString() const
{
return QString::fromStdString(m_walletImpl->errorString());
//! return true if wallet is connected to a node
bool isConnected() const;
+ void setOffline(bool offline) const;
+
//! returns last operation's error message
QString errorString() const;
return true;
}
-bool portOpen(const QString &hostname, quint16 port){
+bool portOpen(const QString &hostname, quint16 port) { // TODO: this call should be async
+ if (config()->get(Config::offlineMode).toBool()) {
+ return false;
+ }
+
QTcpSocket socket;
socket.connectToHost(hostname, port);
return socket.waitForConnected(600);
{Config::inactivityLockEnabled, {QS("inactivityLockEnabled"), false}},
{Config::inactivityLockTimeout, {QS("inactivityLockTimeout"), 10}},
{Config::disableWebsocket, {QS("disableWebsocket"), false}},
+ {Config::offlineMode, {QS("offlineMode"), false}},
{Config::multiBroadcast, {QS("multiBroadcast"), true}},
{Config::warnOnExternalLink,{QS("warnOnExternalLink"), true}},
inactivityLockEnabled,
inactivityLockTimeout,
disableWebsocket,
+ offlineMode,
multiBroadcast,
warnOnExternalLink,
#include "utils/Utils.h"
#include "utils/networking.h"
+#include "config.h"
-UtilsNetworking::UtilsNetworking(QNetworkAccessManager *networkAccessManager, QObject *parent) :
- QObject(parent),
- m_networkAccessManager(networkAccessManager) {}
+UtilsNetworking::UtilsNetworking(QNetworkAccessManager *networkAccessManager, QObject *parent)
+ : QObject(parent)
+ , m_networkAccessManager(networkAccessManager) {}
void UtilsNetworking::setUserAgent(const QString &userAgent) {
this->m_userAgent = userAgent;
}
QNetworkReply* UtilsNetworking::get(const QString &url) {
+ if (config()->get(Config::offlineMode).toBool()) {
+ return nullptr;
+ }
+
QNetworkRequest request;
request.setUrl(QUrl(url));
request.setRawHeader("User-Agent", m_userAgent.toUtf8());
}
QNetworkReply* UtilsNetworking::getJson(const QString &url) {
+ if (config()->get(Config::offlineMode).toBool()) {
+ return nullptr;
+ }
+
QNetworkRequest request;
request.setUrl(QUrl(url));
request.setRawHeader("User-Agent", m_userAgent.toUtf8());
}
QNetworkReply* UtilsNetworking::postJson(const QString &url, const QJsonObject &data) {
+ if (config()->get(Config::offlineMode).toBool()) {
+ return nullptr;
+ }
+
QNetworkRequest request;
request.setUrl(QUrl(url));
request.setRawHeader("User-Agent", m_userAgent.toUtf8());
if (!node.isValid())
return;
+ if (config()->get(Config::offlineMode).toBool()) {
+ return;
+ }
+
emit updateStatus(QString("Connecting to %1").arg(node.toAddress()));
qInfo() << QString("Attempting to connect to %1 (%2)").arg(node.toAddress()).arg(node.custom ? "custom" : "ws");