From fc13a8f146d8fcd4841509ad5fd3fd1aca535a29 Mon Sep 17 00:00:00 2001 From: Martchus Date: Mon, 20 Feb 2017 21:00:18 +0100 Subject: [PATCH] Read paused state of directories --- cli/application.cpp | 10 +--- connector/syncthingconnection.cpp | 17 +++++- connector/syncthingdev.cpp | 9 +++ connector/syncthingdev.h | 2 + connector/syncthingdir.cpp | 11 +++- connector/syncthingdir.h | 7 ++- .../translations/syncthingconnector_de_DE.ts | 55 +++++++++++------- .../translations/syncthingconnector_en_US.ts | 55 +++++++++++------- .../syncthingfileitemaction.cpp | 41 ++++++------- model/syncthingdirectorymodel.cpp | 57 +++++++++++-------- model/translations/syncthingmodel_de_DE.ts | 18 +++--- model/translations/syncthingmodel_en_US.ts | 18 +++--- tray/translations/syncthingtray_de_DE.ts | 2 +- tray/translations/syncthingtray_en_US.ts | 2 +- 14 files changed, 182 insertions(+), 122 deletions(-) diff --git a/cli/application.cpp b/cli/application.cpp index 7204aa1..acb37f5 100644 --- a/cli/application.cpp +++ b/cli/application.cpp @@ -327,7 +327,7 @@ void Application::printStatus(const ArgumentOccurrence &) setStyle(cout); printProperty("Label", dir->label); printProperty("Path", dir->path); - printProperty("Status", statusString(dir->status)); + printProperty("Status", dir->statusString()); printProperty("Last scan time", dir->lastScanTime); printProperty("Last file time", dir->lastFileTime); printProperty("Last file name", dir->lastFileName); @@ -360,13 +360,7 @@ void Application::printStatus(const ArgumentOccurrence &) cout << dev->name.toLocal8Bit().data() << '\n'; setStyle(cout); printProperty("ID", dev->id); - QString status; - if(dev->paused) { - status = QStringLiteral("paused"); - } else { - status = statusString(dev->status); - } - printProperty("Status", status); + printProperty("Status", dev->statusString()); printProperty("Addresses", dev->addresses); printProperty("Compression", dev->compression); printProperty("Cert name", dev->certName); diff --git a/connector/syncthingconnection.cpp b/connector/syncthingconnection.cpp index 41a48da..e3b6f4a 100644 --- a/connector/syncthingconnection.cpp +++ b/connector/syncthingconnection.cpp @@ -804,6 +804,7 @@ void SyncthingConnection::readDirs(const QJsonArray &dirs) dirItem->ignorePermissions = dirObj.value(QStringLiteral("ignorePerms")).toBool(false); dirItem->autoNormalize = dirObj.value(QStringLiteral("autoNormalize")).toBool(false); dirItem->minDiskFreePercentage = dirObj.value(QStringLiteral("minDiskFreePct")).toInt(-1); + dirItem->paused = dirObj.value(QStringLiteral("paused")).toBool(dirItem->paused); } } m_dirs.swap(newDirs); @@ -830,6 +831,7 @@ void SyncthingConnection::readDevs(const QJsonArray &devs) devItem->certName = devObj.value(QStringLiteral("certName")).toString(); devItem->introducer = devObj.value(QStringLiteral("introducer")).toBool(false); devItem->status = devItem->id == m_myId ? SyncthingDevStatus::OwnDevice : SyncthingDevStatus::Unknown; + devItem->paused = devObj.value(QStringLiteral("paused")).toBool(devItem->paused); } } m_devs.swap(newDevs); @@ -1297,7 +1299,10 @@ void SyncthingConnection::readDownloadProgressEvent(DateTime eventTime, const QJ */ void SyncthingConnection::readDirEvent(DateTime eventTime, const QString &eventType, const QJsonObject &eventData) { - const QString dir(eventData.value(QStringLiteral("folder")).toString()); + QString dir(eventData.value(QStringLiteral("folder")).toString()); + if(dir.isEmpty()) { + dir = eventData.value(QStringLiteral("id")).toString(); + } if(!dir.isEmpty()) { int index; if(SyncthingDir *dirInfo = findDirInfo(dir, index)) { @@ -1359,6 +1364,16 @@ void SyncthingConnection::readDirEvent(DateTime eventTime, const QString &eventT dirInfo->assignStatus(SyncthingDirStatus::Scanning, eventTime); // ensure state is scanning emit dirStatusChanged(*dirInfo, index); } + } else if(eventType == QLatin1String("FolderPaused")) { + if(!dirInfo->paused) { + dirInfo->paused = true; + emit dirStatusChanged(*dirInfo, index); + } + } else if(eventType == QLatin1String("FolderResumed")) { + if(dirInfo->paused) { + dirInfo->paused = false; + emit dirStatusChanged(*dirInfo, index); + } } } } diff --git a/connector/syncthingdev.cpp b/connector/syncthingdev.cpp index 98aead4..5f6ba56 100644 --- a/connector/syncthingdev.cpp +++ b/connector/syncthingdev.cpp @@ -24,4 +24,13 @@ QString statusString(SyncthingDevStatus status) } } +QString SyncthingDev::statusString() const +{ + if(paused) { + return QCoreApplication::translate("SyncthingDev", "paused"); + } else { + return ::Data::statusString(status); + } +} + } // namespace Data diff --git a/connector/syncthingdev.h b/connector/syncthingdev.h index 6e5d47e..fc11ea5 100644 --- a/connector/syncthingdev.h +++ b/connector/syncthingdev.h @@ -26,6 +26,8 @@ QString statusString(SyncthingDevStatus status); struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDev { SyncthingDev(const QString &id = QString(), const QString &name = QString()); + QString statusString() const; + QString id; QString name; QStringList addresses; diff --git a/connector/syncthingdir.cpp b/connector/syncthingdir.cpp index 45c5702..68f6bd5 100644 --- a/connector/syncthingdir.cpp +++ b/connector/syncthingdir.cpp @@ -24,8 +24,6 @@ QString statusString(SyncthingDirStatus status) return QCoreApplication::translate("SyncthingDirStatus", "scanning"); case SyncthingDirStatus::Synchronizing: return QCoreApplication::translate("SyncthingDirStatus", "synchronizing"); - case SyncthingDirStatus::Paused: - return QCoreApplication::translate("SyncthingDirStatus", "paused"); case SyncthingDirStatus::OutOfSync: return QCoreApplication::translate("SyncthingDirStatus", "out of sync"); } @@ -121,6 +119,15 @@ bool SyncthingDir::assignStatus(SyncthingDirStatus newStatus, DateTime time) return false; } +QString SyncthingDir::statusString() const +{ + if(paused) { + return QCoreApplication::translate("SyncthingDir", "paused"); + } else { + return ::Data::statusString(status); + } +} + SyncthingItemDownloadProgress::SyncthingItemDownloadProgress(const QString &containingDirPath, const QString &relativeItemPath, const QJsonObject &values) : relativePath(relativeItemPath), fileInfo(containingDirPath % QChar('/') % QString(relativeItemPath).replace(QChar('\\'), QChar('/'))), diff --git a/connector/syncthingdir.h b/connector/syncthingdir.h index 2ae1331..e29e326 100644 --- a/connector/syncthingdir.h +++ b/connector/syncthingdir.h @@ -19,7 +19,6 @@ enum class SyncthingDirStatus Unshared, Scanning, Synchronizing, - Paused, OutOfSync }; @@ -65,7 +64,8 @@ struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDir SyncthingDir(const QString &id = QString(), const QString &label = QString(), const QString &path = QString()); bool assignStatus(const QString &statusStr, ChronoUtilities::DateTime time); bool assignStatus(SyncthingDirStatus newStatus, ChronoUtilities::DateTime time); - const QString displayName() const; + QString displayName() const; + QString statusString() const; QString id; QString label; @@ -77,6 +77,7 @@ struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDir int rescanInterval = 0; int minDiskFreePercentage = 0; SyncthingDirStatus status = SyncthingDirStatus::Idle; + bool paused = false; ChronoUtilities::DateTime lastStatusUpdate; int progressPercentage = 0; int progressRate = 0; @@ -102,7 +103,7 @@ inline SyncthingDir::SyncthingDir(const QString &id, const QString &label, const path(path) {} -inline const QString SyncthingDir::displayName() const +inline QString SyncthingDir::displayName() const { return label.isEmpty() ? id : label; } diff --git a/connector/translations/syncthingconnector_de_DE.ts b/connector/translations/syncthingconnector_de_DE.ts index b1ccdc3..02ad4dd 100644 --- a/connector/translations/syncthingconnector_de_DE.ts +++ b/connector/translations/syncthingconnector_de_DE.ts @@ -75,87 +75,87 @@ Fehler beim Abfragen der Syncthing-Konfiguration: - + Unable to parse Syncthing status: Fehler beim Auslesen des Syncthing-Status: - + Unable to request Syncthing status: Fehler beim Abfragen des Syncthing-Status: - + Unable to parse connections: Fehler beim Auslesen der Verbindungen: - + Unable to request connections: Fehler beim Abfragen der Verbindungen: - + Unable to parse directory statistics: Fehler beim Auslesen der Verzeichnisstatistiken: - + Unable to request directory statistics: Fehler beim Abfragen der Verzeichnisstatistiken: - + Unable to parse device statistics: Fehler beim Auslesen der Gerätestatistiken: - + Unable to request device statistics: Fehler beim Abfragen der Gerätestatistiken: - + Unable to parse errors: Fehler beim Auslesen der Syncthing-Fehlermeldungen: - + Unable to request errors: Fehler beim Abfragen der Syncthing-Fehlermeldungen: - + Unable to request clearing errors: - + Unable to parse Syncthing events: Fehler beim Auslesen der Syncthing-Ereignisse: - + Unable to request Syncthing events: Fehler beim Abfragen der Syncthing-Ereignisse: - + Unable to request rescan: Fehler beim Anfordern eines Verzeichnis-Rescans: - + Unable to request pause/resume: Fehler beim Anfordern Gerät zu Pausieren/Fortzusetzen: - + Unable to request restart: Fehler beim Anfordern eines Neustarts: - + Unable to request shutdown: Fehler beim Anfordern Syncthing zu beenden: @@ -196,6 +196,14 @@ gerade eben + + SyncthingDev + + + paused + + + SyncthingDevStatus @@ -234,6 +242,14 @@ + + SyncthingDir + + + paused + + + SyncthingDirStatus @@ -263,11 +279,6 @@ - paused - - - - out of sync diff --git a/connector/translations/syncthingconnector_en_US.ts b/connector/translations/syncthingconnector_en_US.ts index 9c103f6..733554f 100644 --- a/connector/translations/syncthingconnector_en_US.ts +++ b/connector/translations/syncthingconnector_en_US.ts @@ -75,87 +75,87 @@ - + Unable to parse Syncthing status: - + Unable to request Syncthing status: - + Unable to parse connections: - + Unable to request connections: - + Unable to parse directory statistics: - + Unable to request directory statistics: - + Unable to parse device statistics: - + Unable to request device statistics: - + Unable to parse errors: - + Unable to request errors: - + Unable to request clearing errors: - + Unable to parse Syncthing events: - + Unable to request Syncthing events: - + Unable to request rescan: - + Unable to request pause/resume: - + Unable to request restart: - + Unable to request shutdown: @@ -196,6 +196,14 @@ + + SyncthingDev + + + paused + + + SyncthingDevStatus @@ -234,6 +242,14 @@ + + SyncthingDir + + + paused + + + SyncthingDirStatus @@ -263,11 +279,6 @@ - paused - - - - out of sync diff --git a/fileitemactionplugin/syncthingfileitemaction.cpp b/fileitemactionplugin/syncthingfileitemaction.cpp index 1d4ca76..f779a57 100644 --- a/fileitemactionplugin/syncthingfileitemaction.cpp +++ b/fileitemactionplugin/syncthingfileitemaction.cpp @@ -202,27 +202,28 @@ QList SyncthingFileItemAction::actions(const KFileItemListProperties QAction *infoAction = menu->addSeparator(); infoAction->setIcon(QIcon::fromTheme(QStringLiteral("dialog-information"))); infoAction->setText(tr("Directory")); - QAction *statusAction = menu->addAction(tr("Status: ") + statusString(lastDir->status)); - switch(lastDir->status) { - case SyncthingDirStatus::Unknown: - case SyncthingDirStatus::Unshared: - statusAction->setIcon(statusIcons().disconnected); - break; - case SyncthingDirStatus::Idle: - statusAction->setIcon(statusIcons().idling); - break; - case SyncthingDirStatus::Scanning: - statusAction->setIcon(statusIcons().scanninig); - break; - case SyncthingDirStatus::Synchronizing: - statusAction->setIcon(statusIcons().sync); - break; - case SyncthingDirStatus::Paused: + QAction *statusAction = menu->addAction(tr("Status: ") + lastDir->statusString()); + if(lastDir->paused && lastDir->status != SyncthingDirStatus::OutOfSync) { statusAction->setIcon(statusIcons().pause); - break; - case SyncthingDirStatus::OutOfSync: - statusAction->setIcon(statusIcons().error); - break; + } else { + switch(lastDir->status) { + case SyncthingDirStatus::Unknown: + case SyncthingDirStatus::Unshared: + statusAction->setIcon(statusIcons().disconnected); + break; + case SyncthingDirStatus::Idle: + statusAction->setIcon(statusIcons().idling); + break; + case SyncthingDirStatus::Scanning: + statusAction->setIcon(statusIcons().scanninig); + break; + case SyncthingDirStatus::Synchronizing: + statusAction->setIcon(statusIcons().sync); + break; + case SyncthingDirStatus::OutOfSync: + statusAction->setIcon(statusIcons().error); + break; + } } menu->addAction(QIcon::fromTheme(QStringLiteral("accept_time_event")), tr("Last scan time: ") + agoString(lastDir->lastScanTime))->setEnabled(false); diff --git a/model/syncthingdirectorymodel.cpp b/model/syncthingdirectorymodel.cpp index 7787a21..9d8debc 100644 --- a/model/syncthingdirectorymodel.cpp +++ b/model/syncthingdirectorymodel.cpp @@ -167,14 +167,17 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const switch(index.column()) { case 0: return dir.label.isEmpty() ? dir.id : dir.label; case 1: - switch(dir.status) { - case SyncthingDirStatus::Unknown: return tr("Unknown status"); - case SyncthingDirStatus::Unshared: return tr("Unshared"); - case SyncthingDirStatus::Idle: return tr("Idle"); - case SyncthingDirStatus::Scanning: return dir.progressPercentage > 0 ? tr("Scanning (%1 %)").arg(dir.progressPercentage) : tr("Scanning"); - case SyncthingDirStatus::Synchronizing: return dir.progressPercentage > 0 ? tr("Synchronizing (%1 %)").arg(dir.progressPercentage) : tr("Synchronizing"); - case SyncthingDirStatus::Paused: return tr("Paused"); - case SyncthingDirStatus::OutOfSync: return tr("Out of sync"); + if(dir.paused && dir.status != SyncthingDirStatus::OutOfSync) { + return tr("Paused"); + } else { + switch(dir.status) { + case SyncthingDirStatus::Unknown: return tr("Unknown status"); + case SyncthingDirStatus::Unshared: return tr("Unshared"); + case SyncthingDirStatus::Idle: return tr("Idle"); + case SyncthingDirStatus::Scanning: return dir.progressPercentage > 0 ? tr("Scanning (%1 %)").arg(dir.progressPercentage) : tr("Scanning"); + case SyncthingDirStatus::Synchronizing: return dir.progressPercentage > 0 ? tr("Synchronizing (%1 %)").arg(dir.progressPercentage) : tr("Synchronizing"); + case SyncthingDirStatus::OutOfSync: return tr("Out of sync"); + } } break; } @@ -182,14 +185,17 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const case Qt::DecorationRole: switch(index.column()) { case 0: - switch(dir.status) { - case SyncthingDirStatus::Unknown: - case SyncthingDirStatus::Unshared: return statusIcons().disconnected; - case SyncthingDirStatus::Idle: return statusIcons().idling; - case SyncthingDirStatus::Scanning: return statusIcons().scanninig; - case SyncthingDirStatus::Synchronizing: return statusIcons().sync; - case SyncthingDirStatus::Paused: return statusIcons().pause; - case SyncthingDirStatus::OutOfSync: return statusIcons().error; + if(dir.paused && dir.status != SyncthingDirStatus::OutOfSync) { + return statusIcons().pause; + } else { + switch(dir.status) { + case SyncthingDirStatus::Unknown: + case SyncthingDirStatus::Unshared: return statusIcons().disconnected; + case SyncthingDirStatus::Idle: return statusIcons().idling; + case SyncthingDirStatus::Scanning: return statusIcons().scanninig; + case SyncthingDirStatus::Synchronizing: return statusIcons().sync; + case SyncthingDirStatus::OutOfSync: return statusIcons().error; + } } break; } @@ -204,14 +210,17 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const switch(index.column()) { case 0: break; case 1: - switch(dir.status) { - case SyncthingDirStatus::Unknown: break; - case SyncthingDirStatus::Idle: return Colors::green(m_brightColors); - case SyncthingDirStatus::Unshared: return Colors::orange(m_brightColors); - case SyncthingDirStatus::Scanning: - case SyncthingDirStatus::Synchronizing: return Colors::blue(m_brightColors); - case SyncthingDirStatus::Paused: break; - case SyncthingDirStatus::OutOfSync: return Colors::red(m_brightColors); + if(dir.paused && dir.status != SyncthingDirStatus::OutOfSync) { + break; + } else { + switch(dir.status) { + case SyncthingDirStatus::Unknown: break; + case SyncthingDirStatus::Idle: return Colors::green(m_brightColors); + case SyncthingDirStatus::Unshared: return Colors::orange(m_brightColors); + case SyncthingDirStatus::Scanning: + case SyncthingDirStatus::Synchronizing: return Colors::blue(m_brightColors); + case SyncthingDirStatus::OutOfSync: return Colors::red(m_brightColors); + } } break; } diff --git a/model/translations/syncthingmodel_de_DE.ts b/model/translations/syncthingmodel_de_DE.ts index b3ec123..1679589 100644 --- a/model/translations/syncthingmodel_de_DE.ts +++ b/model/translations/syncthingmodel_de_DE.ts @@ -203,47 +203,47 @@ Fehlgeschlagene Elemente - + Unknown status Unbekannter Status - + Idle Leerlauf - + Unshared Nicht geteilt - + Scanning (%1 %) Scannen (%1 %) - + Scanning Scannen - + Synchronizing (%1 %) Synchronisieren (%1 %) - + Synchronizing Synchronisieren - + Paused Pausiert - + Out of sync Nicht synchronisiert diff --git a/model/translations/syncthingmodel_en_US.ts b/model/translations/syncthingmodel_en_US.ts index 8894552..3bf3785 100644 --- a/model/translations/syncthingmodel_en_US.ts +++ b/model/translations/syncthingmodel_en_US.ts @@ -203,47 +203,47 @@ - + Unknown status - + Idle - + Unshared - + Scanning (%1 %) - + Scanning - + Synchronizing (%1 %) - + Synchronizing - + Paused - + Out of sync diff --git a/tray/translations/syncthingtray_de_DE.ts b/tray/translations/syncthingtray_de_DE.ts index 2160fc6..2b1c740 100644 --- a/tray/translations/syncthingtray_de_DE.ts +++ b/tray/translations/syncthingtray_de_DE.ts @@ -969,7 +969,7 @@ Die Weboberfläche wird stattdessen im Standardwebrowser geöffnet. Settings::restore - + Unable to load certificate "%1" when restoring settings. Fehler beim laden des Zertifikats "%1" beim wiederherstellen der Einstellungen. diff --git a/tray/translations/syncthingtray_en_US.ts b/tray/translations/syncthingtray_en_US.ts index 11d43de..8aa931c 100644 --- a/tray/translations/syncthingtray_en_US.ts +++ b/tray/translations/syncthingtray_en_US.ts @@ -964,7 +964,7 @@ The Web UI will be opened in the default web browser instead. Settings::restore - + Unable to load certificate "%1" when restoring settings.