Move SyncthingDev and SyncthingDir to extra files

This commit is contained in:
Martchus 2016-10-04 23:55:20 +02:00
parent 9fa2a028e8
commit dd8e443c15
13 changed files with 344 additions and 290 deletions

View File

@ -297,15 +297,15 @@ void Application::printStatus(const ArgumentOccurrence &)
printProperty("Path", dir->path);
const char *status;
switch(dir->status) {
case DirStatus::Idle:
case SyncthingDirStatus::Idle:
status = "idle"; break;
case DirStatus::Scanning:
case SyncthingDirStatus::Scanning:
status = "scanning"; break;
case DirStatus::Synchronizing:
case SyncthingDirStatus::Synchronizing:
status = "synchronizing"; break;
case DirStatus::Paused:
case SyncthingDirStatus::Paused:
status = "paused"; break;
case DirStatus::OutOfSync:
case SyncthingDirStatus::OutOfSync:
status = "out of sync"; break;
default:
status = "unknown";
@ -323,7 +323,7 @@ void Application::printStatus(const ArgumentOccurrence &)
printProperty("Min. free disk percentage", dir->minDiskFreePercentage);
if(!dir->errors.empty()) {
cout << " Errors\n";
for(const DirError &error : dir->errors) {
for(const SyncthingDirError &error : dir->errors) {
printProperty(" - Message", error.message);
printProperty(" File", error.path);
}
@ -348,17 +348,17 @@ void Application::printStatus(const ArgumentOccurrence &)
status = "paused";
} else {
switch(dev->status) {
case DevStatus::Disconnected:
case SyncthingDevStatus::Disconnected:
status = "disconnected"; break;
case DevStatus::OwnDevice:
case SyncthingDevStatus::OwnDevice:
status = "own device"; break;
case DevStatus::Idle:
case SyncthingDevStatus::Idle:
status = "idle"; break;
case DevStatus::Synchronizing:
case SyncthingDevStatus::Synchronizing:
status = "synchronizing"; break;
case DevStatus::OutOfSync:
case SyncthingDevStatus::OutOfSync:
status = "out of sync"; break;
case DevStatus::Rejected:
case SyncthingDevStatus::Rejected:
status = "rejected"; break;
default:
status = "unknown";

View File

@ -9,6 +9,8 @@ set(META_PROJECT_VARNAME_UPPER LIB_SYNCTHING_CONNECTOR)
# add project files
set(HEADER_FILES
syncthingdir.h
syncthingdev.h
syncthingconnection.h
syncthingconnectionsettings.h
syncthingconfig.h
@ -16,6 +18,8 @@ set(HEADER_FILES
utils.h
)
set(SRC_FILES
syncthingdir.cpp
syncthingdev.cpp
syncthingconnection.cpp
syncthingconnectionsettings.cpp
syncthingconfig.cpp

View File

@ -34,101 +34,6 @@ QNetworkAccessManager &networkAccessManager()
return *networkAccessManager;
}
/*!
* \brief Assigns the status from the specified status string.
* \returns Returns whether the status has actually changed.
*/
bool SyncthingDir::assignStatus(const QString &statusStr, ChronoUtilities::DateTime time)
{
if(lastStatusUpdate > time) {
return false;
} else {
lastStatusUpdate = time;
}
DirStatus newStatus;
if(statusStr == QLatin1String("idle")) {
progressPercentage = 0;
newStatus = errors.empty() ? DirStatus::Idle : DirStatus::OutOfSync;
} else if(statusStr == QLatin1String("scanning")) {
newStatus = DirStatus::Scanning;
} else if(statusStr == QLatin1String("syncing")) {
if(!errors.empty()) {
errors.clear(); // errors become obsolete
status = DirStatus::Unknown; // ensure status changed signal is emitted
}
newStatus = DirStatus::Synchronizing;
} else if(statusStr == QLatin1String("error")) {
progressPercentage = 0;
newStatus = DirStatus::OutOfSync;
} else {
newStatus = errors.empty() ? DirStatus::Idle : DirStatus::OutOfSync;
}
if(newStatus != status) {
switch(status) {
case DirStatus::Scanning:
lastScanTime = DateTime::now();
break;
default:
;
}
status = newStatus;
return true;
}
return false;
}
bool SyncthingDir::assignStatus(DirStatus newStatus, DateTime time)
{
if(lastStatusUpdate > time) {
return false;
} else {
lastStatusUpdate = time;
}
switch(newStatus) {
case DirStatus::Idle:
case DirStatus::Unknown:
if(!errors.empty()) {
newStatus = DirStatus::OutOfSync;
}
break;
default:
;
}
if(newStatus != status) {
switch(status) {
case DirStatus::Scanning:
lastScanTime = DateTime::now();
break;
default:
;
}
status = newStatus;
return true;
}
return false;
}
SyncthingItemDownloadProgress::SyncthingItemDownloadProgress(const QString &containingDirPath, const QString &relativeItemPath, const QJsonObject &values) :
relativePath(relativeItemPath),
fileInfo(containingDirPath % QChar('/') % QString(relativeItemPath).replace(QChar('\\'), QChar('/'))),
blocksCurrentlyDownloading(values.value(QStringLiteral("Pulling")).toInt()),
blocksAlreadyDownloaded(values.value(QStringLiteral("Pulled")).toInt()),
totalNumberOfBlocks(values.value(QStringLiteral("Total")).toInt()),
downloadPercentage((blocksAlreadyDownloaded > 0 && totalNumberOfBlocks > 0)
? (static_cast<unsigned int>(blocksAlreadyDownloaded) * 100 / static_cast<unsigned int>(totalNumberOfBlocks))
: 0),
blocksCopiedFromOrigin(values.value(QStringLiteral("CopiedFromOrigin")).toInt()),
blocksCopiedFromElsewhere(values.value(QStringLiteral("CopiedFromElsewhere")).toInt()),
blocksReused(values.value(QStringLiteral("Reused")).toInt()),
bytesAlreadyHandled(values.value(QStringLiteral("BytesDone")).toInt()),
totalNumberOfBytes(values.value(QStringLiteral("BytesTotal")).toInt()),
label(QStringLiteral("%1 / %2 - %3 %").arg(
QString::fromLatin1(dataSizeToString(blocksAlreadyDownloaded > 0 ? static_cast<uint64>(blocksAlreadyDownloaded) * syncthingBlockSize : 0).data()),
QString::fromLatin1(dataSizeToString(totalNumberOfBlocks > 0 ? static_cast<uint64>(totalNumberOfBlocks) * syncthingBlockSize : 0).data()),
QString::number(downloadPercentage))
)
{}
/*!
* \class SyncthingConnection
* \brief The SyncthingConnection class allows Qt applications to access Syncthing.
@ -199,7 +104,7 @@ QString SyncthingConnection::statusText() const
bool SyncthingConnection::hasOutOfSyncDirs() const
{
for(const SyncthingDir &dir : m_dirs) {
if(dir.status == DirStatus::OutOfSync) {
if(dir.status == SyncthingDirStatus::OutOfSync) {
return true;
}
}
@ -799,7 +704,7 @@ void SyncthingConnection::readDevs(const QJsonArray &devs)
devItem.compression = devObj.value(QStringLiteral("compression")).toString();
devItem.certName = devObj.value(QStringLiteral("certName")).toString();
devItem.introducer = devObj.value(QStringLiteral("introducer")).toBool(false);
devItem.status = devItem.id == m_myId ? DevStatus::OwnDevice : DevStatus::Unknown;
devItem.status = devItem.id == m_myId ? SyncthingDevStatus::OwnDevice : SyncthingDevStatus::Unknown;
m_devs.push_back(move(devItem));
}
}
@ -829,7 +734,7 @@ void SyncthingConnection::readStatus()
int index = 0;
for(SyncthingDev &dev : m_devs) {
if(dev.id == m_myId) {
dev.status = DevStatus::OwnDevice;
dev.status = SyncthingDevStatus::OwnDevice;
emit devStatusChanged(dev, index);
break;
}
@ -888,19 +793,19 @@ void SyncthingConnection::readConnections()
const QJsonObject connectionObj(connectionsObj.value(dev.id).toObject());
if(!connectionObj.isEmpty()) {
switch(dev.status) {
case DevStatus::OwnDevice:
case SyncthingDevStatus::OwnDevice:
break;
case DevStatus::Disconnected:
case DevStatus::Unknown:
case SyncthingDevStatus::Disconnected:
case SyncthingDevStatus::Unknown:
if(connectionObj.value(QStringLiteral("connected")).toBool(false)) {
dev.status = DevStatus::Idle;
dev.status = SyncthingDevStatus::Idle;
} else {
dev.status = DevStatus::Disconnected;
dev.status = SyncthingDevStatus::Disconnected;
}
break;
default:
if(!connectionObj.value(QStringLiteral("connected")).toBool(false)) {
dev.status = DevStatus::Disconnected;
dev.status = SyncthingDevStatus::Disconnected;
}
}
dev.paused = connectionObj.value(QStringLiteral("paused")).toBool(false);
@ -1244,10 +1149,10 @@ void SyncthingConnection::readDirEvent(DateTime eventTime, const QString &eventT
const QJsonObject error(errorVal.toObject());
if(!error.isEmpty()) {
auto &errors = dirInfo->errors;
DirError dirError(error.value(QStringLiteral("error")).toString(), error.value(QStringLiteral("path")).toString());
SyncthingDirError dirError(error.value(QStringLiteral("error")).toString(), error.value(QStringLiteral("path")).toString());
if(find(errors.cbegin(), errors.cend(), dirError) == errors.cend()) {
errors.emplace_back(move(dirError));
dirInfo->assignStatus(DirStatus::OutOfSync, eventTime);
dirInfo->assignStatus(SyncthingDirStatus::OutOfSync, eventTime);
emitNotification(eventTime, dirInfo->errors.back().message);
}
}
@ -1286,7 +1191,7 @@ void SyncthingConnection::readDirEvent(DateTime eventTime, const QString &eventT
if(current > 0 && total > 0) {
dirInfo->progressPercentage = current * 100 / total;
dirInfo->progressRate = rate;
dirInfo->assignStatus(DirStatus::Scanning, eventTime); // ensure state is scanning
dirInfo->assignStatus(SyncthingDirStatus::Scanning, eventTime); // ensure state is scanning
emit dirStatusChanged(*dirInfo, index);
}
}
@ -1307,28 +1212,28 @@ void SyncthingConnection::readDeviceEvent(DateTime eventTime, const QString &eve
// dev status changed, depending on event type
int index;
if(SyncthingDev *devInfo = findDevInfo(dev, index)) {
DevStatus status = devInfo->status;
SyncthingDevStatus status = devInfo->status;
bool paused = devInfo->paused;
if(eventType == QLatin1String("DeviceConnected")) {
status = DevStatus::Idle; // TODO: figure out when dev is actually syncing
status = SyncthingDevStatus::Idle; // TODO: figure out when dev is actually syncing
} else if(eventType == QLatin1String("DeviceDisconnected")) {
status = DevStatus::Disconnected;
status = SyncthingDevStatus::Disconnected;
} else if(eventType == QLatin1String("DevicePaused")) {
paused = true;
} else if(eventType == QLatin1String("DeviceRejected")) {
status = DevStatus::Rejected;
status = SyncthingDevStatus::Rejected;
} else if(eventType == QLatin1String("DeviceResumed")) {
paused = false;
// FIXME: correct to assume device which has just been resumed is still disconnected?
status = DevStatus::Disconnected;
status = SyncthingDevStatus::Disconnected;
} else if(eventType == QLatin1String("DeviceDiscovered")) {
// we know about this device already, set status anyways because it might still be unknown
status = DevStatus::Disconnected;
status = SyncthingDevStatus::Disconnected;
} else {
return; // can't handle other event types currently
}
if(devInfo->status != status || devInfo->paused != paused) {
if(devInfo->status != DevStatus::OwnDevice) { // don't mess with the status of the own device
if(devInfo->status != SyncthingDevStatus::OwnDevice) { // don't mess with the status of the own device
devInfo->status = status;
}
devInfo->paused = paused;
@ -1371,10 +1276,10 @@ void SyncthingConnection::readItemFinished(DateTime eventTime, const QJsonObject
}
emit dirStatusChanged(*dirInfo, index);
}
} else if(dirInfo->status == DirStatus::OutOfSync) {
} else if(dirInfo->status == SyncthingDirStatus::OutOfSync) {
// FIXME: find better way to check whether the event is still relevant
dirInfo->errors.emplace_back(error, item);
dirInfo->status = DirStatus::OutOfSync;
dirInfo->status = SyncthingDirStatus::OutOfSync;
emit dirStatusChanged(*dirInfo, index);
emitNotification(eventTime, error);
}
@ -1469,10 +1374,10 @@ void SyncthingConnection::setStatus(SyncthingStatus status)
bool scanning = false;
bool synchronizing = false;
for(const SyncthingDir &dir : m_dirs) {
if(dir.status == DirStatus::Synchronizing) {
if(dir.status == SyncthingDirStatus::Synchronizing) {
synchronizing = true;
break;
} else if(dir.status == DirStatus::Scanning) {
} else if(dir.status == SyncthingDirStatus::Scanning) {
scanning = true;
}
}

View File

@ -1,14 +1,12 @@
#ifndef SYNCTHINGCONNECTION_H
#define SYNCTHINGCONNECTION_H
#include "./global.h"
#include <c++utilities/chrono/datetime.h>
#include "./syncthingdir.h"
#include "./syncthingdev.h"
#include <QObject>
#include <QList>
#include <QSslError>
#include <QFileInfo>
#include <functional>
#include <vector>
@ -38,115 +36,6 @@ enum class SyncthingStatus
BeingDestroyed
};
enum class DirStatus
{
Unknown,
Idle,
Scanning,
Synchronizing,
Paused,
OutOfSync
};
struct LIB_SYNCTHING_CONNECTOR_EXPORT DirError
{
DirError(const QString &message, const QString &path) :
message(message),
path(path)
{}
bool operator ==(const DirError &other) const
{
return message == other.message && path == other.path;
}
QString message;
QString path;
};
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingItemDownloadProgress
{
SyncthingItemDownloadProgress(const QString &containingDirPath, const QString &relativeItemPath, const QJsonObject &values);
QString relativePath;
QFileInfo fileInfo;
int blocksCurrentlyDownloading = 0;
int blocksAlreadyDownloaded = 0;
int totalNumberOfBlocks = 0;
unsigned int downloadPercentage = 0;
int blocksCopiedFromOrigin = 0;
int blocksCopiedFromElsewhere = 0;
int blocksReused = 0;
int bytesAlreadyHandled;
int totalNumberOfBytes = 0;
QString label;
ChronoUtilities::DateTime lastUpdate;
static constexpr unsigned int syncthingBlockSize = 128 * 1024;
};
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDir
{
QString id;
QString label;
QString path;
QStringList devices;
bool readOnly = false;
bool ignorePermissions = false;
bool autoNormalize = false;
int rescanInterval = 0;
int minDiskFreePercentage = 0;
DirStatus status = DirStatus::Idle;
ChronoUtilities::DateTime lastStatusUpdate;
int progressPercentage = 0;
int progressRate = 0;
std::vector<DirError> errors;
int globalBytes = 0, globalDeleted = 0, globalFiles = 0;
int localBytes = 0, localDeleted = 0, localFiles = 0;
int neededByted = 0, neededFiles = 0;
ChronoUtilities::DateTime lastScanTime;
ChronoUtilities::DateTime lastFileTime;
QString lastFileName;
bool lastFileDeleted = false;
std::vector<SyncthingItemDownloadProgress> downloadingItems;
int blocksAlreadyDownloaded = 0;
int blocksToBeDownloaded = 0;
unsigned int downloadPercentage = 0;
QString downloadLabel;
bool assignStatus(const QString &statusStr, ChronoUtilities::DateTime time);
bool assignStatus(DirStatus newStatus, ChronoUtilities::DateTime time);
};
enum class DevStatus
{
Unknown,
Disconnected,
OwnDevice,
Idle,
Synchronizing,
OutOfSync,
Rejected
};
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDev
{
QString id;
QString name;
QStringList addresses;
QString compression;
QString certName;
DevStatus status;
int progressPercentage = 0;
int progressRate = 0;
bool introducer = false;
bool paused = false;
int totalIncomingTraffic = 0;
int totalOutgoingTraffic = 0;
QString connectionAddress;
QString connectionType;
QString clientVersion;
ChronoUtilities::DateTime lastSeen;
};
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingLogEntry
{
SyncthingLogEntry(const QString &when, const QString &message) :

View File

@ -0,0 +1,7 @@
#include "./syncthingdev.h"
namespace Data {
} // namespace Data

46
connector/syncthingdev.h Normal file
View File

@ -0,0 +1,46 @@
#ifndef DATA_SYNCTHINGDEV_H
#define DATA_SYNCTHINGDEV_H
#include "./global.h"
#include <c++utilities/chrono/datetime.h>
#include <QString>
#include <QStringList>
namespace Data {
enum class SyncthingDevStatus
{
Unknown,
Disconnected,
OwnDevice,
Idle,
Synchronizing,
OutOfSync,
Rejected
};
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDev
{
QString id;
QString name;
QStringList addresses;
QString compression;
QString certName;
SyncthingDevStatus status;
int progressPercentage = 0;
int progressRate = 0;
bool introducer = false;
bool paused = false;
int totalIncomingTraffic = 0;
int totalOutgoingTraffic = 0;
QString connectionAddress;
QString connectionType;
QString clientVersion;
ChronoUtilities::DateTime lastSeen;
};
} // namespace Data
#endif // DATA_SYNCTHINGDEV_H

108
connector/syncthingdir.cpp Normal file
View File

@ -0,0 +1,108 @@
#include "./syncthingdir.h"
#include <c++utilities/conversion/stringconversion.h>
#include <QStringBuilder>
#include <QJsonObject>
using namespace ChronoUtilities;
using namespace ConversionUtilities;
namespace Data {
/*!
* \brief Assigns the status from the specified status string.
* \returns Returns whether the status has actually changed.
*/
bool SyncthingDir::assignStatus(const QString &statusStr, ChronoUtilities::DateTime time)
{
if(lastStatusUpdate > time) {
return false;
} else {
lastStatusUpdate = time;
}
SyncthingDirStatus newStatus;
if(statusStr == QLatin1String("idle")) {
progressPercentage = 0;
newStatus = errors.empty() ? SyncthingDirStatus::Idle : SyncthingDirStatus::OutOfSync;
} else if(statusStr == QLatin1String("scanning")) {
newStatus = SyncthingDirStatus::Scanning;
} else if(statusStr == QLatin1String("syncing")) {
if(!errors.empty()) {
errors.clear(); // errors become obsolete
status = SyncthingDirStatus::Unknown; // ensure status changed signal is emitted
}
newStatus = SyncthingDirStatus::Synchronizing;
} else if(statusStr == QLatin1String("error")) {
progressPercentage = 0;
newStatus = SyncthingDirStatus::OutOfSync;
} else {
newStatus = errors.empty() ? SyncthingDirStatus::Idle : SyncthingDirStatus::OutOfSync;
}
if(newStatus != status) {
switch(status) {
case SyncthingDirStatus::Scanning:
lastScanTime = DateTime::now();
break;
default:
;
}
status = newStatus;
return true;
}
return false;
}
bool SyncthingDir::assignStatus(SyncthingDirStatus newStatus, DateTime time)
{
if(lastStatusUpdate > time) {
return false;
} else {
lastStatusUpdate = time;
}
switch(newStatus) {
case SyncthingDirStatus::Idle:
case SyncthingDirStatus::Unknown:
if(!errors.empty()) {
newStatus = SyncthingDirStatus::OutOfSync;
}
break;
default:
;
}
if(newStatus != status) {
switch(status) {
case SyncthingDirStatus::Scanning:
lastScanTime = DateTime::now();
break;
default:
;
}
status = newStatus;
return true;
}
return false;
}
SyncthingItemDownloadProgress::SyncthingItemDownloadProgress(const QString &containingDirPath, const QString &relativeItemPath, const QJsonObject &values) :
relativePath(relativeItemPath),
fileInfo(containingDirPath % QChar('/') % QString(relativeItemPath).replace(QChar('\\'), QChar('/'))),
blocksCurrentlyDownloading(values.value(QStringLiteral("Pulling")).toInt()),
blocksAlreadyDownloaded(values.value(QStringLiteral("Pulled")).toInt()),
totalNumberOfBlocks(values.value(QStringLiteral("Total")).toInt()),
downloadPercentage((blocksAlreadyDownloaded > 0 && totalNumberOfBlocks > 0)
? (static_cast<unsigned int>(blocksAlreadyDownloaded) * 100 / static_cast<unsigned int>(totalNumberOfBlocks))
: 0),
blocksCopiedFromOrigin(values.value(QStringLiteral("CopiedFromOrigin")).toInt()),
blocksCopiedFromElsewhere(values.value(QStringLiteral("CopiedFromElsewhere")).toInt()),
blocksReused(values.value(QStringLiteral("Reused")).toInt()),
bytesAlreadyHandled(values.value(QStringLiteral("BytesDone")).toInt()),
totalNumberOfBytes(values.value(QStringLiteral("BytesTotal")).toInt()),
label(QStringLiteral("%1 / %2 - %3 %").arg(
QString::fromLatin1(dataSizeToString(blocksAlreadyDownloaded > 0 ? static_cast<uint64>(blocksAlreadyDownloaded) * syncthingBlockSize : 0).data()),
QString::fromLatin1(dataSizeToString(totalNumberOfBlocks > 0 ? static_cast<uint64>(totalNumberOfBlocks) * syncthingBlockSize : 0).data()),
QString::number(downloadPercentage))
)
{}
} // namespace Data

95
connector/syncthingdir.h Normal file
View File

@ -0,0 +1,95 @@
#ifndef DATA_SYNCTHINGDIR_H
#define DATA_SYNCTHINGDIR_H
#include "./global.h"
#include <c++utilities/chrono/datetime.h>
#include <QString>
#include <QFileInfo>
QT_FORWARD_DECLARE_CLASS(QJsonObject)
namespace Data {
enum class SyncthingDirStatus
{
Unknown,
Idle,
Scanning,
Synchronizing,
Paused,
OutOfSync
};
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDirError
{
SyncthingDirError(const QString &message, const QString &path) :
message(message),
path(path)
{}
bool operator ==(const SyncthingDirError &other) const
{
return message == other.message && path == other.path;
}
QString message;
QString path;
};
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingItemDownloadProgress
{
SyncthingItemDownloadProgress(const QString &containingDirPath, const QString &relativeItemPath, const QJsonObject &values);
QString relativePath;
QFileInfo fileInfo;
int blocksCurrentlyDownloading = 0;
int blocksAlreadyDownloaded = 0;
int totalNumberOfBlocks = 0;
unsigned int downloadPercentage = 0;
int blocksCopiedFromOrigin = 0;
int blocksCopiedFromElsewhere = 0;
int blocksReused = 0;
int bytesAlreadyHandled;
int totalNumberOfBytes = 0;
QString label;
ChronoUtilities::DateTime lastUpdate;
static constexpr unsigned int syncthingBlockSize = 128 * 1024;
};
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDir
{
QString id;
QString label;
QString path;
QStringList devices;
bool readOnly = false;
bool ignorePermissions = false;
bool autoNormalize = false;
int rescanInterval = 0;
int minDiskFreePercentage = 0;
SyncthingDirStatus status = SyncthingDirStatus::Idle;
ChronoUtilities::DateTime lastStatusUpdate;
int progressPercentage = 0;
int progressRate = 0;
std::vector<SyncthingDirError> errors;
int globalBytes = 0, globalDeleted = 0, globalFiles = 0;
int localBytes = 0, localDeleted = 0, localFiles = 0;
int neededByted = 0, neededFiles = 0;
ChronoUtilities::DateTime lastScanTime;
ChronoUtilities::DateTime lastFileTime;
QString lastFileName;
bool lastFileDeleted = false;
std::vector<SyncthingItemDownloadProgress> downloadingItems;
int blocksAlreadyDownloaded = 0;
int blocksToBeDownloaded = 0;
unsigned int downloadPercentage = 0;
QString downloadLabel;
bool assignStatus(const QString &statusStr, ChronoUtilities::DateTime time);
bool assignStatus(SyncthingDirStatus newStatus, ChronoUtilities::DateTime time);
};
} // namespace Data
#endif // DATA_SYNCTHINGDIR_H

View File

@ -153,13 +153,13 @@ QVariant SyncthingDeviceModel::data(const QModelIndex &index, int role) const
return tr("Paused");
} else {
switch(dev.status) {
case DevStatus::Unknown: return tr("Unknown status");
case DevStatus::OwnDevice: return tr("Own device");
case DevStatus::Idle: return tr("Idle");
case DevStatus::Disconnected: return tr("Disconnected");
case DevStatus::Synchronizing: return dev.progressPercentage > 0 ? tr("Synchronizing (%1 %)").arg(dev.progressPercentage) : tr("Synchronizing");
case DevStatus::OutOfSync: return tr("Out of sync");
case DevStatus::Rejected: return tr("Rejected");
case SyncthingDevStatus::Unknown: return tr("Unknown status");
case SyncthingDevStatus::OwnDevice: return tr("Own device");
case SyncthingDevStatus::Idle: return tr("Idle");
case SyncthingDevStatus::Disconnected: return tr("Disconnected");
case SyncthingDevStatus::Synchronizing: return dev.progressPercentage > 0 ? tr("Synchronizing (%1 %)").arg(dev.progressPercentage) : tr("Synchronizing");
case SyncthingDevStatus::OutOfSync: return tr("Out of sync");
case SyncthingDevStatus::Rejected: return tr("Rejected");
}
}
break;
@ -172,13 +172,13 @@ QVariant SyncthingDeviceModel::data(const QModelIndex &index, int role) const
return m_pausedIcon;
} else {
switch(dev.status) {
case DevStatus::Unknown:
case DevStatus::Disconnected: return m_unknownIcon;
case DevStatus::OwnDevice:
case DevStatus::Idle: return m_idleIcon;
case DevStatus::Synchronizing: return m_syncIcon;
case DevStatus::OutOfSync:
case DevStatus::Rejected: return m_errorIcon;
case SyncthingDevStatus::Unknown:
case SyncthingDevStatus::Disconnected: return m_unknownIcon;
case SyncthingDevStatus::OwnDevice:
case SyncthingDevStatus::Idle: return m_idleIcon;
case SyncthingDevStatus::Synchronizing: return m_syncIcon;
case SyncthingDevStatus::OutOfSync:
case SyncthingDevStatus::Rejected: return m_errorIcon;
}
}
break;
@ -196,13 +196,13 @@ QVariant SyncthingDeviceModel::data(const QModelIndex &index, int role) const
case 1:
if(!dev.paused) {
switch(dev.status) {
case DevStatus::Unknown: break;
case DevStatus::Disconnected: break;
case DevStatus::OwnDevice:
case DevStatus::Idle: return QColor(Qt::darkGreen);
case DevStatus::Synchronizing: return QColor(Qt::darkBlue);
case DevStatus::OutOfSync:
case DevStatus::Rejected: return QColor(Qt::red);
case SyncthingDevStatus::Unknown: break;
case SyncthingDevStatus::Disconnected: break;
case SyncthingDevStatus::OwnDevice:
case SyncthingDevStatus::Idle: return QColor(Qt::darkGreen);
case SyncthingDevStatus::Synchronizing: return QColor(Qt::darkBlue);
case SyncthingDevStatus::OutOfSync:
case SyncthingDevStatus::Rejected: return QColor(Qt::red);
}
}
break;
@ -213,7 +213,7 @@ QVariant SyncthingDeviceModel::data(const QModelIndex &index, int role) const
case DevicePaused:
return dev.paused;
case IsOwnDevice:
return dev.status == DevStatus::OwnDevice;
return dev.status == SyncthingDevStatus::OwnDevice;
default:
;
}

View File

@ -165,12 +165,12 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const
case 0: return dir.label.isEmpty() ? dir.id : dir.label;
case 1:
switch(dir.status) {
case DirStatus::Unknown: return tr("Unknown status");
case DirStatus::Idle: return tr("Idle");
case DirStatus::Scanning: return dir.progressPercentage > 0 ? tr("Scanning (%1 %)").arg(dir.progressPercentage) : tr("Scanning");
case DirStatus::Synchronizing: return dir.progressPercentage > 0 ? tr("Synchronizing (%1 %)").arg(dir.progressPercentage) : tr("Synchronizing");
case DirStatus::Paused: return tr("Paused");
case DirStatus::OutOfSync: return tr("Out of sync");
case SyncthingDirStatus::Unknown: return tr("Unknown status");
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");
}
break;
}
@ -179,12 +179,12 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const
switch(index.column()) {
case 0:
switch(dir.status) {
case DirStatus::Unknown: return m_unknownIcon;
case DirStatus::Idle: return m_idleIcon;
case DirStatus::Scanning: return m_otherIcon;
case DirStatus::Synchronizing: return m_syncIcon;
case DirStatus::Paused: return m_pausedIcon;
case DirStatus::OutOfSync: return m_errorIcon;
case SyncthingDirStatus::Unknown: return m_unknownIcon;
case SyncthingDirStatus::Idle: return m_idleIcon;
case SyncthingDirStatus::Scanning: return m_otherIcon;
case SyncthingDirStatus::Synchronizing: return m_syncIcon;
case SyncthingDirStatus::Paused: return m_pausedIcon;
case SyncthingDirStatus::OutOfSync: return m_errorIcon;
}
break;
}
@ -200,12 +200,12 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const
case 0: break;
case 1:
switch(dir.status) {
case DirStatus::Unknown: break;
case DirStatus::Idle: return QColor(Qt::darkGreen);
case DirStatus::Scanning: return QColor(Qt::blue);
case DirStatus::Synchronizing: return QColor(Qt::blue);
case DirStatus::Paused: break;
case DirStatus::OutOfSync: return QColor(Qt::red);
case SyncthingDirStatus::Unknown: break;
case SyncthingDirStatus::Idle: return QColor(Qt::darkGreen);
case SyncthingDirStatus::Scanning: return QColor(Qt::blue);
case SyncthingDirStatus::Synchronizing: return QColor(Qt::blue);
case SyncthingDirStatus::Paused: break;
case SyncthingDirStatus::OutOfSync: return QColor(Qt::red);
}
break;
}

View File

@ -50,7 +50,7 @@ void DirView::mouseReleaseEvent(QMouseEvent *event)
// show errors
auto *textViewDlg = new TextViewDialog(tr("Errors of %1").arg(dir->label.isEmpty() ? dir->id : dir->label));
auto *browser = textViewDlg->browser();
for(const DirError &error : dir->errors) {
for(const SyncthingDirError &error : dir->errors) {
browser->append(error.path % QChar(':') % QChar(' ') % QChar('\n') % error.message % QChar('\n'));
}
textViewDlg->show();

View File

@ -287,17 +287,17 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="67"/>
<location filename="../gui/dirview.cpp" line="68"/>
<source>Copy value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="69"/>
<location filename="../gui/dirview.cpp" line="70"/>
<source>Copy label/ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="70"/>
<location filename="../gui/dirview.cpp" line="71"/>
<source>Copy path</source>
<translation type="unfinished"></translation>
</message>

View File

@ -287,17 +287,17 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="67"/>
<location filename="../gui/dirview.cpp" line="68"/>
<source>Copy value</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="69"/>
<location filename="../gui/dirview.cpp" line="70"/>
<source>Copy label/ID</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../gui/dirview.cpp" line="70"/>
<location filename="../gui/dirview.cpp" line="71"/>
<source>Copy path</source>
<translation type="unfinished"></translation>
</message>