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 pathdefaults_p.h
112 lines (84 loc) · 2.52 KB
/
defaults_p.h
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
#ifndef QTDATASYNC_DEFAULTS_P_H
#define QTDATASYNC_DEFAULTS_P_H
#include <QtCore/QMutex>
#include <QtCore/QThreadStorage>
#include <QtSql/QSqlDatabase>
#include <QtJsonSerializer/QJsonSerializer>
#include "qtdatasync_global.h"
#include "objectkey.h"
#include "defaults.h"
#include "logger.h"
#include "conflictresolver.h"
#include "emitteradapter_p.h"
class ChangeEmitterReplica;
namespace QtDataSync {
class ChangeEmitter;
//no exports needed
class DatabaseRefPrivate : public QObject
{
public:
DatabaseRefPrivate(QSharedPointer<DefaultsPrivate> defaultsPrivate, QObject *object);
~DatabaseRefPrivate() override;
QSqlDatabase &db();
bool eventFilter(QObject *watched, QEvent *event) override;
private:
QSharedPointer<DefaultsPrivate> _defaultsPrivate;
QObject *_object;
QSqlDatabase _database;
};
//export needed for tests
class Q_DATASYNC_EXPORT DefaultsPrivate : public QObject
{
friend class Defaults;
Q_OBJECT
public:
static const QString DatabaseName;
static void createDefaults(const QString &setupName,
bool isPassive,
const QDir &storageDir,
const QUrl &roAddress,
const QHash<Defaults::PropertyKey, QVariant> &properties,
QJsonSerializer *serializer,
ConflictResolver *resolver);
static void removeDefaults(const QString &setupName);
static QSharedPointer<DefaultsPrivate> obtainDefaults(const QString &setupName);
DefaultsPrivate(QString setupName,
QDir storageDir,
QUrl roAddress,
QHash<Defaults::PropertyKey, QVariant> properties,
QJsonSerializer *serializer,
ConflictResolver *resolver);
~DefaultsPrivate() override;
QSqlDatabase acquireDatabase();
void releaseDatabase();
QRemoteObjectNode *acquireNode();
public Q_SLOTS:
void roThreadDone();
Q_SIGNALS:
void passiveCreated();
void passiveReady();
private Q_SLOTS:
void makePassive();
private:
static void releaseDatabaseImpl(const QString &name);
struct DatabaseHolder : public QHash<QString, quint64>
{
~DatabaseHolder();
};
static QMutex setupDefaultsMutex;
static QHash<QString, QSharedPointer<DefaultsPrivate>> setupDefaults;
static QThreadStorage<DatabaseHolder> dbRefHash;
QString setupName;
QDir storageDir;
Logger *logger;
QUrl roAddress;
QJsonSerializer *serializer;
ConflictResolver *resolver;
QHash<Defaults::PropertyKey, QVariant> properties;
QMutex roMutex;
QHash<QThread*, QRemoteObjectNode*> roNodes;
QSharedPointer<EmitterAdapter::CacheInfo> cacheInfo;
ChangeEmitterReplica *passiveEmitter = nullptr;
};
}
#endif // QTDATASYNC_DEFAULTS_P_H