Add high-level notifications for new devs and dirs

This commit is contained in:
Martchus 2018-05-01 22:23:54 +02:00
parent 2c27cc27d0
commit 3857079f7e
2 changed files with 46 additions and 1 deletions

View File

@ -39,6 +39,8 @@ SyncthingNotifier::SyncthingNotifier(const SyncthingConnection &connection, QObj
{
connect(&connection, &SyncthingConnection::statusChanged, this, &SyncthingNotifier::handleStatusChangedEvent);
connect(&connection, &SyncthingConnection::dirCompleted, this, &SyncthingNotifier::emitSyncComplete);
connect(&connection, &SyncthingConnection::newDevAvailable, this, &SyncthingNotifier::handleNewDevEvent);
connect(&connection, &SyncthingConnection::newDirAvailable, this, &SyncthingNotifier::handleNewDirEvent);
}
void SyncthingNotifier::handleStatusChangedEvent(SyncthingStatus newStatus)
@ -57,6 +59,39 @@ void SyncthingNotifier::handleStatusChangedEvent(SyncthingStatus newStatus)
m_previousStatus = newStatus;
}
void SyncthingNotifier::handleNewDevEvent(DateTime when, const QString &devId, const QString &address)
{
VAR_UNUSED(when)
// ignore if not enabled
if (!(m_enabledNotifications & SyncthingHighLevelNotification::NewDevice)) {
return;
}
emit newDevice(devId, tr("Device %1 (%2) wants to connect.").arg(devId, address));
}
void SyncthingNotifier::handleNewDirEvent(DateTime when, const QString &devId, const SyncthingDev *dev, const QString &dirId, const QString &dirLabel)
{
VAR_UNUSED(when)
// ignore if not enabled
if (!(m_enabledNotifications & SyncthingHighLevelNotification::NewDir)) {
return;
}
// format message
const auto message([&devId, dev, &dirId, &dirLabel] {
const auto devPrefix(dev ? (tr("Device ") + dev->displayName()) : (tr("Unknown device ") + devId));
if (dirLabel.isEmpty()) {
return devPrefix + tr(" wants to share directory %1.").arg(dirId);
} else {
return devPrefix + tr(" wants to share directory %1 (%2).").arg(dirLabel, dirId);
}
}());
emit newDir(devId, dirId, message);
}
/*!
* \brief Returns whether a "disconnected" notification should be shown.
* \todo Unify with InternalError::isRelevant().

View File

@ -27,6 +27,8 @@ enum class SyncthingHighLevelNotification {
ConnectedDisconnected = 0x1,
LocalSyncComplete = 0x2,
RemoteSyncComplete = 0x4,
NewDevice = 0x8,
NewDir = 0x10,
};
/// \cond
@ -68,11 +70,19 @@ Q_SIGNALS:
void connected();
///! \brief Emitted when the connection to Syncthing has been interrupted.
void disconnected();
///! \brief Emitted when the specified \a dirs have been completed synchronization.
///! \brief Emitted when one or more directories have completed synchronization.
///! \remarks Both, local and remote devices, are taken into account.
void syncComplete(const QString &message);
///! \brief Emitted when a new device talks to us.
void newDevice(const QString &devId, const QString &message);
///! \brief Emitted when a new directory is shared with us.
void newDir(const QString &devId, const QString &dirId, const QString &message);
private Q_SLOTS:
void handleStatusChangedEvent(SyncthingStatus newStatus);
void handleNewDevEvent(ChronoUtilities::DateTime when, const QString &devId, const QString &address);
void handleNewDirEvent(
ChronoUtilities::DateTime when, const QString &devId, const SyncthingDev *dev, const QString &dirId, const QString &dirLabel);
private:
bool isDisconnectRelevant() const;