Buteo Synchronization Framework: synchronizer.h Source File

Buteo Synchronization Framework

synchronizer.h
1/*
2 * This file is part of buteo-syncfw package
3 *
4 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
5 * Copyright (C) 2014-2019 Jolla Ltd.
6 * Copyright (C) 2020 Open Mobile Platform LLC.
7 *
8 * Contact: Sateesh Kavuri <sateesh.kavuri@nokia.com>
9 *
10 * This library is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU Lesser General Public License
12 * version 2.1 as published by the Free Software Foundation.
13 *
14 * This library is distributed in the hope that it will be useful, but
15 * WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 * Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
22 * 02110-1301 USA
23 *
24 */
25#ifndef SYNCHRONIZER_H
26#define SYNCHRONIZER_H
27
28#include "SyncDBusInterface.h"
29#include "SyncQueue.h"
30#include "StorageBooker.h"
31#include "SyncScheduler.h"
32#include "SyncBackup.h"
33#include "SyncOnChange.h"
34#include "SyncOnChangeScheduler.h"
35
36#include "SyncCommonDefs.h"
37#include "ProfileManager.h"
38#include "PluginManager.h"
39#include "PluginCbInterface.h"
40#include "ClientPlugin.h"
41
42#include <QVector>
43#include <QMutex>
44#include <QCoreApplication>
45#include <QMap>
46#include <QString>
47#include <QDBusInterface>
48#include <QScopedPointer>
49#include <QTimer>
50
51struct _GSettings;
52
53namespace Buteo {
54
55class PluginManager;
56class ServerPluginRunner;
57class NetworkManager;
58class TransportTracker;
59class ServerActivator;
60class AccountsHelper;
61class BatteryInfo;
62
67 class Synchronizer : public SyncDBusInterface, // Derived from QObject
68 public PluginCbInterface
69{
70 Q_OBJECT
71public:
72
74 Synchronizer(QCoreApplication *aApplication);
75
77 virtual ~Synchronizer();
78
81 bool initialize();
82
84 void close();
85
86
87// From PluginCbInterface
88// ---------------------------------------------------------------------------
90 virtual bool requestStorage(const QString &aStorageName,
91 const SyncPluginBase *aCaller);
92
94 virtual void releaseStorage(const QString &aStorageName,
95 const SyncPluginBase *aCaller);
96
98 virtual StoragePlugin *createStorage(const QString &aPluginName);
99
101 virtual void destroyStorage(StoragePlugin *aStorage);
102
104 virtual bool isConnectivityAvailable(Sync::ConnectivityType aType);
105
107 virtual Profile *getSyncProfileByRemoteAddress(const QString &aAddress);
108
110 virtual QString getValue(const QString &aAddress, const QString &aKey);
111
112
113// From SyncDBusInterface
114// --------------------------------------------------------------------------
115
116public slots:
117
119 virtual bool startSync(QString aProfileName);
120
122 virtual void abortSync(QString aProfileName);
123
125 virtual bool removeProfile(QString aProfileAsXml);
126
128 virtual bool updateProfile(QString aProfileAsXml);
129
131 virtual bool requestStorages(QStringList aStorageNames);
132
134 virtual void releaseStorages(QStringList aStorageNames);
135
137 virtual QStringList runningSyncs();
138
140 virtual bool setSyncSchedule(QString aProfileId, QString aScheduleAsXml);
141
143 virtual bool saveSyncResults(QString aProfileId, QString aSyncResults);
144
146 virtual QString createSyncProfileForAccount(uint aAccountId);
147
152 virtual QString getLastSyncResult(const QString &aProfileId);
153
160 virtual QStringList allVisibleSyncProfiles();
161
170 virtual QString syncProfile(const QString &aProfileId);
171 virtual QStringList syncProfilesByKey(const QString &aKey, const QString &aValue);
172 virtual QStringList syncProfilesByType(const QString &aType);
173// --------------------------------------------------------------------------
174
176 bool startScheduledSync(QString aProfileName);
177
179 void backupStarts();
180
182 void backupFinished();
183
185 void restoreStarts();
186
188 void restoreFinished();
189
191 virtual bool getBackUpRestoreState();
192
193 void start(unsigned int aAccountId);
194
199 void stop(unsigned int aAccountId);
200
205 QList<unsigned int> syncingAccounts();
206
220 int status(unsigned int aAccountId, int &aFailedReason, qlonglong &aPrevSyncTime, qlonglong &aNextSyncTime);
221
230 void isSyncedExternally(unsigned int aAccountId, const QString aClientProfileName);
231
232signals:
233
235 void storageReleased();
236
242 void syncDone(const QString &aProfileName);
243
244private slots:
245
251 void onStorageReleased();
252
253 void onTransferProgress(const QString &aProfileName,
254 Sync::TransferDatabase aDatabase, Sync::TransferType aType,
255 const QString &aMimeType, int aCommittedItems);
256
257 void onSessionFinished(const QString &aProfileName,
258 Sync::SyncStatus aStatus, const QString &aMessage,
259 SyncResults::MinorCode aErrorCode);
260
261 void onStorageAccquired(const QString &aProfileName, const QString &aMimeType);
262
263 void onSyncProgressDetail(const QString &aProfileName, int aProgressDetail);
264
265 void onServerDone();
266
267 void onNewSession(const QString &aDestination);
268
269 void slotProfileChanged(QString aProfileName, int aChangeType, QString aProfileAsXml);
270
275 void startServer(const QString &aProfileName);
276
281 void stopServer(const QString &aProfileName);
282
283 void onNetworkStateChanged(bool aState, Sync::InternetConnectionType type);
284
291 void enableSOCSlot(const QString &aProfileName);
292
297 void reschedule(const QString &aProfileName);
298
306 void slotSyncStatus(QString aProfileName, int aStatus,
307 QString aMessage, int aMoreDetails);
308
313 void removeScheduledSync(const QString &aProfileName);
314
320 void externalSyncStatus(const QString &aProfileName, bool aQuery);
321
323 void profileChangeTriggerTimeout();
324
325private:
326
327 bool startSync(const QString &aProfileName, bool aScheduled);
328
334 bool startSyncNow(SyncSession *aSession);
335
342 bool startNextSync();
343
349 void cleanupSession(SyncSession *aSession, Sync::SyncStatus aStatus);
350
355 void startServers(bool resume = false);
356
361 void stopServers(bool suspend = false);
362
366 void backupRestoreStarts();
367
371 void backupRestoreFinished();
372
376 void initializeScheduler();
377
378 bool isBackupRestoreInProgress();
379
385 bool cleanupProfile(const QString &profileId);
386
387 bool clientProfileActive(const QString &clientProfileName);
388
394 void removeExternalSyncStatus(const SyncProfile *aProfile);
395
400 bool acceptScheduledSync(bool aConnected, Sync::InternetConnectionType aType, SyncProfile *profile) const;
401
409 void externalSyncStatus(const SyncProfile *aProfile, bool aQuery = false);
410
411 QMap<QString, SyncSession *> iActiveSessions;
412 QMap<QString, bool> iExternalSyncProfileStatus;
413 QList<QString> iProfilesToRemove;
414 QMap<QString, ServerPluginRunner *> iServers;
415 QList<QString> iWaitingOnlineSyncs;
416 NetworkManager *iNetworkManager;
417 QMap<QString, int> iCountersStorage;
418 PluginManager iPluginManager;
419 ProfileManager iProfileManager;
420 SyncQueue iSyncQueue;
421 StorageBooker iStorageBooker;
422 SyncScheduler *iSyncScheduler;
423 SyncBackup *iSyncBackup;
424 TransportTracker *iTransportTracker;
425 ServerActivator *iServerActivator;
426 AccountsHelper *iAccounts;
427 bool iClosing;
428 SyncOnChange iSyncOnChange;
429 SyncOnChangeScheduler iSyncOnChangeScheduler;
430
435 void saveProfileCounter(const SyncProfile *aProfile);
436
441 void restoreProfileCounter(SyncProfile *aProfile);
442
443 bool iSOCEnabled;
444 QString iUUID;
445 QString iRemoteName;
446
447 /*
448 * Temporary, until we can clean up Buteo and properly implement the SyncOnChange
449 * queue to handle all of the required changes (account + profile + connectivity)
450 * in a sane manner (also taking into account BackupRestore status).
451 * However, that change will be far more invasive, so for now this is much simpler.
452 */
453 QList<QPair<QString, ProfileManager::ProfileChangeType> > iProfileChangeTriggerQueue;
454 QTimer iProfileChangeTriggerTimer;
455
456#ifdef SYNCFW_UNIT_TESTS
457 friend class SynchronizerTest;
458#endif
459
460 QDBusInterface *iSyncUIInterface;
461 _GSettings *iSettings;
462 BatteryInfo *iBatteryInfo;
463};
464
465}
466
467#endif // SYNCHRONIZER_H
Buteo::AccountsHelper
Helper Class towards Accounts::Manager and various SSO related operations.
Definition: AccountsHelper.h:44
Buteo::NetworkManager
Class for managing network sessions.
Definition: NetworkManager.h:43
Buteo::PluginCbInterface
Interface which client and server plugins can use to communicate with synchronization daemon.
Definition: PluginCbInterface.h:39
Buteo::PluginManager
Manages plugins.
Definition: PluginManager.h:56
Buteo::ProfileManager
ProfileManager is responsible for storing and retrieving the profiles.
Definition: ProfileManager.h:46
Buteo::Profile
This class represents a single profile, a collection of settings or data releated to some entity.
Definition: Profile.h:53
Buteo::ServerActivator
Keeps track of which server plug-ins should be enabled.
Definition: ServerActivator.h:48
Buteo::StorageBooker
A helper class for managing storage reservations.
Definition: StorageBooker.h:37
Buteo::StoragePlugin
Base class for storage plugins.
Definition: StoragePlugin.h:39
Buteo::SyncBackup
Handles Sync requirements towards Backup.
Definition: SyncBackup.h:38
Buteo::SyncDBusInterface
Defines a D-Bus interface for the sync daemon.
Definition: msyncd/SyncDBusInterface.h:42
Buteo::SyncOnChangeScheduler
Definition: SyncOnChangeScheduler.h:15
Buteo::SyncOnChange
this class initiates a sync if there are changes in storage(s) it's asked to monitor
Definition: SyncOnChange.h:19
Buteo::SyncPluginBase
Base class for client and server plugins.
Definition: SyncPluginBase.h:46
Buteo::SyncProfile
A top level synchronization profile.
Definition: SyncProfile.h:49
Buteo::SyncQueue
Class for queuing sync sessions.
Definition: SyncQueue.h:38
Buteo::SyncResults::MinorCode
MinorCode
enum value
Definition: SyncResults.h:89
Buteo::SyncScheduler
SyncScheduler Object to be used to set Schedule via the framework.
Definition: SyncScheduler.h:55
Buteo::SyncSession
Class representing a single sync session.
Definition: SyncSession.h:44
Buteo::Synchronizer
The main entry point to the synchronization framework.
Definition: synchronizer.h:69
Buteo::Synchronizer::abortSync
virtual void abortSync(QString aProfileName)
Definition: synchronizer.cpp:773
Buteo::Synchronizer::releaseStorages
virtual void releaseStorages(QStringList aStorageNames)
Definition: synchronizer.cpp:939
Buteo::Synchronizer::getSyncProfileByRemoteAddress
virtual Profile * getSyncProfileByRemoteAddress(const QString &aAddress)
Definition: synchronizer.cpp:1842
Buteo::Synchronizer::createSyncProfileForAccount
virtual QString createSyncProfileForAccount(uint aAccountId)
Definition: synchronizer.cpp:363
Buteo::Synchronizer::~Synchronizer
virtual ~Synchronizer()
Destructor.
Definition: synchronizer.cpp:97
Buteo::Synchronizer::allVisibleSyncProfiles
virtual QStringList allVisibleSyncProfiles()
Gets all visible sync profiles.
Definition: synchronizer.cpp:1730
Buteo::Synchronizer::syncDone
void syncDone(const QString &aProfileName)
emit this signal when the sync session is completed, this is useful when the session status is not im...
Definition: moc_synchronizer.cpp:428
Buteo::Synchronizer::restoreFinished
void restoreFinished()
Called when backup is restored.
Definition: synchronizer.cpp:1592
Buteo::Synchronizer::initialize
bool initialize()
registers the dbus service and creates handlers for various tasks of the synchronizer
Definition: synchronizer.cpp:106
Buteo::Synchronizer::startScheduledSync
bool startScheduledSync(QString aProfileName)
Called starts a schedule sync.
Definition: synchronizer.cpp:282
Buteo::Synchronizer::stop
void stop(unsigned int aAccountId)
Stops sync for all profiles matching the given account ID.
Definition: synchronizer.cpp:1616
Buteo::Synchronizer::backupStarts
void backupStarts()
Called when backup starts.
Definition: synchronizer.cpp:1571
Buteo::Synchronizer::restoreStarts
void restoreStarts()
Called when starting to restore a backup.
Definition: synchronizer.cpp:1585
Buteo::Synchronizer::close
void close()
stops the daemon and unregisters the dbus object
Definition: synchronizer.cpp:232
Buteo::Synchronizer::destroyStorage
virtual void destroyStorage(StoragePlugin *aStorage)
Definition: synchronizer.cpp:1066
Buteo::Synchronizer::isConnectivityAvailable
virtual bool isConnectivityAvailable(Sync::ConnectivityType aType)
Definition: synchronizer.cpp:1073
Buteo::Synchronizer::status
int status(unsigned int aAccountId, int &aFailedReason, qlonglong &aPrevSyncTime, qlonglong &aNextSyncTime)
Returns the status of the sync for the given account Id.
Definition: synchronizer.cpp:1627
Buteo::Synchronizer::isSyncedExternally
void isSyncedExternally(unsigned int aAccountId, const QString aClientProfileName)
Queries the sync externally status of a given account, 'syncedExternallyStatus' signal is emitted wit...
Definition: synchronizer.cpp:2003
Buteo::Synchronizer::storageReleased
void storageReleased()
emitted by releaseStorages call
Definition: moc_synchronizer.cpp:422
Buteo::Synchronizer::getLastSyncResult
virtual QString getLastSyncResult(const QString &aProfileId)
To get lastSyncResult.
Definition: synchronizer.cpp:1706
Buteo::Synchronizer::getValue
virtual QString getValue(const QString &aAddress, const QString &aKey)
Definition: synchronizer.cpp:1862
Buteo::Synchronizer::createStorage
virtual StoragePlugin * createStorage(const QString &aPluginName)
Definition: synchronizer.cpp:1030
Buteo::Synchronizer::startSync
virtual bool startSync(QString aProfileName)
Definition: synchronizer.cpp:274
Buteo::Synchronizer::Synchronizer
Synchronizer(QCoreApplication *aApplication)
The contructor.
Definition: synchronizer.cpp:76
Buteo::Synchronizer::syncProfile
virtual QString syncProfile(const QString &aProfileId)
Gets a sync profile.
Definition: synchronizer.cpp:1751
Buteo::Synchronizer::removeProfile
virtual bool removeProfile(QString aProfileAsXml)
Definition: synchronizer.cpp:864
Buteo::Synchronizer::backupFinished
void backupFinished()
Called when backup is completed.
Definition: synchronizer.cpp:1578
Buteo::Synchronizer::syncingAccounts
QList< unsigned int > syncingAccounts()
Returns the list of account IDs for which sync is ongoing.
Definition: synchronizer.cpp:1677
Buteo::Synchronizer::updateProfile
virtual bool updateProfile(QString aProfileAsXml)
Definition: synchronizer.cpp:882
Buteo::Synchronizer::requestStorages
virtual bool requestStorages(QStringList aStorageNames)
Definition: synchronizer.cpp:932
Buteo::Synchronizer::requestStorage
virtual bool requestStorage(const QString &aStorageName, const SyncPluginBase *aCaller)
Definition: synchronizer.cpp:1012
Buteo::Synchronizer::runningSyncs
virtual QStringList runningSyncs()
Definition: synchronizer.cpp:947
Buteo::Synchronizer::releaseStorage
virtual void releaseStorage(const QString &aStorageName, const SyncPluginBase *aCaller)
Definition: synchronizer.cpp:1021
Buteo::Synchronizer::setSyncSchedule
virtual bool setSyncSchedule(QString aProfileId, QString aScheduleAsXml)
Definition: synchronizer.cpp:339
Buteo::Synchronizer::saveSyncResults
virtual bool saveSyncResults(QString aProfileId, QString aSyncResults)
Definition: synchronizer.cpp:349
Buteo::Synchronizer::getBackUpRestoreState
virtual bool getBackUpRestoreState()
Called to get the current backup/restore state.
Definition: synchronizer.cpp:1599
Buteo::TransportTracker
Class for tracking transport states.
Definition: TransportTracker.h:50
QList
Definition: SyncBackupAdaptor.h:40
QMap
Definition: SyncBackupAdaptor.h:41