Move logic for determine error relevance to InternalError

This commit is contained in:
Martchus 2017-09-08 16:54:59 +02:00
parent 14f42fbc51
commit 5046cb3eed
4 changed files with 42 additions and 16 deletions

View File

@ -162,24 +162,10 @@ void TrayIcon::handleErrorsCleared()
void TrayIcon::showInternalError(
const QString &errorMsg, SyncthingErrorCategory category, int networkError, const QNetworkRequest &request, const QByteArray &response)
{
const auto &settings = Settings::values();
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
const SyncthingService &service = syncthingService();
const bool serviceRelevant = service.isSystemdAvailable() && isLocal(QUrl(m_trayMenu.widget()->connection().syncthingUrl()));
#endif
if (settings.notifyOn.internalErrors
&& (m_trayMenu.widget()->connection().autoReconnectTries() < 1 || category != SyncthingErrorCategory::OverallConnection)
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
&& (!settings.systemd.considerForReconnect || !serviceRelevant
|| !(networkError == QNetworkReply::RemoteHostClosedError && service.isManuallyStopped()))
&& (settings.ignoreInavailabilityAfterStart == 0
|| !(networkError == QNetworkReply::ConnectionRefusedError && service.isRunning()
&& !service.isActiveWithoutSleepFor(settings.ignoreInavailabilityAfterStart)))
#endif
) {
if (InternalError::isRelevant(m_trayMenu.widget()->connection(), category, networkError)) {
InternalError error(errorMsg, request.url(), response);
#ifdef QT_UTILITIES_SUPPORT_DBUS_NOTIFICATIONS
if (settings.dbusNotifications) {
if (Settings::values().dbusNotifications) {
m_dbusNotifier.showInternalError(error);
} else
#endif

View File

@ -32,6 +32,7 @@ set(WIDGETS_SRC_FILES
misc/errorviewdialog.cpp
misc/statusinfo.cpp
misc/dbusstatusnotifier.cpp
misc/internalerror.cpp
misc/otherdialogs.cpp
)
set(RES_FILES

View File

@ -0,0 +1,32 @@
#include "./internalerror.h"
#include "../settings/settings.h"
#include "../../connector/syncthingconnection.h"
#include "../../connector/syncthingservice.h"
#include "../../connector/utils.h"
#include <QNetworkReply>
using namespace Data;
namespace QtGui {
bool InternalError::isRelevant(const SyncthingConnection &connection, SyncthingErrorCategory category, int networkError)
{
const auto &settings = Settings::values();
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
const SyncthingService &service = syncthingService();
const bool serviceRelevant = service.isSystemdAvailable() && isLocal(QUrl(connection.syncthingUrl()));
#endif
return settings.notifyOn.internalErrors && (connection.autoReconnectTries() < 1 || category != SyncthingErrorCategory::OverallConnection)
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
&& (!settings.systemd.considerForReconnect || !serviceRelevant
|| !(networkError == QNetworkReply::RemoteHostClosedError && service.isManuallyStopped()))
&& (settings.ignoreInavailabilityAfterStart == 0
|| !(networkError == QNetworkReply::ConnectionRefusedError && service.isRunning()
&& !service.isActiveWithoutSleepFor(settings.ignoreInavailabilityAfterStart)))
#endif
;
}
}

View File

@ -9,11 +9,18 @@
#include <QString>
#include <QUrl>
namespace Data {
class SyncthingConnection;
enum class SyncthingErrorCategory;
}
namespace QtGui {
struct SYNCTHINGWIDGETS_EXPORT InternalError {
InternalError(const QString &message = QString(), const QUrl &url = QUrl(), const QByteArray &response = QByteArray());
static bool isRelevant(const Data::SyncthingConnection &connection, Data::SyncthingErrorCategory category, int networkError);
QString message;
QUrl url;
QByteArray response;