@@ -40,9 +40,60 @@ static const char versionC[] = "version";
40
40
static const int maxFoldersVersion = 1 ;
41
41
42
42
namespace OCC {
43
-
44
43
Q_LOGGING_CATEGORY (lcFolderMan, " gui.folder.manager" , QtInfoMsg)
45
44
45
+ void TrayOverallStatusResult::addResult (const SyncResult &result)
46
+ {
47
+ _overallStatus._numNewConflictItems += result._numNewConflictItems ;
48
+ _overallStatus._numErrorItems += result._numErrorItems ;
49
+
50
+ switch (result.status ()) {
51
+ case SyncResult::Success:
52
+ // only if every result is success
53
+ if (_overallStatus.status () == SyncResult::Undefined) {
54
+ _overallStatus.setStatus (SyncResult::Success);
55
+ }
56
+ break ;
57
+ case SyncResult::Paused:
58
+ Q_FALLTHROUGH ();
59
+ case SyncResult::SyncAbortRequested:
60
+ // Problem has a high enum value but real problems and errors
61
+ // take precedence
62
+ if (_overallStatus.status () < SyncResult::Problem) {
63
+ _overallStatus.setStatus (SyncResult::Paused);
64
+ }
65
+ break ;
66
+ case SyncResult::NotYetStarted:
67
+ Q_FALLTHROUGH ();
68
+ case SyncResult::SyncPrepare:
69
+ Q_FALLTHROUGH ();
70
+ case SyncResult::SyncRunning:
71
+ if (_overallStatus.status () < SyncResult::Problem) {
72
+ _overallStatus.setStatus (SyncResult::SyncRunning);
73
+ }
74
+ break ;
75
+ case SyncResult::Undefined:
76
+ if (_overallStatus.status () < SyncResult::Problem) {
77
+ _overallStatus.setStatus (SyncResult::Problem);
78
+ }
79
+ break ;
80
+ case SyncResult::Problem:
81
+ Q_FALLTHROUGH ();
82
+ case SyncResult::Error:
83
+ Q_FALLTHROUGH ();
84
+ case SyncResult::SetupError:
85
+ if (_overallStatus.status () < result.status ()) {
86
+ _overallStatus.setStatus (result.status ());
87
+ }
88
+ break ;
89
+ }
90
+ }
91
+
92
+ const SyncResult &TrayOverallStatusResult::overallStatus () const
93
+ {
94
+ return _overallStatus;
95
+ }
96
+
46
97
FolderMan *FolderMan::_instance = nullptr ;
47
98
48
99
FolderMan::FolderMan (QObject *parent)
@@ -1220,107 +1271,39 @@ TrayOverallStatusResult FolderMan::trayOverallStatus(const QList<Folder *> &fold
1220
1271
{
1221
1272
TrayOverallStatusResult result;
1222
1273
1223
- int cnt = folders.count ();
1224
-
1225
1274
// if one folder: show the state of the one folder.
1226
1275
// if more folders:
1227
1276
// if one of them has an error -> show error
1228
1277
// if one is paused, but others ok, show ok
1229
1278
// do not show "problem" in the tray
1230
1279
//
1231
- if (cnt == 1 ) {
1232
- Folder *folder = folders.at (0 );
1233
- if (folder) {
1234
- auto syncResult = folder->syncResult ();
1235
- if (folder->syncPaused ()) {
1236
- result.overallStatus = SyncResult::Paused;
1237
- } else {
1238
- SyncResult::Status syncStatus = syncResult.status ();
1239
- switch (syncStatus) {
1240
- case SyncResult::Undefined:
1241
- result.overallStatus = SyncResult::Error;
1242
- break ;
1243
- case SyncResult::Problem: // don't show the problem icon in tray.
1244
- result.overallStatus = SyncResult::Success;
1245
- break ;
1246
- default :
1247
- result.overallStatus = syncStatus;
1248
- break ;
1249
- }
1250
- }
1280
+ if (folders.count () == 1 ) {
1281
+ const auto currentFolderLastSyncDone = QDateTime::currentDateTime ().addMSecs (-1 * folders.first ()->msecSinceLastSync ().count ());
1251
1282
1252
- result.hasUnresolvedConflicts = syncResult.hasUnresolvedConflicts ();
1253
-
1254
- auto currentFolderLastSyncDone = QDateTime::currentDateTime ().addMSecs (-1 * folder->msecSinceLastSync ().count ());
1255
-
1256
- if (result.lastSyncDone .isNull ()) {
1283
+ if (result.lastSyncDone .isNull ()) {
1284
+ result.lastSyncDone = currentFolderLastSyncDone;
1285
+ } else {
1286
+ if (currentFolderLastSyncDone > result.lastSyncDone ) {
1257
1287
result.lastSyncDone = currentFolderLastSyncDone;
1258
- } else {
1259
- if (currentFolderLastSyncDone > result.lastSyncDone ) {
1260
- result.lastSyncDone = currentFolderLastSyncDone;
1261
- }
1262
- }
1263
- }
1264
- } else {
1265
- int errorsSeen = 0 ;
1266
- int goodSeen = 0 ;
1267
- int abortOrPausedSeen = 0 ;
1268
- int runSeen = 0 ;
1269
- int various = 0 ;
1270
-
1271
- for (auto *folder : folders) {
1272
- SyncResult folderResult = folder->syncResult ();
1273
- if (folder->syncPaused ()) {
1274
- abortOrPausedSeen++;
1275
- } else {
1276
- SyncResult::Status syncStatus = folderResult.status ();
1277
-
1278
- switch (syncStatus) {
1279
- case SyncResult::Undefined:
1280
- case SyncResult::NotYetStarted:
1281
- various++;
1282
- break ;
1283
- case SyncResult::SyncPrepare:
1284
- case SyncResult::SyncRunning:
1285
- runSeen++;
1286
- break ;
1287
- case SyncResult::Problem: // don't show the problem icon in tray.
1288
- case SyncResult::Success:
1289
- goodSeen++;
1290
- break ;
1291
- case SyncResult::Error:
1292
- case SyncResult::SetupError:
1293
- errorsSeen++;
1294
- break ;
1295
- case SyncResult::SyncAbortRequested:
1296
- case SyncResult::Paused:
1297
- abortOrPausedSeen++;
1298
- // no default case on purpose, check compiler warnings
1299
- }
1300
1288
}
1301
- if (folderResult.hasUnresolvedConflicts ())
1302
- result.hasUnresolvedConflicts = true ;
1303
1289
}
1304
- if (errorsSeen > 0 ) {
1305
- result.overallStatus = SyncResult::Error;
1306
- } else if (abortOrPausedSeen > 0 && abortOrPausedSeen == cnt) {
1307
- // only if all folders are paused
1308
- result.overallStatus = SyncResult::Paused;
1309
- } else if (runSeen > 0 ) {
1310
- result.overallStatus = SyncResult::SyncRunning;
1311
- } else if (goodSeen > 0 ) {
1312
- result.overallStatus = SyncResult::Success;
1290
+ }
1291
+ for (auto *folder : folders) {
1292
+ const SyncResult folderResult = folder->syncResult ();
1293
+ if (folder->syncPaused ()) {
1294
+ result.addResult (SyncResult { SyncResult::Paused });
1295
+ } else {
1296
+ result.addResult (folderResult);
1313
1297
}
1314
1298
}
1315
-
1316
1299
return result;
1317
1300
}
1318
1301
1319
1302
QString FolderMan::trayTooltipStatusString (
1320
- SyncResult::Status syncStatus, bool hasUnresolvedConflicts , bool paused)
1303
+ const SyncResult &result , bool paused)
1321
1304
{
1322
1305
QString folderMessage;
1323
- switch (syncStatus ) {
1306
+ switch (result. status () ) {
1324
1307
case SyncResult::Undefined:
1325
1308
folderMessage = tr (" Undefined State." );
1326
1309
break ;
@@ -1335,7 +1318,7 @@ QString FolderMan::trayTooltipStatusString(
1335
1318
break ;
1336
1319
case SyncResult::Success:
1337
1320
case SyncResult::Problem:
1338
- if (hasUnresolvedConflicts) {
1321
+ if (result. hasUnresolvedConflicts () ) {
1339
1322
folderMessage = tr (" Sync was successful, unresolved conflicts." );
1340
1323
} else {
1341
1324
folderMessage = tr (" Last Sync was successful." );
@@ -1539,4 +1522,5 @@ void FolderMan::restartApplication()
1539
1522
}
1540
1523
}
1541
1524
1525
+
1542
1526
} // namespace OCC
0 commit comments