#include "./statusinfo.h" #include #include #include #include #include #include #include using namespace Data; namespace QtGui { StatusInfo::StatusInfo() : m_statusText(QCoreApplication::translate("QtGui::StatusInfo", "Initializing ...")) , m_statusIcon(&trayIcons().disconnected) { } void StatusInfo::recomputeAdditionalStatusText() { if (m_additionalStatusInfo.isEmpty()) { m_additionalStatusText = m_additionalDeviceInfo; } else if (m_additionalDeviceInfo.isEmpty()) { m_additionalStatusText = m_additionalStatusInfo; } else if (m_additionalStatusInfo.isEmpty() && m_additionalDeviceInfo.isEmpty()) { m_additionalStatusText.clear(); } else { m_additionalStatusText = m_additionalStatusInfo % QChar('\n') % m_additionalDeviceInfo; } } void StatusInfo::updateConnectionStatus(const SyncthingConnection &connection, const QString &configurationName) { m_additionalStatusInfo.clear(); const auto &icons = trayIcons(); switch (connection.status()) { case SyncthingStatus::Disconnected: if (connection.autoReconnectInterval() > 0) { m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Not connected to Syncthing"); m_additionalStatusInfo = QCoreApplication::translate("QtGui::StatusInfo", "Trying to reconnect every %1 ms").arg(connection.autoReconnectInterval()); } else { m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Not connected to Syncthing"); } m_statusIcon = &icons.disconnected; break; case SyncthingStatus::Reconnecting: m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Reconnecting ..."); m_statusIcon = &icons.disconnected; break; default: if (connection.hasOutOfSyncDirs()) { switch (connection.status()) { case SyncthingStatus::Synchronizing: m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Synchronization is ongoing"); m_additionalStatusInfo = QCoreApplication::translate("QtGui::StatusInfo", "At least one directory is out of sync"); m_statusIcon = &icons.errorSync; break; default: m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "At least one directory is out of sync"); m_statusIcon = &icons.error; } } else if (connection.hasUnreadNotifications()) { m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Notifications available"); m_statusIcon = &icons.notify; } else { switch (connection.status()) { case SyncthingStatus::Idle: m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Syncthing is idling"); m_statusIcon = &icons.idling; break; case SyncthingStatus::Scanning: m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Syncthing is scanning"); m_statusIcon = &icons.scanninig; break; case SyncthingStatus::Paused: m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "At least one device is paused"); m_statusIcon = &icons.pause; break; case SyncthingStatus::Synchronizing: m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Synchronization is ongoing"); m_statusIcon = &icons.sync; break; case SyncthingStatus::RemoteNotInSync: m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "At least one remote directory is not in sync"); m_statusIcon = &icons.sync; break; default: m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Status is unknown"); m_statusIcon = &icons.disconnected; } } } if (!configurationName.isEmpty()) { m_statusText = configurationName % QChar(':') % QChar(' ') % m_statusText; } recomputeAdditionalStatusText(); } void StatusInfo::updateConnectedDevices(const SyncthingConnection &connection) { m_additionalDeviceInfo.clear(); if (connection.isConnected()) { // find devices we're currently connected to const auto connectedDevices(connection.connectedDevices()); // handle case when not connected to other devices if (connectedDevices.empty()) { m_additionalDeviceInfo = QCoreApplication::translate("QtGui::StatusInfo", "Not connected to other devices"); return; } // get up to 2 device names const auto deviceCount = trQuandity(connectedDevices.size()); const auto deviceNames = [&] { QStringList names; names.reserve(2); for (const auto *dev : connectedDevices) { if (dev->name.isEmpty()) { continue; } names << dev->name; if (names.size() > 2) { break; } } return names; }(); // update status text if (deviceNames.empty()) { m_additionalDeviceInfo = QCoreApplication::translate("QtGui::StatusInfo", "Connected to %1 devices", nullptr, deviceCount).arg(deviceCount); } else if (deviceNames.size() < deviceCount) { m_additionalDeviceInfo = QCoreApplication::translate("QtGui::StatusInfo", "Connected to %1 and %2 other devices", nullptr, deviceCount - deviceNames.size()) .arg(deviceNames.join(QStringLiteral(", "))) .arg(deviceCount - deviceNames.size()); } else if (deviceNames.size() == 2) { m_additionalDeviceInfo = QCoreApplication::translate("QtGui::StatusInfo", "Connected to %1 and %2", nullptr, deviceCount) .arg(deviceNames[0], deviceNames[1]); } else if (deviceNames.size() == 1) { m_additionalDeviceInfo = QCoreApplication::translate("QtGui::StatusInfo", "Connected to %1", nullptr, deviceCount).arg(deviceNames[0]); } } recomputeAdditionalStatusText(); } } // namespace QtGui