Prepare for "Prepare to Sync"

See https://github.com/syncthing/syncthing/pull/6028
This commit is contained in:
Martchus 2019-09-27 16:32:54 +02:00
parent e7f5dc9b48
commit 6243a4c2fd
6 changed files with 30 additions and 4 deletions

View File

@ -794,11 +794,14 @@ void SyncthingConnection::setStatus(SyncthingStatus status)
// reset reconnect tries
m_autoReconnectTries = 0;
// check whether at least one directory is scanning or synchronizing
// check whether at least one directory is scanning, preparing to synchronize or synchronizing
// note: We don't distinguish between "preparing to sync" and "synchronizing" for computing the overall
// status at the moment.
bool scanning = false;
bool synchronizing = false;
for (const SyncthingDir &dir : m_dirs) {
switch (dir.status) {
case SyncthingDirStatus::PreparingToSync:
case SyncthingDirStatus::Synchronizing:
synchronizing = true;
break;
@ -807,6 +810,9 @@ void SyncthingConnection::setStatus(SyncthingStatus status)
break;
default:;
}
if (synchronizing) {
break; // skip remaining dirs, "synchronizing" overrides "scanning" anyways
}
}
if (synchronizing) {

View File

@ -19,6 +19,8 @@ QString statusString(SyncthingDirStatus status)
return QCoreApplication::translate("SyncthingDirStatus", "idle");
case SyncthingDirStatus::Scanning:
return QCoreApplication::translate("SyncthingDirStatus", "scanning");
case SyncthingDirStatus::PreparingToSync:
return QCoreApplication::translate("SyncthingDirStatus", "preparing to sync");
case SyncthingDirStatus::Synchronizing:
return QCoreApplication::translate("SyncthingDirStatus", "synchronizing");
case SyncthingDirStatus::OutOfSync:
@ -55,7 +57,7 @@ bool SyncthingDir::checkWhetherStatusUpdateRelevant(DateTime time)
bool SyncthingDir::finalizeStatusUpdate(SyncthingDirStatus newStatus, DateTime time)
{
// handle obsoletion of out-of-sync items: no FolderErrors are accepted older than the last "sync" state are accepted
if (newStatus == SyncthingDirStatus::Synchronizing) {
if (newStatus == SyncthingDirStatus::PreparingToSync || newStatus == SyncthingDirStatus::Synchronizing) {
// update time of last "sync" state and obsolete currently assigned errors
lastSyncStarted = time; // used internally and not displayed, hence keep it GMT
itemErrors.clear();
@ -101,6 +103,12 @@ bool SyncthingDir::assignStatus(const QString &statusStr, CppUtilities::DateTime
newStatus = SyncthingDirStatus::Idle;
} else if (statusStr == QLatin1String("scanning")) {
newStatus = SyncthingDirStatus::Scanning;
} else if (statusStr == QLatin1String("sync-preparing")) {
// ensure status changed signal is emitted
if (!itemErrors.empty()) {
status = SyncthingDirStatus::Unknown;
}
newStatus = SyncthingDirStatus::PreparingToSync;
} else if (statusStr == QLatin1String("syncing")) {
// ensure status changed signal is emitted
if (!itemErrors.empty()) {

View File

@ -12,7 +12,7 @@
namespace Data {
enum class SyncthingDirStatus { Unknown, Idle, Scanning, Synchronizing, OutOfSync };
enum class SyncthingDirStatus { Unknown, Idle, Scanning, PreparingToSync, Synchronizing, OutOfSync };
QString LIB_SYNCTHING_CONNECTOR_EXPORT statusString(SyncthingDirStatus status);

View File

@ -221,13 +221,20 @@ void MiscTests::testSyncthingDir()
CPPUNIT_ASSERT(!dir.assignStatus(SyncthingDirStatus::Idle, updateTime += TimeSpan::fromMinutes(1.5)));
CPPUNIT_ASSERT_EQUAL(updateTime, dir.lastSyncStarted);
const auto lastSyncTime(updateTime += TimeSpan::fromMinutes(1.5));
dir.itemErrors.emplace_back();
CPPUNIT_ASSERT(dir.assignStatus(SyncthingDirStatus::Synchronizing, lastSyncTime));
CPPUNIT_ASSERT_EQUAL(QStringLiteral("synchronizing"), dir.statusString());
CPPUNIT_ASSERT_EQUAL(0_st, dir.itemErrors.size());
CPPUNIT_ASSERT_EQUAL(lastSyncTime, dir.lastSyncStarted);
const auto lastSyncTime2(updateTime += TimeSpan::fromMinutes(2.0));
dir.itemErrors.emplace_back();
CPPUNIT_ASSERT(dir.assignStatus(SyncthingDirStatus::PreparingToSync, lastSyncTime2));
CPPUNIT_ASSERT_EQUAL(QStringLiteral("preparing to sync"), dir.statusString());
CPPUNIT_ASSERT_EQUAL(0_st, dir.itemErrors.size());
CPPUNIT_ASSERT_EQUAL(lastSyncTime2, dir.lastSyncStarted);
CPPUNIT_ASSERT(dir.assignStatus(SyncthingDirStatus::Idle, updateTime += TimeSpan::fromMinutes(1.5)));
CPPUNIT_ASSERT_EQUAL(lastSyncTime, dir.lastSyncStarted);
CPPUNIT_ASSERT_EQUAL(lastSyncTime2, dir.lastSyncStarted);
CPPUNIT_ASSERT(dir.assignStatus(QStringLiteral("syncing"), updateTime += TimeSpan::fromMinutes(1.5)));
CPPUNIT_ASSERT_EQUAL(updateTime, dir.lastSyncStarted);

View File

@ -54,6 +54,7 @@ bool SyncthingDirActions::updateStatus(const SyncthingDir &dir)
case SyncthingDirStatus::Scanning:
m_statusAction.setIcon(statusIcons().scanninig);
break;
case SyncthingDirStatus::PreparingToSync:
case SyncthingDirStatus::Synchronizing:
m_statusAction.setIcon(statusIcons().sync);
break;

View File

@ -316,6 +316,7 @@ QVariant SyncthingDirectoryModel::data(const QModelIndex &index, int role) const
return statusIcons().idling;
case SyncthingDirStatus::Scanning:
return statusIcons().scanninig;
case SyncthingDirStatus::PreparingToSync:
case SyncthingDirStatus::Synchronizing:
return statusIcons().sync;
case SyncthingDirStatus::OutOfSync:
@ -466,6 +467,8 @@ QString SyncthingDirectoryModel::dirStatusString(const SyncthingDir &dir)
return tr("Scanning (%1 %)").arg(dir.scanningPercentage);
}
return tr("Scanning");
case SyncthingDirStatus::PreparingToSync:
return tr("Preparing to sync");
case SyncthingDirStatus::Synchronizing:
return dir.completionPercentage > 0 ? tr("Synchronizing (%1 %)").arg(dir.completionPercentage) : tr("Synchronizing");
case SyncthingDirStatus::OutOfSync:
@ -488,6 +491,7 @@ QVariant SyncthingDirectoryModel::dirStatusColor(const SyncthingDir &dir) const
case SyncthingDirStatus::Idle:
return Colors::green(m_brightColors);
case SyncthingDirStatus::Scanning:
case SyncthingDirStatus::PreparingToSync:
case SyncthingDirStatus::Synchronizing:
return Colors::blue(m_brightColors);
case SyncthingDirStatus::OutOfSync: