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 pathchangeemitter.cpp
82 lines (74 loc) · 1.91 KB
/
changeemitter.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
#include "changeemitter_p.h"
using namespace QtDataSync;
ChangeEmitter::ChangeEmitter(const Defaults &defaults, QObject *parent) :
ChangeEmitterSource{parent},
_cache{defaults.cacheHandle().value<QSharedPointer<EmitterAdapter::CacheInfo>>()}
{}
void ChangeEmitter::triggerChange(QObject *origin, const ObjectKey &key, bool deleted, bool changed)
{
if(changed)
emit uploadNeeded();
emit dataChanged(origin, key, deleted);
emit remoteDataChanged(key, deleted);
}
void ChangeEmitter::triggerClear(QObject *origin, const QByteArray &typeName, const QStringList &ids)
{
emit uploadNeeded();
for(const auto &id : ids) {
emit dataChanged(origin, {typeName, id}, true);
emit remoteDataChanged({typeName, id}, true);
}
}
void ChangeEmitter::triggerReset(QObject *origin)
{
emit uploadNeeded();
emit dataResetted(origin);
emit remoteDataResetted();
}
void ChangeEmitter::triggerUpload()
{
emit uploadNeeded();
}
void ChangeEmitter::triggerRemoteChange(const ObjectKey &key, bool deleted, bool changed)
{
if(_cache) {
auto contains = false;
//check if cached
{
QReadLocker _(&_cache->lock);
contains = _cache->cache.contains(key);
}
//if chached, remove
if(contains) {
QWriteLocker _(&_cache->lock);
_cache->cache.remove(key);
}
}
if(changed)
emit uploadNeeded();
emit dataChanged(nullptr, key, deleted);
emit remoteDataChanged(key, deleted);
}
void ChangeEmitter::triggerRemoteClear(const QByteArray &typeName, const QStringList &ids)
{
if(_cache) {
QWriteLocker _(&_cache->lock);
for(const auto &id : ids)
_cache->cache.remove({typeName, id});
}
emit uploadNeeded();
for(const auto &id : ids) {
emit dataChanged(nullptr, {typeName, id}, true);
emit remoteDataChanged({typeName, id}, true);
}
}
void ChangeEmitter::triggerRemoteReset()
{
if(_cache) {
QWriteLocker _(&_cache->lock);
_cache->cache.clear();
}
emit uploadNeeded();
emit dataResetted(nullptr);
emit remoteDataResetted();
}