From 7d70ace5a2d4d59c09e994ad3d10f7ddeaba9924 Mon Sep 17 00:00:00 2001 From: nonlin-lin-chaos-order-etc-etal Date: Sun, 25 Dec 2022 03:31:17 +0800 Subject: [PATCH 1/2] Assorted fixes * Fix for wrong QSharedPointer usage * Catch exceptions from Daemon --- src/DaemonQT.cpp | 18 +++++++++--------- src/SaverImpl.cpp | 2 +- src/SaverImpl.h | 7 +++---- src/mainwindow.cpp | 4 ++-- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/src/DaemonQT.cpp b/src/DaemonQT.cpp index 1e45c58..e9bd592 100644 --- a/src/DaemonQT.cpp +++ b/src/DaemonQT.cpp @@ -25,40 +25,40 @@ namespace qt void Worker::startDaemon() { qDebug("Performing daemon start..."); - //try{ + try{ m_Daemon.start(); qDebug("Daemon started."); emit resultReady(false, ""); - /*}catch(std::exception ex){ + }catch(std::exception& ex){ emit resultReady(true, ex.what()); }catch(...){ emit resultReady(true, QObject::tr("Error: unknown exception")); - }*/ + } } void Worker::restartDaemon() { qDebug("Performing daemon restart..."); - //try{ + try{ m_Daemon.restart(); qDebug("Daemon restarted."); emit resultReady(false, ""); - /*}catch(std::exception ex){ + }catch(std::exception& ex){ emit resultReady(true, ex.what()); }catch(...){ emit resultReady(true, QObject::tr("Error: unknown exception")); - }*/ + } } void Worker::stopDaemon() { qDebug("Performing daemon stop..."); - //try{ + try{ m_Daemon.stop(); qDebug("Daemon stopped."); emit resultReady(false, ""); - /*}catch(std::exception ex){ + }catch(std::exception& ex){ emit resultReady(true, ex.what()); }catch(...){ emit resultReady(true, QObject::tr("Error: unknown exception")); - }*/ + } } Controller::Controller(DaemonQTImpl& daemon): diff --git a/src/SaverImpl.cpp b/src/SaverImpl.cpp index 4b22bf4..d0b49c1 100644 --- a/src/SaverImpl.cpp +++ b/src/SaverImpl.cpp @@ -9,7 +9,7 @@ #include "mainwindow.h" -SaverImpl::SaverImpl(MainWindow *mainWindowPtr_, QSharedPointer> configItems_, QSharedPointer> tunnelConfigs_) : +SaverImpl::SaverImpl(MainWindow *mainWindowPtr_, QList* configItems_, std::map* tunnelConfigs_) : configItems(configItems_), tunnelConfigs(tunnelConfigs_), confpath(), tunconfpath(), mainWindowPtr(mainWindowPtr_) {} diff --git a/src/SaverImpl.h b/src/SaverImpl.h index 84c20dd..c034078 100644 --- a/src/SaverImpl.h +++ b/src/SaverImpl.h @@ -6,7 +6,6 @@ #include #include "QList" -#include "QSharedPointer" #include "mainwindow.h" #include "TunnelConfig.h" @@ -18,14 +17,14 @@ class TunnelConfig; class SaverImpl : public Saver { public: - SaverImpl(MainWindow *mainWindowPtr_, QSharedPointer> configItems_, QSharedPointer> tunnelConfigs_); + SaverImpl(MainWindow *mainWindowPtr_, QList* configItems_, std::map* tunnelConfigs_); virtual ~SaverImpl(); virtual bool save(bool reloadAfterSave, const FocusEnum focusOn, const std::string& tunnelNameToFocus, QWidget* widgetToFocus); void setConfPath(QString& confpath_); void setTunnelsConfPath(QString& tunconfpath_); private: - QSharedPointer> configItems; - QSharedPointer> tunnelConfigs; + QList* configItems; + std::map* tunnelConfigs; QString confpath; QString tunconfpath; MainWindow* mainWindowPtr; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index adc0099..020361d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -70,8 +70,8 @@ MainWindow::MainWindow(std::shared_ptr logStream_, QWidget *paren ,tunnelsPageUpdateListener(this) ,saverPtr( new SaverImpl(this, - QSharedPointer>(&configItems), - QSharedPointer>(&tunnelConfigs))) + &configItems, + &tunnelConfigs)) { assert(delayedSaveManagerPtr!=nullptr); From b2e1dc38b1ef77e79277b80e6b5dd2ddb02e695b Mon Sep 17 00:00:00 2001 From: nonlin-lin-chaos-order-etc-etal Date: Sun, 25 Dec 2022 16:36:27 +0800 Subject: [PATCH 2/2] Prevent tunnels.conf save after errors with it. --- src/Saver.h | 2 +- src/SaverImpl.cpp | 8 ++++++-- src/SaverImpl.h | 3 +-- src/mainwindow.cpp | 17 +++++++++++++++++ src/mainwindow.h | 6 ++++++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/Saver.h b/src/Saver.h index bf971fb..44d900a 100644 --- a/src/Saver.h +++ b/src/Saver.h @@ -19,7 +19,7 @@ public: signals: void reloadTunnelsConfigAndUISignal(const QString); - + void showPreventedSaveTunnelsConfMessage(); }; #endif // SAVER_H diff --git a/src/SaverImpl.cpp b/src/SaverImpl.cpp index d0b49c1..5a12c29 100644 --- a/src/SaverImpl.cpp +++ b/src/SaverImpl.cpp @@ -11,7 +11,9 @@ SaverImpl::SaverImpl(MainWindow *mainWindowPtr_, QList* configItems_, std::map* tunnelConfigs_) : configItems(configItems_), tunnelConfigs(tunnelConfigs_), confpath(), tunconfpath(), mainWindowPtr(mainWindowPtr_) -{} +{ + QObject::connect(this, SIGNAL(showPreventedSaveTunnelsConfMessage()), mainWindowPtr, SLOT(showTunnelsPagePreventedMessage())); +} SaverImpl::~SaverImpl() {} @@ -37,7 +39,9 @@ bool SaverImpl::save(bool reloadAfterSave, const FocusEnum focusOn, const std::s } //save tunnels config - { + if (mainWindowPtr->isPreventSaveTunnelsMode()) { + emit showPreventedSaveTunnelsConfMessage(); + }else{ std::stringstream out; for (std::map::iterator it=tunnelConfigs->begin(); it!=tunnelConfigs->end(); ++it) { diff --git a/src/SaverImpl.h b/src/SaverImpl.h index c034078..6f8ab91 100644 --- a/src/SaverImpl.h +++ b/src/SaverImpl.h @@ -14,8 +14,7 @@ class MainWindowItem; class TunnelConfig; -class SaverImpl : public Saver -{ +class SaverImpl : public Saver { public: SaverImpl(MainWindow *mainWindowPtr_, QList* configItems_, std::map* tunnelConfigs_); virtual ~SaverImpl(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 020361d..433630a 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include @@ -68,6 +69,7 @@ MainWindow::MainWindow(std::shared_ptr logStream_, QWidget *paren ,tunconfpath() ,tunnelConfigs() ,tunnelsPageUpdateListener(this) + ,preventSaveTunnelsBool(false) ,saverPtr( new SaverImpl(this, &configItems, @@ -778,6 +780,10 @@ void MainWindow::loadAllConfigs(SaverImpl* saverPtr){ void MainWindow::DisableTunnelsPage() { ui->tunnelsScrollAreaWidgetContents->setEnabled(false); + ui->tunnelsScrollArea->setEnabled(false); + ui->addClientTunnelPushButton->setEnabled(false); + ui->addServerTunnelPushButton->setEnabled(false); + preventSaveTunnels(); } void MainWindow::layoutTunnels() { @@ -1135,3 +1141,14 @@ void MainWindow::syncLogLevel (int /*comboBoxIndex*/) { i2p::log::Logger().Reopen (); } +void MainWindow::preventSaveTunnels() { + preventSaveTunnelsBool = true; +} + +bool MainWindow::isPreventSaveTunnelsMode() { + return preventSaveTunnelsBool; +} + +void MainWindow::showTunnelsPagePreventedMessage() { + QMessageBox::critical(this,QObject::tr("Error"),QObject::tr("Not saving tunnels configuration due to previous errors with it.")); +} diff --git a/src/mainwindow.h b/src/mainwindow.h index 525ff63..1522e4c 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -500,6 +500,8 @@ public: Ui::GeneralSettingsContentsForm* uiSettings; void adjustSizesAccordingToWrongLabel(); bool applyTunnelsUiToConfigs(); + void preventSaveTunnels(); + bool isPreventSaveTunnelsMode(); private: int settingsTitleLabelNominalHeight; TextBrowserTweaked1 * textBrowser; @@ -894,9 +896,13 @@ private: //void onLoggingOptionsChange() {} + bool preventSaveTunnelsBool; SaverImpl* saverPtr; void DisableTunnelsPage(); + +public slots: + void showTunnelsPagePreventedMessage(); }; #endif // MAINWINDOW_H