From b2aab9eb161771d5db8d628142917d26d995703f Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 30 May 2017 15:06:34 +0200 Subject: [PATCH] Show number of connected devs in tool tip --- connector/syncthingdev.h | 13 +++++++ tray/gui/trayicon.cpp | 7 +++- tray/translations/syncthingtray_de_DE.ts | 22 +++++------ tray/translations/syncthingtray_en_US.ts | 22 +++++------ widgets/misc/statusinfo.cpp | 22 +++++++++++ widgets/misc/statusinfo.h | 11 +++++- .../translations/syncthingwidgets_de_DE.ts | 37 +++++++++++++------ .../translations/syncthingwidgets_en_US.ts | 37 +++++++++++++------ 8 files changed, 122 insertions(+), 49 deletions(-) diff --git a/connector/syncthingdev.h b/connector/syncthingdev.h index 42b6f9d..c621f01 100644 --- a/connector/syncthingdev.h +++ b/connector/syncthingdev.h @@ -24,6 +24,7 @@ QString statusString(SyncthingDevStatus status); struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDev { SyncthingDev(const QString &id = QString(), const QString &name = QString()); QString statusString() const; + bool isConnected() const; QString id; QString name; @@ -49,6 +50,18 @@ inline SyncthingDev::SyncthingDev(const QString &id, const QString &name) { } +inline bool SyncthingDev::isConnected() const +{ + switch (status) { + case SyncthingDevStatus::Unknown: + case SyncthingDevStatus::Disconnected: + case SyncthingDevStatus::OwnDevice: + return false; + default: + return true; + } +} + } // namespace Data Q_DECLARE_METATYPE(Data::SyncthingDev) diff --git a/tray/gui/trayicon.cpp b/tray/gui/trayicon.cpp index c4e619f..843bdc6 100644 --- a/tray/gui/trayicon.cpp +++ b/tray/gui/trayicon.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD #include #endif @@ -179,7 +180,11 @@ void TrayIcon::showSyncthingNotification(ChronoUtilities::DateTime when, const Q void TrayIcon::updateStatusIconAndText() { const StatusInfo statusInfo(trayMenu().widget()->connection()); - setToolTip(statusInfo.statusText()); + if (statusInfo.additionalStatusText().isEmpty()) { + setToolTip(statusInfo.statusText()); + } else { + setToolTip(statusInfo.statusText() % QChar('\n') % statusInfo.additionalStatusText()); + } setIcon(statusInfo.statusIcon()); } diff --git a/tray/translations/syncthingtray_de_DE.ts b/tray/translations/syncthingtray_de_DE.ts index 68cddae..3ee07c6 100644 --- a/tray/translations/syncthingtray_de_DE.ts +++ b/tray/translations/syncthingtray_de_DE.ts @@ -459,37 +459,37 @@ Syncthing-Benachrichtigung - + Web UI Weboberfäche - + Settings Einstellungen - + Rescan all Alle neu scannen - + About Über Syncthing Tray - + Close Beenden - + Error Fehler - + Syncthing notification - click to dismiss Neue Syncthing-Benachrichtigung @@ -502,12 +502,12 @@ Nicht mit Syncthing verbunden - + Disconnected from Syncthing Verbindung zu Syncthing getrennt - + Log @@ -556,12 +556,12 @@ Syncthing synchronisiert - + Synchronization of %1 complete %1 wurde synchronisiert - + Synchronization of the following devices complete: Folgende Verzeichnisse wurden synchronisiert: diff --git a/tray/translations/syncthingtray_en_US.ts b/tray/translations/syncthingtray_en_US.ts index d1610bb..2fc35b6 100644 --- a/tray/translations/syncthingtray_en_US.ts +++ b/tray/translations/syncthingtray_en_US.ts @@ -58,57 +58,57 @@ QtGui::TrayIcon - + Web UI - + Settings - + Rescan all - + Log - + About - + Close - + Disconnected from Syncthing - + Error - + Syncthing notification - click to dismiss - + Synchronization of %1 complete - + Synchronization of the following devices complete: diff --git a/widgets/misc/statusinfo.cpp b/widgets/misc/statusinfo.cpp index 64428a6..ae346e3 100644 --- a/widgets/misc/statusinfo.cpp +++ b/widgets/misc/statusinfo.cpp @@ -1,6 +1,7 @@ #include "./statusinfo.h" #include "../../connector/syncthingconnection.h" +#include "../../connector/syncthingdev.h" #include "../../model/syncthingicons.h" #include @@ -71,5 +72,26 @@ void StatusInfo::update(const SyncthingConnection &connection) } } } + size_t connectedDevices = 0; + switch (connection.status()) { + case SyncthingStatus::Idle: + case SyncthingStatus::OutOfSync: + case SyncthingStatus::Scanning: + case SyncthingStatus::Synchronizing: + for (const SyncthingDev &dev : connection.devInfo()) { + if (dev.isConnected()) { + ++connectedDevices; + } + } + if (connectedDevices) { + m_additionalStatusText + = QCoreApplication::translate("QtGui::StatusInfo", "Conntected to %1 devices", nullptr, connectedDevices).arg(connectedDevices); + } else { + m_additionalStatusText = QCoreApplication::translate("QtGui::StatusInfo", "Not connected to other devices"); + } + break; + default: + m_additionalStatusText.clear(); + } } } diff --git a/widgets/misc/statusinfo.h b/widgets/misc/statusinfo.h index 8cb663a..41d1ac9 100644 --- a/widgets/misc/statusinfo.h +++ b/widgets/misc/statusinfo.h @@ -18,12 +18,14 @@ public: explicit StatusInfo(); explicit StatusInfo(const Data::SyncthingConnection &connection); - QString statusText() const; + const QString &statusText() const; + const QString &additionalStatusText() const; const QIcon &statusIcon() const; void update(const Data::SyncthingConnection &connection); private: QString m_statusText; + QString m_additionalStatusText; const QIcon *m_statusIcon; }; @@ -32,11 +34,16 @@ inline StatusInfo::StatusInfo(const Data::SyncthingConnection &connection) update(connection); } -inline QString StatusInfo::statusText() const +inline const QString &StatusInfo::statusText() const { return m_statusText; } +inline const QString &StatusInfo::additionalStatusText() const +{ + return m_additionalStatusText; +} + inline const QIcon &StatusInfo::statusIcon() const { return *m_statusIcon; diff --git a/widgets/translations/syncthingwidgets_de_DE.ts b/widgets/translations/syncthingwidgets_de_DE.ts index 524062e..bdd7430 100644 --- a/widgets/translations/syncthingwidgets_de_DE.ts +++ b/widgets/translations/syncthingwidgets_de_DE.ts @@ -582,65 +582,78 @@ QtGui::StatusInfo - + Initializing ... Initialisierung ... - + Not connected to Syncthing - trying to reconnect every %1 ms Nicht mit Syncthing verbunden - versuche alle %1 ms zu verbinden - + Not connected to Syncthing Nicht mit Syncthing verbunden - + Reconnecting ... Neu verbinden ... - + Synchronization is ongoing but at least one directory is out of sync Synchronisiert, aber mind. ein Verzeichnis hat Fehler - + At least one directory is out of sync Mind. ein Verzeichnis hat Fehler - + Notifications available Es gibt neue Benachrichtigungen - + Syncthing is idling Syncthing ist im Leerlauf - + Syncthing is scanning Syncthing scannt - + At least one device is paused Mind. ein Gerät ist pausiert - + Synchronization is ongoing Syncthing synchronisiert - + Status is unknown Status ist unbekannt + + + Conntected to %1 devices + + Mit %1 Gerät verbunden + Mit %1 Geräten verbunden + + + + + Not connected to other devices + Nicht mit anderen Geräten verbunden + QtGui::SystemdOptionPage diff --git a/widgets/translations/syncthingwidgets_en_US.ts b/widgets/translations/syncthingwidgets_en_US.ts index 3b26855..56ab12e 100644 --- a/widgets/translations/syncthingwidgets_en_US.ts +++ b/widgets/translations/syncthingwidgets_en_US.ts @@ -500,65 +500,78 @@ QtGui::StatusInfo - + Initializing ... - + Not connected to Syncthing - trying to reconnect every %1 ms - + Not connected to Syncthing - + Reconnecting ... - + Synchronization is ongoing but at least one directory is out of sync - + At least one directory is out of sync - + Notifications available - + Syncthing is idling - + Syncthing is scanning - + At least one device is paused - + Synchronization is ongoing - + Status is unknown + + + Conntected to %1 devices + + Conntected to %1 device + Conntected to %1 devices + + + + + Not connected to other devices + + QtGui::SystemdOptionPage