Ensure errors on first connection after startup are handled

This commit is contained in:
Martchus 2018-05-15 22:01:03 +02:00
parent c8d4807e88
commit 49b33e5afe
7 changed files with 19 additions and 13 deletions

View File

@ -98,8 +98,6 @@ void SyncthingApplet::init()
// restore settings
Settings::restore();
// load primary connection config
setCurrentConnectionConfigIndex(config().readEntry<int>("selectedConfig", 0));
// initialize systemd service support
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
@ -110,6 +108,9 @@ void SyncthingApplet::init()
connect(&m_service, &SyncthingService::errorOccurred, this, &SyncthingApplet::handleSystemdServiceError);
#endif
// load primary connection config
m_currentConnectionConfig = config().readEntry<int>("selectedConfig", 0);
// apply settings and connect according to settings
handleSettingsChanged();

View File

@ -56,9 +56,10 @@ int initSyncthingTray(bool windowed, bool waitForTray, const char *connectionCon
// handle "windowed" case
if (windowed) {
settings.launcher.autostart();
auto *const trayWidget = new TrayWidget(connectionConfigQStr);
auto *const trayWidget = new TrayWidget();
trayWidget->setAttribute(Qt::WA_DeleteOnClose);
trayWidget->show();
trayWidget->applySettings(connectionConfigQStr);
return 0;
}

View File

@ -38,7 +38,7 @@ namespace QtGui {
*/
TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent)
: QSystemTrayIcon(parent)
, m_trayMenu(connectionConfig, this)
, m_trayMenu(this)
#ifdef QT_UTILITIES_SUPPORT_DBUS_NOTIFICATIONS
, m_dbusNotificationsEnabled(Settings::values().dbusNotifications)
#endif
@ -104,6 +104,10 @@ TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent)
connect(&m_dbusNotifier, &DBusStatusNotifier::webUiRequested, &widget, &TrayWidget::showWebUi);
connect(&notifier, &SyncthingNotifier::connected, &m_dbusNotifier, &DBusStatusNotifier::hideDisconnect);
#endif
// apply settings, this also establishes the connection to Syncthing (according to settings)
// note: it is important to apply settings after all Signals & Slots have been connected (eg. to handle SyncthingConnection::error())
m_trayMenu.widget().applySettings(connectionConfig);
}
/*!

View File

@ -11,14 +11,14 @@
namespace QtGui {
TrayMenu::TrayMenu(const QString &connectionConfig, TrayIcon *trayIcon, QWidget *parent)
TrayMenu::TrayMenu(TrayIcon *trayIcon, QWidget *parent)
: QMenu(parent)
, m_trayIcon(trayIcon)
{
auto *const menuLayout = new QHBoxLayout;
menuLayout->setMargin(0);
menuLayout->setSpacing(0);
menuLayout->addWidget(m_trayWidget = new TrayWidget(connectionConfig, this));
menuLayout->addWidget(m_trayWidget = new TrayWidget(this));
setLayout(menuLayout);
setPlatformMenu(nullptr);
}

View File

@ -12,7 +12,7 @@ class TrayMenu : public QMenu {
Q_OBJECT
public:
TrayMenu(const QString &connectionConfig = QString(), TrayIcon *trayIcon = nullptr, QWidget *parent = nullptr);
TrayMenu(TrayIcon *trayIcon = nullptr, QWidget *parent = nullptr);
QSize sizeHint() const;
TrayWidget &widget();

View File

@ -55,8 +55,11 @@ vector<TrayWidget *> TrayWidget::m_instances;
/*!
* \brief Instantiates a new tray widget.
* \remarks Doesn't apply the settings (and won't connect according to settings). This must be done manually by calling
* TrayWidget::applySettings(). This allows postponing connecting until all signals of the TrayWidget::connection()
* are connected as required.
*/
TrayWidget::TrayWidget(const QString &connectionConfig, TrayMenu *parent)
TrayWidget::TrayWidget(TrayMenu *parent)
: QWidget(parent)
, m_menu(parent)
, m_ui(new Ui::TrayWidget)
@ -122,9 +125,6 @@ TrayWidget::TrayWidget(const QString &connectionConfig, TrayMenu *parent)
m_notificationsMenu->addAction(m_ui->actionDismissNotifications);
m_ui->notificationsPushButton->setMenu(m_notificationsMenu);
// apply settings, this also establishes the connection to Syncthing (according to settings)
applySettings(connectionConfig);
// setup other widgets
m_ui->notificationsPushButton->setHidden(true);
m_ui->trafficIconLabel->setPixmap(

View File

@ -42,7 +42,7 @@ class TrayWidget : public QWidget {
Q_OBJECT
public:
TrayWidget(const QString &connectionConfig = QString(), TrayMenu *parent = nullptr);
TrayWidget(TrayMenu *parent = nullptr);
~TrayWidget();
Data::SyncthingConnection &connection();
@ -63,10 +63,10 @@ public slots:
void dismissNotifications();
void restartSyncthing();
void quitTray();
void applySettings(const QString &connectionConfig = QString());
private slots:
void handleStatusChanged(Data::SyncthingStatus status);
void applySettings(const QString &connectionConfig = QString());
static void applySettingsOnAllInstances();
void openDir(const Data::SyncthingDir &dir);
void openItemDir(const Data::SyncthingItemDownloadProgress &item);