So far the backend libraries' include paths were relative within this repository. This means the header files could not be used at their installed location. This change replaces them with "<>" includes to fix that problem and adds a new include directory so building everything at once still works. With this change it should be easier to actually split some parts into another repository if this one would become too big.
158 lines
6.5 KiB
C++
158 lines
6.5 KiB
C++
#include "./statusinfo.h"
|
|
|
|
#include <syncthingconnector/syncthingconnection.h>
|
|
#include <syncthingconnector/syncthingdev.h>
|
|
#include <syncthingconnector/utils.h>
|
|
#include <syncthingmodel/syncthingicons.h>
|
|
|
|
#include <QCoreApplication>
|
|
#include <QIcon>
|
|
#include <QStringBuilder>
|
|
|
|
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 deviceNames;
|
|
deviceNames.reserve(2);
|
|
for (const auto *dev : connectedDevices) {
|
|
if (dev->name.isEmpty()) {
|
|
continue;
|
|
}
|
|
deviceNames << dev->name;
|
|
if (deviceNames.size() > 2) {
|
|
break;
|
|
}
|
|
}
|
|
return deviceNames;
|
|
}();
|
|
|
|
// 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
|