|
3 | 3 | #include <c++utilities/conversion/stringconversion.h>
|
4 | 4 |
|
5 | 5 | #include <QCoreApplication>
|
| 6 | +#include <QHash> |
6 | 7 | #include <QJsonObject>
|
7 | 8 | #include <QStringBuilder>
|
8 | 9 |
|
@@ -107,49 +108,47 @@ bool SyncthingDir::finalizeStatusUpdate(SyncthingDirStatus newStatus, SyncthingE
|
107 | 108 | /*!
|
108 | 109 | * \brief Assigns the status from the specified status string.
|
109 | 110 | * \returns Returns whether the status has actually changed.
|
| 111 | + * \remarks |
| 112 | + * The status mapping is defined by `lib/model/folderstate.go`. Additional statuses are made up on UI-level |
| 113 | + * in `gui/default/syncthing/core/syncthingController.js` but those are not handled by this function. |
110 | 114 | */
|
111 | 115 | bool SyncthingDir::assignStatus(const QString &statusStr, SyncthingEventId eventId, CppUtilities::DateTime time)
|
112 | 116 | {
|
113 | 117 | if (!checkWhetherStatusUpdateRelevant(eventId, time)) {
|
114 | 118 | return false;
|
115 | 119 | }
|
116 | 120 |
|
117 |
| - // identify statusStr |
118 |
| - SyncthingDirStatus newStatus; |
119 |
| - if (statusStr == QLatin1String("idle")) { |
| 121 | + static const auto statusMapping = QHash<QString, SyncthingDirStatus>{ |
| 122 | + {QStringLiteral("idle"), SyncthingDirStatus::Idle}, |
| 123 | + {QStringLiteral("scanning"), SyncthingDirStatus::Scanning}, |
| 124 | + {QStringLiteral("scan-waiting"), SyncthingDirStatus::WaitingToScan}, |
| 125 | + {QStringLiteral("sync-waiting"), SyncthingDirStatus::WaitingToSync}, |
| 126 | + {QStringLiteral("sync-preparing"), SyncthingDirStatus::PreparingToSync}, |
| 127 | + {QStringLiteral("syncing"), SyncthingDirStatus::Synchronizing}, |
| 128 | + {QStringLiteral("cleaning"), SyncthingDirStatus::Cleaning}, |
| 129 | + {QStringLiteral("clean-waiting"), SyncthingDirStatus::WaitingToClean}, |
| 130 | + {QStringLiteral("error"), SyncthingDirStatus::OutOfSync}, |
| 131 | + }; |
| 132 | + |
| 133 | + const auto i = statusMapping.find(statusStr); |
| 134 | + const auto newStatus = i != statusMapping.cend() ? *i : SyncthingDirStatus::Unknown; |
| 135 | + switch (newStatus) { |
| 136 | + case SyncthingDirStatus::Idle: |
| 137 | + case SyncthingDirStatus::OutOfSync: |
120 | 138 | completionPercentage = 0;
|
121 |
| - newStatus = SyncthingDirStatus::Idle; |
122 |
| - } else if (statusStr == QLatin1String("scanning")) { |
123 |
| - newStatus = SyncthingDirStatus::Scanning; |
124 |
| - } else if (statusStr == QLatin1String("scan-waiting")) { |
125 |
| - newStatus = SyncthingDirStatus::WaitingToScan; |
126 |
| - } else if (statusStr == QLatin1String("sync-waiting")) { |
127 |
| - newStatus = SyncthingDirStatus::WaitingToSync; |
128 |
| - } else if (statusStr == QLatin1String("sync-preparing")) { |
129 |
| - // ensure status changed signal is emitted |
130 |
| - if (!itemErrors.empty()) { |
131 |
| - status = SyncthingDirStatus::Unknown; |
132 |
| - } |
133 |
| - newStatus = SyncthingDirStatus::PreparingToSync; |
134 |
| - } else if (statusStr == QLatin1String("syncing")) { |
| 139 | + break; |
| 140 | + case Data::SyncthingDirStatus::WaitingToSync: |
| 141 | + case Data::SyncthingDirStatus::PreparingToSync: |
135 | 142 | // ensure status changed signal is emitted
|
136 | 143 | if (!itemErrors.empty()) {
|
137 | 144 | status = SyncthingDirStatus::Unknown;
|
138 | 145 | }
|
139 |
| - newStatus = SyncthingDirStatus::Synchronizing; |
140 |
| - } else if (statusStr == QLatin1String("cleaning")) { |
141 |
| - newStatus = SyncthingDirStatus::Cleaning; |
142 |
| - } else if (statusStr == QLatin1String("clean-waiting")) { |
143 |
| - newStatus = SyncthingDirStatus::WaitingToClean; |
144 |
| - } else if (statusStr == QLatin1String("error")) { |
145 |
| - completionPercentage = 0; |
146 |
| - newStatus = SyncthingDirStatus::OutOfSync; |
147 |
| - } else { |
148 |
| - newStatus = SyncthingDirStatus::Idle; |
| 146 | + break; |
| 147 | + default: |
| 148 | + ; |
149 | 149 | }
|
150 | 150 |
|
151 | 151 | rawStatus = statusStr;
|
152 |
| - |
153 | 152 | return finalizeStatusUpdate(newStatus, eventId, time);
|
154 | 153 | }
|
155 | 154 |
|
|
0 commit comments