Ensure errors on first connection after startup are handled
This commit is contained in:
parent
c8d4807e88
commit
49b33e5afe
|
@ -98,8 +98,6 @@ void SyncthingApplet::init()
|
||||||
|
|
||||||
// restore settings
|
// restore settings
|
||||||
Settings::restore();
|
Settings::restore();
|
||||||
// load primary connection config
|
|
||||||
setCurrentConnectionConfigIndex(config().readEntry<int>("selectedConfig", 0));
|
|
||||||
|
|
||||||
// initialize systemd service support
|
// initialize systemd service support
|
||||||
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
|
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
|
||||||
|
@ -110,6 +108,9 @@ void SyncthingApplet::init()
|
||||||
connect(&m_service, &SyncthingService::errorOccurred, this, &SyncthingApplet::handleSystemdServiceError);
|
connect(&m_service, &SyncthingService::errorOccurred, this, &SyncthingApplet::handleSystemdServiceError);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// load primary connection config
|
||||||
|
m_currentConnectionConfig = config().readEntry<int>("selectedConfig", 0);
|
||||||
|
|
||||||
// apply settings and connect according to settings
|
// apply settings and connect according to settings
|
||||||
handleSettingsChanged();
|
handleSettingsChanged();
|
||||||
|
|
||||||
|
|
|
@ -56,9 +56,10 @@ int initSyncthingTray(bool windowed, bool waitForTray, const char *connectionCon
|
||||||
// handle "windowed" case
|
// handle "windowed" case
|
||||||
if (windowed) {
|
if (windowed) {
|
||||||
settings.launcher.autostart();
|
settings.launcher.autostart();
|
||||||
auto *const trayWidget = new TrayWidget(connectionConfigQStr);
|
auto *const trayWidget = new TrayWidget();
|
||||||
trayWidget->setAttribute(Qt::WA_DeleteOnClose);
|
trayWidget->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
trayWidget->show();
|
trayWidget->show();
|
||||||
|
trayWidget->applySettings(connectionConfigQStr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ namespace QtGui {
|
||||||
*/
|
*/
|
||||||
TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent)
|
TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent)
|
||||||
: QSystemTrayIcon(parent)
|
: QSystemTrayIcon(parent)
|
||||||
, m_trayMenu(connectionConfig, this)
|
, m_trayMenu(this)
|
||||||
#ifdef QT_UTILITIES_SUPPORT_DBUS_NOTIFICATIONS
|
#ifdef QT_UTILITIES_SUPPORT_DBUS_NOTIFICATIONS
|
||||||
, m_dbusNotificationsEnabled(Settings::values().dbusNotifications)
|
, m_dbusNotificationsEnabled(Settings::values().dbusNotifications)
|
||||||
#endif
|
#endif
|
||||||
|
@ -104,6 +104,10 @@ TrayIcon::TrayIcon(const QString &connectionConfig, QObject *parent)
|
||||||
connect(&m_dbusNotifier, &DBusStatusNotifier::webUiRequested, &widget, &TrayWidget::showWebUi);
|
connect(&m_dbusNotifier, &DBusStatusNotifier::webUiRequested, &widget, &TrayWidget::showWebUi);
|
||||||
connect(¬ifier, &SyncthingNotifier::connected, &m_dbusNotifier, &DBusStatusNotifier::hideDisconnect);
|
connect(¬ifier, &SyncthingNotifier::connected, &m_dbusNotifier, &DBusStatusNotifier::hideDisconnect);
|
||||||
#endif
|
#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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|
|
@ -11,14 +11,14 @@
|
||||||
|
|
||||||
namespace QtGui {
|
namespace QtGui {
|
||||||
|
|
||||||
TrayMenu::TrayMenu(const QString &connectionConfig, TrayIcon *trayIcon, QWidget *parent)
|
TrayMenu::TrayMenu(TrayIcon *trayIcon, QWidget *parent)
|
||||||
: QMenu(parent)
|
: QMenu(parent)
|
||||||
, m_trayIcon(trayIcon)
|
, m_trayIcon(trayIcon)
|
||||||
{
|
{
|
||||||
auto *const menuLayout = new QHBoxLayout;
|
auto *const menuLayout = new QHBoxLayout;
|
||||||
menuLayout->setMargin(0);
|
menuLayout->setMargin(0);
|
||||||
menuLayout->setSpacing(0);
|
menuLayout->setSpacing(0);
|
||||||
menuLayout->addWidget(m_trayWidget = new TrayWidget(connectionConfig, this));
|
menuLayout->addWidget(m_trayWidget = new TrayWidget(this));
|
||||||
setLayout(menuLayout);
|
setLayout(menuLayout);
|
||||||
setPlatformMenu(nullptr);
|
setPlatformMenu(nullptr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ class TrayMenu : public QMenu {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TrayMenu(const QString &connectionConfig = QString(), TrayIcon *trayIcon = nullptr, QWidget *parent = nullptr);
|
TrayMenu(TrayIcon *trayIcon = nullptr, QWidget *parent = nullptr);
|
||||||
|
|
||||||
QSize sizeHint() const;
|
QSize sizeHint() const;
|
||||||
TrayWidget &widget();
|
TrayWidget &widget();
|
||||||
|
|
|
@ -55,8 +55,11 @@ vector<TrayWidget *> TrayWidget::m_instances;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Instantiates a new tray widget.
|
* \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)
|
: QWidget(parent)
|
||||||
, m_menu(parent)
|
, m_menu(parent)
|
||||||
, m_ui(new Ui::TrayWidget)
|
, m_ui(new Ui::TrayWidget)
|
||||||
|
@ -122,9 +125,6 @@ TrayWidget::TrayWidget(const QString &connectionConfig, TrayMenu *parent)
|
||||||
m_notificationsMenu->addAction(m_ui->actionDismissNotifications);
|
m_notificationsMenu->addAction(m_ui->actionDismissNotifications);
|
||||||
m_ui->notificationsPushButton->setMenu(m_notificationsMenu);
|
m_ui->notificationsPushButton->setMenu(m_notificationsMenu);
|
||||||
|
|
||||||
// apply settings, this also establishes the connection to Syncthing (according to settings)
|
|
||||||
applySettings(connectionConfig);
|
|
||||||
|
|
||||||
// setup other widgets
|
// setup other widgets
|
||||||
m_ui->notificationsPushButton->setHidden(true);
|
m_ui->notificationsPushButton->setHidden(true);
|
||||||
m_ui->trafficIconLabel->setPixmap(
|
m_ui->trafficIconLabel->setPixmap(
|
||||||
|
|
|
@ -42,7 +42,7 @@ class TrayWidget : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TrayWidget(const QString &connectionConfig = QString(), TrayMenu *parent = nullptr);
|
TrayWidget(TrayMenu *parent = nullptr);
|
||||||
~TrayWidget();
|
~TrayWidget();
|
||||||
|
|
||||||
Data::SyncthingConnection &connection();
|
Data::SyncthingConnection &connection();
|
||||||
|
@ -63,10 +63,10 @@ public slots:
|
||||||
void dismissNotifications();
|
void dismissNotifications();
|
||||||
void restartSyncthing();
|
void restartSyncthing();
|
||||||
void quitTray();
|
void quitTray();
|
||||||
|
void applySettings(const QString &connectionConfig = QString());
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleStatusChanged(Data::SyncthingStatus status);
|
void handleStatusChanged(Data::SyncthingStatus status);
|
||||||
void applySettings(const QString &connectionConfig = QString());
|
|
||||||
static void applySettingsOnAllInstances();
|
static void applySettingsOnAllInstances();
|
||||||
void openDir(const Data::SyncthingDir &dir);
|
void openDir(const Data::SyncthingDir &dir);
|
||||||
void openItemDir(const Data::SyncthingItemDownloadProgress &item);
|
void openItemDir(const Data::SyncthingItemDownloadProgress &item);
|
||||||
|
|
Loading…
Reference in New Issue