Handle new folder types

See https://github.com/syncthing/syncthing/pull/4942
This commit is contained in:
Martchus 2018-05-12 23:08:57 +02:00
parent f8dabbc78d
commit 2fcc94f567
7 changed files with 52 additions and 12 deletions

View File

@ -10,7 +10,7 @@ set(META_APP_CATEGORIES "Network;FileTransfer")
set(META_GUI_OPTIONAL false) set(META_GUI_OPTIONAL false)
set(META_VERSION_MAJOR 0) set(META_VERSION_MAJOR 0)
set(META_VERSION_MINOR 8) set(META_VERSION_MINOR 8)
set(META_VERSION_PATCH 0) set(META_VERSION_PATCH 1)
set(META_VERSION_EXACT_SONAME ON) set(META_VERSION_EXACT_SONAME ON)
project(${META_PROJECT_NAME}) project(${META_PROJECT_NAME})

View File

@ -523,7 +523,7 @@ void Application::printDir(const RelevantDir &relevantDir) const
nullptr, 6); nullptr, 6);
} }
} }
printProperty("Read-only", dir->readOnly); printProperty("Type", dir->dirTypeString());
printProperty("Ignore permissions", dir->ignorePermissions); printProperty("Ignore permissions", dir->ignorePermissions);
printProperty("Auto-normalize", dir->autoNormalize); printProperty("Auto-normalize", dir->autoNormalize);
printProperty("Rescan interval", TimeSpan::fromSeconds(dir->rescanInterval)); printProperty("Rescan interval", TimeSpan::fromSeconds(dir->rescanInterval));

View File

@ -1116,7 +1116,7 @@ void SyncthingConnection::readDirs(const QJsonArray &dirs)
} }
} }
} }
dirItem->readOnly = dirObj.value(QStringLiteral("readOnly")).toBool(false); dirItem->assignDirType(dirObj.value(QLatin1String("type")).toString());
dirItem->rescanInterval = dirObj.value(QStringLiteral("rescanIntervalS")).toInt(-1); dirItem->rescanInterval = dirObj.value(QStringLiteral("rescanIntervalS")).toInt(-1);
dirItem->ignorePermissions = dirObj.value(QStringLiteral("ignorePerms")).toBool(false); dirItem->ignorePermissions = dirObj.value(QStringLiteral("ignorePerms")).toBool(false);
dirItem->autoNormalize = dirObj.value(QStringLiteral("autoNormalize")).toBool(false); dirItem->autoNormalize = dirObj.value(QStringLiteral("autoNormalize")).toBool(false);

View File

@ -29,6 +29,20 @@ QString statusString(SyncthingDirStatus status)
default: default:
return QString(); return QString();
} }
QString dirTypeString(SyncthingDirType dirType)
{
switch (dirType) {
case SyncthingDirType::Unknown:
return QCoreApplication::translate("SyncthingDirType", "unknown");
case SyncthingDirType::SendReceive:
return QCoreApplication::translate("SyncthingDirType", "Send & Receive");
case SyncthingDirType::SendOnly:
return QCoreApplication::translate("SyncthingDirType", "Send only");
case SyncthingDirType::ReceiveOnly:
return QCoreApplication::translate("SyncthingDirType", "Receive only");
}
return QString();
} }
bool SyncthingDir::checkWhetherStatusUpdateRelevant(DateTime time) bool SyncthingDir::checkWhetherStatusUpdateRelevant(DateTime time)
@ -110,6 +124,21 @@ bool SyncthingDir::assignStatus(const QString &statusStr, ChronoUtilities::DateT
return finalizeStatusUpdate(newStatus); return finalizeStatusUpdate(newStatus);
} }
bool SyncthingDir::assignDirType(const QString &dirTypeStr)
{
if (dirTypeStr == QLatin1String("sendreceive") || dirTypeStr == QLatin1String("readwrite")) {
dirType = SyncthingDirType::SendReceive;
} else if (dirTypeStr == QLatin1String("sendonly") || dirTypeStr == QLatin1String("readonly")) {
dirType = SyncthingDirType::SendOnly;
} else if (dirTypeStr == QLatin1String("receiveonly")) {
dirType = SyncthingDirType::ReceiveOnly;
} else {
dirType = SyncthingDirType::Unknown;
return false;
}
return true;
}
QString SyncthingDir::statusString() const QString SyncthingDir::statusString() const
{ {
if (paused) { if (paused) {

View File

@ -14,7 +14,11 @@ namespace Data {
enum class SyncthingDirStatus { Unknown, Idle, Unshared, Scanning, Synchronizing, OutOfSync }; enum class SyncthingDirStatus { Unknown, Idle, Unshared, Scanning, Synchronizing, OutOfSync };
QString statusString(SyncthingDirStatus status); QString LIB_SYNCTHING_CONNECTOR_EXPORT statusString(SyncthingDirStatus status);
enum class SyncthingDirType { Unknown, SendReceive, SendOnly, ReceiveOnly };
QString LIB_SYNCTHING_CONNECTOR_EXPORT dirTypeString(SyncthingDirType dirType);
struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingItemError { struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingItemError {
SyncthingItemError(const QString &message = QString(), const QString &path = QString()) SyncthingItemError(const QString &message = QString(), const QString &path = QString())
@ -111,8 +115,10 @@ struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDir {
SyncthingDir(const QString &id = QString(), const QString &label = QString(), const QString &path = QString()); SyncthingDir(const QString &id = QString(), const QString &label = QString(), const QString &path = QString());
bool assignStatus(const QString &statusStr, ChronoUtilities::DateTime time); bool assignStatus(const QString &statusStr, ChronoUtilities::DateTime time);
bool assignStatus(SyncthingDirStatus newStatus, ChronoUtilities::DateTime time); bool assignStatus(SyncthingDirStatus newStatus, ChronoUtilities::DateTime time);
bool assignDirType(const QString &dirType);
const QString &displayName() const; const QString &displayName() const;
QString statusString() const; QString statusString() const;
QString dirTypeString() const;
QStringRef pathWithoutTrailingSlash() const; QStringRef pathWithoutTrailingSlash() const;
bool isLocallyUpToDate() const; bool isLocallyUpToDate() const;
bool areRemotesUpToDate() const; bool areRemotesUpToDate() const;
@ -122,10 +128,7 @@ struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDir {
QString path; QString path;
QStringList deviceIds; QStringList deviceIds;
QStringList deviceNames; QStringList deviceNames;
bool readOnly = false; SyncthingDirType dirType = SyncthingDirType::Unknown;
bool ignorePermissions = false;
bool ignorePatterns = false;
bool autoNormalize = false;
int rescanInterval = 0; int rescanInterval = 0;
int minDiskFreePercentage = 0; int minDiskFreePercentage = 0;
SyncthingDirStatus status = SyncthingDirStatus::Idle; SyncthingDirStatus status = SyncthingDirStatus::Idle;
@ -147,6 +150,9 @@ struct LIB_SYNCTHING_CONNECTOR_EXPORT SyncthingDir {
int blocksToBeDownloaded = 0; int blocksToBeDownloaded = 0;
QString downloadLabel; QString downloadLabel;
unsigned int downloadPercentage = 0; unsigned int downloadPercentage = 0;
bool ignorePermissions = false;
bool ignorePatterns = false;
bool autoNormalize = false;
bool paused = false; bool paused = false;
bool lastFileDeleted = false; bool lastFileDeleted = false;
@ -167,6 +173,11 @@ inline const QString &SyncthingDir::displayName() const
return label.isEmpty() ? id : label; return label.isEmpty() ? id : label;
} }
inline QString SyncthingDir::dirTypeString() const
{
return ::Data::dirTypeString(dirType);
}
inline bool SyncthingDir::isLocallyUpToDate() const inline bool SyncthingDir::isLocallyUpToDate() const
{ {
return neededStats.isNull(); return neededStats.isNull();

View File

@ -390,7 +390,7 @@ void ConnectionTests::checkDirectories() const
CPPUNIT_ASSERT_EQUAL(QStringLiteral("test1"), dir1.displayName()); CPPUNIT_ASSERT_EQUAL(QStringLiteral("test1"), dir1.displayName());
CPPUNIT_ASSERT_EQUAL(QStringLiteral("/tmp/some/path/1/"), dir1.path); CPPUNIT_ASSERT_EQUAL(QStringLiteral("/tmp/some/path/1/"), dir1.path);
CPPUNIT_ASSERT_EQUAL(QStringLiteral("idle"), dir1.statusString()); CPPUNIT_ASSERT_EQUAL(QStringLiteral("idle"), dir1.statusString());
CPPUNIT_ASSERT(!dir1.readOnly); CPPUNIT_ASSERT_EQUAL(SyncthingDirType::SendReceive, dir1.dirType);
CPPUNIT_ASSERT(!dir1.paused); CPPUNIT_ASSERT(!dir1.paused);
CPPUNIT_ASSERT_EQUAL(QSet<QString>({ QStringLiteral("MMGUI6U-WUEZQCP-XZZ6VYB-LCT4TVC-ER2HAVX-QYT6X7D-S6ZSG2B-323KLQ7"), CPPUNIT_ASSERT_EQUAL(QSet<QString>({ QStringLiteral("MMGUI6U-WUEZQCP-XZZ6VYB-LCT4TVC-ER2HAVX-QYT6X7D-S6ZSG2B-323KLQ7"),
QStringLiteral("6EIS2PN-J2IHWGS-AXS3YUL-HC5FT3K-77ZXTLL-AKQLJ4C-7SWVPUS-AZW4RQ4") }), QStringLiteral("6EIS2PN-J2IHWGS-AXS3YUL-HC5FT3K-77ZXTLL-AKQLJ4C-7SWVPUS-AZW4RQ4") }),
@ -403,7 +403,7 @@ void ConnectionTests::checkDirectories() const
CPPUNIT_ASSERT_EQUAL(QStringLiteral("/tmp/some/path/2/"), dir2.path); CPPUNIT_ASSERT_EQUAL(QStringLiteral("/tmp/some/path/2/"), dir2.path);
CPPUNIT_ASSERT_EQUAL(QStringLiteral("/tmp/some/path/2"), dir2.pathWithoutTrailingSlash().toString()); CPPUNIT_ASSERT_EQUAL(QStringLiteral("/tmp/some/path/2"), dir2.pathWithoutTrailingSlash().toString());
CPPUNIT_ASSERT_EQUAL(QStringLiteral("paused"), dir2.statusString()); CPPUNIT_ASSERT_EQUAL(QStringLiteral("paused"), dir2.statusString());
CPPUNIT_ASSERT(!dir2.readOnly); CPPUNIT_ASSERT_EQUAL(SyncthingDirType::SendReceive, dir2.dirType);
CPPUNIT_ASSERT(dir2.paused); CPPUNIT_ASSERT(dir2.paused);
CPPUNIT_ASSERT_EQUAL( CPPUNIT_ASSERT_EQUAL(
QSet<QString>({ QStringLiteral("MMGUI6U-WUEZQCP-XZZ6VYB-LCT4TVC-ER2HAVX-QYT6X7D-S6ZSG2B-323KLQ7") }), dir2.deviceIds.toSet()); QSet<QString>({ QStringLiteral("MMGUI6U-WUEZQCP-XZZ6VYB-LCT4TVC-ER2HAVX-QYT6X7D-S6ZSG2B-323KLQ7") }), dir2.deviceIds.toSet());

View File

@ -125,7 +125,7 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const
case 4: case 4:
return tr("Shared with"); return tr("Shared with");
case 5: case 5:
return tr("Read-only"); return tr("Type");
case 6: case 6:
return tr("Rescan interval"); return tr("Rescan interval");
case 7: case 7:
@ -160,7 +160,7 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const
return tr("not shared"); return tr("not shared");
} }
case 5: case 5:
return dir.readOnly ? tr("yes") : tr("no"); return dir.dirTypeString();
case 6: case 6:
return QString::fromLatin1( return QString::fromLatin1(
TimeSpan::fromSeconds(dir.rescanInterval).toString(TimeSpanOutputFormat::WithMeasures, true).data()); TimeSpan::fromSeconds(dir.rescanInterval).toString(TimeSpanOutputFormat::WithMeasures, true).data());