QtDataSync  4.2.0
A simple offline-first synchronisation framework, to synchronize data of Qt applications between devices
Public Member Functions | Protected Member Functions | List of all members
QtDataSync::ConflictResolver Class Referenceabstract

Interface to implement a custom conflict handler for sync conflicts. More...

#include <conflictresolver.h>

+ Inheritance diagram for QtDataSync::ConflictResolver:

Public Member Functions

 ConflictResolver (QObject *parent=nullptr)
 Default constructor.
 
QString setupName () const
 Returns the name of the setup this class operates on. More...
 
virtual QByteArray name () const
 The resolvers name. Used for logging. More...
 
virtual QJsonObject resolveConflict (int typeId, const QJsonObject &data1, const QJsonObject &data2) const =0
 The method called to resolve conflicts between two datasets. More...
 
- Public Member Functions inherited from QObject
virtual const QMetaObjectmetaObject () const const
 
virtual void * qt_metacast (const char *)
 
virtual int qt_metacall (QMetaObject::Call, int, void **)
 
 QObject (QObject *parent)
 
virtual bool event (QEvent *e)
 
virtual bool eventFilter (QObject *watched, QEvent *event)
 
QString objectName () const const
 
void setObjectName (const QString &name)
 
bool isWidgetType () const const
 
bool isWindowType () const const
 
bool signalsBlocked () const const
 
bool blockSignals (bool block)
 
QThreadthread () const const
 
void moveToThread (QThread *targetThread)
 
int startTimer (int interval, Qt::TimerType timerType)
 
int startTimer (std::chrono::milliseconds time, Qt::TimerType timerType)
 
void killTimer (int id)
 
findChild (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QString &name, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegExp &regExp, Qt::FindChildOptions options) const const
 
QList< T > findChildren (const QRegularExpression &re, Qt::FindChildOptions options) const const
 
const QObjectList & children () const const
 
void setParent (QObject *parent)
 
void installEventFilter (QObject *filterObj)
 
void removeEventFilter (QObject *obj)
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const char *method, Qt::ConnectionType type) const const
 
bool disconnect (const char *signal, const QObject *receiver, const char *method) const const
 
bool disconnect (const QObject *receiver, const char *method) const const
 
void dumpObjectTree ()
 
void dumpObjectInfo ()
 
void dumpObjectTree () const const
 
void dumpObjectInfo () const const
 
bool setProperty (const char *name, const QVariant &value)
 
QVariant property (const char *name) const const
 
QList< QByteArraydynamicPropertyNames () const const
 
void destroyed (QObject *obj)
 
void objectNameChanged (const QString &objectName)
 
QObjectparent () const const
 
bool inherits (const char *className) const const
 
void deleteLater ()
 

Protected Member Functions

Defaults defaults () const
 Access to the defaults of the current datasync instance.
 
Loggerlogger () const
 Returns the logger that should be used to log merge incidents.
 
QSettingssettings () const
 Access to the resolvers settings section of the current datasync instance.
 
- Protected Member Functions inherited from QObject
QObjectsender () const const
 
int senderSignalIndex () const const
 
int receivers (const char *signal) const const
 
bool isSignalConnected (const QMetaMethod &signal) const const
 
virtual void timerEvent (QTimerEvent *event)
 
virtual void childEvent (QChildEvent *event)
 
virtual void customEvent (QEvent *event)
 
virtual void connectNotify (const QMetaMethod &signal)
 
virtual void disconnectNotify (const QMetaMethod &signal)
 

Additional Inherited Members

- Static Public Member Functions inherited from QObject
QString tr (const char *sourceText, const char *disambiguation, int n)
 
QString trUtf8 (const char *sourceText, const char *disambiguation, int n)
 
QMetaObject::Connection connect (const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method, Qt::ConnectionType type)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, Functor functor)
 
QMetaObject::Connection connect (const QObject *sender, PointerToMemberFunction signal, const QObject *context, Functor functor, Qt::ConnectionType type)
 
bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *method)
 
bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method)
 
bool disconnect (const QMetaObject::Connection &connection)
 
bool disconnect (const QObject *sender, PointerToMemberFunction signal, const QObject *receiver, PointerToMemberFunction method)
 
- Properties inherited from QObject
 objectName
 

Detailed Description

Interface to implement a custom conflict handler for sync conflicts.

When a merge conflict is detected (both local and remote have modified data, with none seeming to be newer than the other) by default one of the two is choosen "by fate" by comparing their checksums - which is basically a random decision. If you need more control about how such conflicts are treated, you can reimplement this class and pass it to the setup.

See also
Setup::conflictResolver, ConflictResolver::resolveConflict, GenericConflictResolver

Definition at line 17 of file conflictresolver.h.

Member Function Documentation

◆ name()

QtDataSync::ConflictResolver::name ( ) const
virtual

The resolvers name. Used for logging.

Returns
The name to be used for logging
See also
ConflictResolver::logger, Logger

◆ resolveConflict()

QtDataSync::ConflictResolver::resolveConflict ( int  typeId,
const QJsonObject data1,
const QJsonObject data2 
) const
pure virtual

The method called to resolve conflicts between two datasets.

Parameters
typeIdThe id of the type of which the two conflicted objects are
data1The first dataset
data2The second dataset
Returns
The independent merge result of the two datasets
Exceptions
QExceptionIn case data corruption was detected an exception can be thrown to abort the synchronization. This will put the engine in an (unrecoverable) error state.

Must be implemented as the main method of the resolver. The method must always return something. If you find that you cannot decide how to merge, simply return a default constructed json object. In that case, the library will ignore the result and proceed to merge as if no conflict resolver was present.

Warning
This method must be deterministic and independent of the parameter order. This means if you assume you have 2 objects, no matter at what point in time and in which order they are passed to this method, the returned object must always be the same. If thats not the case it can lead to infinite synchronisation loops.
See also
ConflictResolver, GenericConflictResolver::resolveConflict

Implemented in QtDataSync::GenericConflictResolver< T1 >.

◆ setupName()

QtDataSync::ConflictResolver::setupName ( ) const

Returns the name of the setup this class operates on.

Returns
The name of the setup
See also
QtDataSync::Setup

The documentation for this class was generated from the following files: