This repository was archived by the owner on Mar 4, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathsyncmanager_p.cpp
113 lines (102 loc) · 2.78 KB
/
syncmanager_p.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "syncmanager_p.h"
using namespace QtDataSync;
SyncManagerPrivate::SyncManagerPrivate(ExchangeEngine *engineParent) :
SyncManagerPrivateSource{engineParent},
_engine{engineParent}
{
connect(_engine, &ExchangeEngine::stateChanged,
this, &SyncManagerPrivate::syncStateChanged);
connect(_engine, &ExchangeEngine::progressChanged,
this, &SyncManagerPrivate::syncProgressChanged);
connect(_engine, &ExchangeEngine::lastErrorChanged,
this, &SyncManagerPrivate::lastErrorChanged);
connect(_engine->remoteConnector(), &RemoteConnector::syncEnabledChanged,
this, &SyncManagerPrivate::syncEnabledChanged);
}
QString SyncManagerPrivate::setupName() const
{
return _engine->defaults().setupName();
}
bool SyncManagerPrivate::syncEnabled() const
{
return _engine->remoteConnector()->isSyncEnabled();
}
SyncManager::SyncState SyncManagerPrivate::syncState() const
{
return _engine->state();
}
qreal SyncManagerPrivate::syncProgress() const
{
return _engine->progress();
}
QString SyncManagerPrivate::lastError() const
{
return _engine->lastError();
}
void SyncManagerPrivate::setSyncEnabled(bool syncEnabled)
{
_engine->remoteConnector()->setSyncEnabled(syncEnabled);
}
void SyncManagerPrivate::synchronize()
{
_engine->remoteConnector()->resync();
}
void SyncManagerPrivate::reconnect()
{
_engine->remoteConnector()->reconnect();
}
void SyncManagerPrivate::runOnState(QUuid id, bool downloadOnly, bool triggerSync)
{
auto state = syncState();
auto skipDOnly = false;
switch(state) {
case SyncManager::Error: //wont sync -> simply complete
case SyncManager::Disconnected:
emit stateReached(id, state);
break;
case SyncManager::Synchronized: //if wants sync -> trigger it, then...
if(triggerSync) {
synchronize();
skipDOnly = true; //fallthrough in the uploading state
} else {
emit stateReached(id, state);
break;
}
Q_FALLTHROUGH();
case SyncManager::Uploading: //if download only -> done
if(downloadOnly && !skipDOnly) {
emit stateReached(id, state);
break;
}
Q_FALLTHROUGH();
case SyncManager::Initializing: //conntect to react to result
case SyncManager::Downloading:
{
auto resObj = new QObject(this);
connect(this, &SyncManagerPrivate::syncStateChanged, resObj, [this, resObj, id, downloadOnly](SyncManager::SyncState newState) {
switch (newState) {
case SyncManager::Initializing: //do nothing
case SyncManager::Downloading:
break;
case SyncManager::Uploading: //download only -> done, else do nothing
if(!downloadOnly)
break;
Q_FALLTHROUGH();
case SyncManager::Synchronized: //done
case SyncManager::Error:
case SyncManager::Disconnected:
emit stateReached(id, newState);
resObj->deleteLater();
break;
default:
Q_UNREACHABLE();
break;
}
});
break;
}
default:
Q_UNREACHABLE();
break;
}
}