Add option to ignore folder "out-of-sync" errors for overall status

* Add option to ignore unread notifications as well to cover all those
  extra cases
* See https://github.com/Martchus/syncthingtray/issues/141
This commit is contained in:
Martchus 2022-06-07 10:15:28 +02:00
parent 1fad0baa0d
commit 4b174eae20
5 changed files with 24 additions and 5 deletions

View File

@ -9,8 +9,8 @@ set(META_APP_DESCRIPTION "Tray application for Syncthing")
set(META_APP_CATEGORIES "Network;FileTransfer")
set(META_GUI_OPTIONAL false)
set(META_VERSION_MAJOR 1)
set(META_VERSION_MINOR 1)
set(META_VERSION_PATCH 21)
set(META_VERSION_MINOR 2)
set(META_VERSION_PATCH 0)
set(META_VERSION_EXACT_SONAME ON)
set(META_ADD_DEFAULT_CPP_UNIT_TEST_APPLICATION ON)

View File

@ -23,7 +23,12 @@ enum class SyncthingStatusComputionFlags : quint64 {
Synchronizing = (1 << 1), /**< the status SyncthingStatus::Synchronizing might be set (in addition) */
RemoteSynchronizing = (1 << 2), /**< the status SyncthingStatus::RemoteNotInSync might be set (in addition) */
DevicePaused = (1 << 3), /**< the status SyncthingStatus::Paused might be set if there's at least one paused device (in addition) */
Default = SyncthingStatusComputionFlags::Scanning | SyncthingStatusComputionFlags::Synchronizing | SyncthingStatusComputionFlags::DevicePaused,
OutOfSync = (1
<< 4), /**< the return value of SyncthingConnection::hasOutOfSyncDirs() is considered by further displaying-related computations such as StatusInfo::updateConnectionStatus() */
UnreadNotifications = (1
<< 5), /**< the return value of SyncthingConnection::hasUnreadNotifications() is considered by further displaying-related computations such as StatusInfo::updateConnectionStatus() */
Default = SyncthingStatusComputionFlags::Scanning | SyncthingStatusComputionFlags::Synchronizing | SyncthingStatusComputionFlags::DevicePaused
| SyncthingStatusComputionFlags::OutOfSync | SyncthingStatusComputionFlags::UnreadNotifications,
/**< the default flags used all over the place */
};

View File

@ -25,6 +25,8 @@ SyncthingStatusComputionModel::SyncthingStatusComputionModel(QObject *parent)
itemFor(SyncthingStatusComputionFlags::Synchronizing),
itemFor(SyncthingStatusComputionFlags::RemoteSynchronizing),
itemFor(SyncthingStatusComputionFlags::DevicePaused),
itemFor(SyncthingStatusComputionFlags::OutOfSync),
itemFor(SyncthingStatusComputionFlags::UnreadNotifications),
});
}
@ -39,6 +41,10 @@ QString SyncthingStatusComputionModel::labelForId(const QVariant &id) const
return tr("Remote dir has outstanding progress");
case SyncthingStatusComputionFlags::DevicePaused:
return tr("A device is paused");
case SyncthingStatusComputionFlags::OutOfSync:
return tr("Local dir is out of sync");
case SyncthingStatusComputionFlags::UnreadNotifications:
return tr("Unread notification present");
default:
return id.toString();
}

View File

@ -1,6 +1,7 @@
#include "./statusinfo.h"
#include <syncthingconnector/syncthingconnection.h>
#include <syncthingconnector/syncthingconnectionsettings.h>
#include <syncthingconnector/syncthingdev.h>
#include <syncthingconnector/utils.h>
#include <syncthingmodel/syncthingicons.h>
@ -53,7 +54,7 @@ void StatusInfo::updateConnectionStatus(const SyncthingConnection &connection, c
m_statusIcon = &icons.disconnected;
break;
default:
if (connection.hasOutOfSyncDirs()) {
if (connection.hasOutOfSyncDirs() && (connection.statusComputionFlags() & SyncthingStatusComputionFlags::OutOfSync)) {
switch (connection.status()) {
case SyncthingStatus::Synchronizing:
m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Synchronization is ongoing");
@ -64,7 +65,7 @@ void StatusInfo::updateConnectionStatus(const SyncthingConnection &connection, c
m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "At least one directory is out of sync");
m_statusIcon = &icons.error;
}
} else if (connection.hasUnreadNotifications()) {
} else if (connection.hasUnreadNotifications() && (connection.statusComputionFlags() & SyncthingStatusComputionFlags::UnreadNotifications)) {
m_statusText = QCoreApplication::translate("QtGui::StatusInfo", "Notifications available");
m_statusIcon = &icons.notify;
} else {

View File

@ -31,6 +31,7 @@
#include <QSslCertificate>
#include <QSslError>
#include <QStringBuilder>
#include <QVersionNumber>
#include <iostream>
#include <type_traits>
@ -263,6 +264,7 @@ void restore()
settings.sync();
Settings &v = values();
const auto version = QVersionNumber::fromString(settings.value(QStringLiteral("v")).toString());
settings.beginGroup(QStringLiteral("tray"));
const int connectionCount = settings.beginReadArray(QStringLiteral("connections"));
auto &primaryConnectionSettings = v.connection.primary;
@ -303,6 +305,10 @@ void restore()
if (statusComputionFlags.canConvert<UnderlyingFlagType>()) {
connectionSettings->statusComputionFlags
= static_cast<Data::SyncthingStatusComputionFlags>(statusComputionFlags.value<UnderlyingFlagType>());
if (version < QVersionNumber(1, 2)) {
connectionSettings->statusComputionFlags
+= Data::SyncthingStatusComputionFlags::OutOfSync | Data::SyncthingStatusComputionFlags::UnreadNotifications;
}
}
connectionSettings->httpsCertPath = settings.value(QStringLiteral("httpsCertPath")).toString();
if (!connectionSettings->loadHttpsCert()) {
@ -401,6 +407,7 @@ void save()
const Settings &v = values();
settings.setValue(QStringLiteral("v"), QStringLiteral(APP_VERSION));
settings.beginGroup(QStringLiteral("tray"));
const auto &primaryConnectionSettings = v.connection.primary;
const auto &secondaryConnectionSettings = v.connection.secondary;