Skip to content

Commit

Permalink
[sociald] Use CleanUpPurge mode for cleanUp() codepath. Contributes t…
Browse files Browse the repository at this point in the history
…o JB#20682

This commit ensures that the plugin is aware that it is performing a
purge for the cleanUp() account-removal case.  In that case, the sync
function will NOT have been called, and so any setup / initialization
which would normally be performed in that function, needs to be done
prior to the purge, and any state finalization needs to be committed
afterward.

In practice, this means that calendar data gets correctly purged from
the databases when the account is deleted.

Contributes to JB#20682
  • Loading branch information
Chris Adams committed Jun 19, 2014
1 parent 39bdd6e commit 64cf0b4
Show file tree
Hide file tree
Showing 27 changed files with 58 additions and 31 deletions.
5 changes: 2 additions & 3 deletions src/common/socialdbuteoplugin.cpp
Expand Up @@ -205,10 +205,9 @@ bool SocialdButeoPlugin::cleanUp()
m_socialNetworkSyncAdaptor = createSocialNetworkSyncAdaptor();
}

// TODO: ensure that this is ONLY called when the account is deleted,
// not when the plugin is unloaded.
if (m_socialNetworkSyncAdaptor && m_profileAccountId > 0) {
m_socialNetworkSyncAdaptor->purgeDataForOldAccounts(QList<int>() << m_profileAccountId);
m_socialNetworkSyncAdaptor->purgeDataForOldAccounts(QList<int>() << m_profileAccountId,
SocialNetworkSyncAdaptor::CleanUpPurge);
}

return true;
Expand Down
7 changes: 6 additions & 1 deletion src/common/socialnetworksyncadaptor.h
Expand Up @@ -58,6 +58,11 @@ class SocialNetworkSyncAdaptor : public QObject
Invalid
};

enum PurgeMode {
SyncPurge = 0,
CleanUpPurge
};

enum DataType {
Contacts = 1, // "Contacts"
Calendars, // "Calendars"
Expand All @@ -84,7 +89,7 @@ class SocialNetworkSyncAdaptor : public QObject
QString serviceName() const;
void checkAccounts(SocialNetworkSyncAdaptor::DataType dataType, QList<int> *newIds, QList<int> *purgeIds, QList<int> *updateIds);
virtual void sync(const QString &dataType, int accountId = 0);
virtual void purgeDataForOldAccounts(const QList<int> &accountIds) = 0;
virtual void purgeDataForOldAccounts(const QList<int> &accountIds, PurgeMode mode = SyncPurge) = 0;

Q_SIGNALS:
void statusChanged();
Expand Down
13 changes: 12 additions & 1 deletion src/facebook/facebook-calendars/facebookcalendarsyncadaptor.cpp
Expand Up @@ -72,8 +72,14 @@ void FacebookCalendarSyncAdaptor::finalCleanup()
m_storage->close();
}

void FacebookCalendarSyncAdaptor::purgeDataForOldAccounts(const QList<int> &oldIds)
void FacebookCalendarSyncAdaptor::purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode)
{
if (mode == SocialNetworkSyncAdaptor::CleanUpPurge) {
// we need to initialise the storage
m_storageNeedsSave = false;
m_storage->open(); // we close it in finalCleanup()
}

// We clean all the entries in the calendar
foreach (int accountId, oldIds) {
QList<FacebookEvent::ConstPtr> events = m_db.events(accountId);
Expand Down Expand Up @@ -104,6 +110,11 @@ void FacebookCalendarSyncAdaptor::purgeDataForOldAccounts(const QList<int> &oldI
m_db.sync(accountId);
m_db.wait();
}

if (mode == SocialNetworkSyncAdaptor::CleanUpPurge) {
// and commit any changes made.
finalCleanup();
}
}

void FacebookCalendarSyncAdaptor::beginSync(int accountId, const QString &accessToken)
Expand Down
Expand Up @@ -42,7 +42,7 @@ class FacebookCalendarSyncAdaptor
void sync(const QString &dataTypeString, int accountId = 0);

protected: // implementing FacebookDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &accessToken);
void finalCleanup();

Expand Down
Expand Up @@ -197,7 +197,7 @@ void FacebookContactSyncAdaptor::sync(const QString &dataTypeString, int account
FacebookDataTypeSyncAdaptor::sync(dataTypeString, accountId);
}

void FacebookContactSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds)
void FacebookContactSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds, SocialNetworkSyncAdaptor::PurgeMode)
{
foreach (int pid, purgeIds) {
// first, purge all data from QtContacts and also our cache db.
Expand Down
Expand Up @@ -54,7 +54,7 @@ class FacebookContactSyncAdaptor : public FacebookDataTypeSyncAdaptor
void sync(const QString &dataTypeString, int accountId = 0);

protected: // implementing FacebookDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &accessToken);
void finalize(int accountId);
void finalCleanup();
Expand Down
2 changes: 1 addition & 1 deletion src/facebook/facebook-images/facebookimagesyncadaptor.cpp
Expand Up @@ -70,7 +70,7 @@ void FacebookImageSyncAdaptor::sync(const QString &dataTypeString, int accountId
FacebookDataTypeSyncAdaptor::sync(dataTypeString, accountId);
}

void FacebookImageSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds)
void FacebookImageSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds, SocialNetworkSyncAdaptor::PurgeMode)
{
foreach (int pid, purgeIds) {
// first, purge the data from our database + our cache directory
Expand Down
2 changes: 1 addition & 1 deletion src/facebook/facebook-images/facebookimagesyncadaptor.h
Expand Up @@ -49,7 +49,7 @@ class FacebookImageSyncAdaptor
void sync(const QString &dataTypeString, int accountId = 0);

protected: // implementing FacebookDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &accessToken);
void finalize(int accountId);

Expand Down
Expand Up @@ -43,7 +43,7 @@ QString FacebookNotificationSyncAdaptor::syncServiceName() const
return QStringLiteral("facebook-microblog");
}

void FacebookNotificationSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds)
void FacebookNotificationSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds, SocialNetworkSyncAdaptor::PurgeMode)
{
if (purgeIds.size()) {
foreach (int accountIdentifier, purgeIds) {
Expand Down
Expand Up @@ -38,7 +38,7 @@ class FacebookNotificationSyncAdaptor : public FacebookDataTypeSyncAdaptor
QString syncServiceName() const;

protected: // implementing FacebookDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &accessToken);
void finalize(int accountId);

Expand Down
2 changes: 1 addition & 1 deletion src/facebook/facebook-posts/facebookpostsyncadaptor.cpp
Expand Up @@ -113,7 +113,7 @@ void FacebookPostSyncAdaptor::sync(const QString &dataTypeString, int accountId)
FacebookDataTypeSyncAdaptor::sync(dataTypeString, accountId);
}

void FacebookPostSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds)
void FacebookPostSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds, SocialNetworkSyncAdaptor::PurgeMode)
{
if (purgeIds.size()) {
foreach (int accountIdentifier, purgeIds) {
Expand Down
2 changes: 1 addition & 1 deletion src/facebook/facebook-posts/facebookpostsyncadaptor.h
Expand Up @@ -52,7 +52,7 @@ class FacebookPostSyncAdaptor : public FacebookDataTypeSyncAdaptor
void sync(const QString &dataTypeString, int accountId = 0);

protected: // implementing FacebookDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &accessToken);
void finalize(int accountId);

Expand Down
2 changes: 1 addition & 1 deletion src/facebook/facebook-signon/facebooksignonsyncadaptor.cpp
Expand Up @@ -50,7 +50,7 @@ void FacebookSignonSyncAdaptor::sync(const QString &dataTypeString, int accountI
FacebookDataTypeSyncAdaptor::sync(dataTypeString, accountId);
}

void FacebookSignonSyncAdaptor::purgeDataForOldAccounts(const QList<int> &)
void FacebookSignonSyncAdaptor::purgeDataForOldAccounts(const QList<int> &, SocialNetworkSyncAdaptor::PurgeMode)
{
// Nothing to do.
}
Expand Down
2 changes: 1 addition & 1 deletion src/facebook/facebook-signon/facebooksignonsyncadaptor.h
Expand Up @@ -52,7 +52,7 @@ class FacebookSignonSyncAdaptor : public FacebookDataTypeSyncAdaptor
void sync(const QString &dataTypeString, int accountId = 0);

protected: // implementing FacebookDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &accessToken);
void finalize(int accountId);

Expand Down
17 changes: 15 additions & 2 deletions src/google/google-calendars/googlecalendarsyncadaptor.cpp
Expand Up @@ -365,11 +365,19 @@ void GoogleCalendarSyncAdaptor::finalCleanup()
succeededAccounts.append(accountId);
}
}
setLastSyncSuccessful(succeededAccounts);
if (succeededAccounts.size()) {
setLastSyncSuccessful(succeededAccounts);
}
}

void GoogleCalendarSyncAdaptor::purgeDataForOldAccounts(const QList<int> &oldIds)
void GoogleCalendarSyncAdaptor::purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode)
{
if (mode == SocialNetworkSyncAdaptor::CleanUpPurge) {
// need to initialise the database
m_storageNeedsSave = false;
m_storage->open(); // we close it in finalCleanup()
}

// We clean all the entries in the calendar
foreach (int accountId, oldIds) {
// Delete the notebooks from the storage
Expand All @@ -392,6 +400,11 @@ void GoogleCalendarSyncAdaptor::purgeDataForOldAccounts(const QList<int> &oldIds
// Delete ids from our local->remote id mapping
m_idDb.removeEvents(accountId);
}

if (mode == SocialNetworkSyncAdaptor::CleanUpPurge) {
// and commit any changes made.
finalCleanup();
}
}

void GoogleCalendarSyncAdaptor::beginSync(int accountId, const QString &accessToken)
Expand Down
2 changes: 1 addition & 1 deletion src/google/google-calendars/googlecalendarsyncadaptor.h
Expand Up @@ -47,7 +47,7 @@ class GoogleCalendarSyncAdaptor : public GoogleDataTypeSyncAdaptor
void sync(const QString &dataTypeString, int accountId);

protected: // implementing GoogleDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &accessToken);
void finalCleanup();

Expand Down
3 changes: 1 addition & 2 deletions src/google/google-contacts/googlecontactsyncadaptor.cpp
Expand Up @@ -111,10 +111,9 @@ void GoogleContactSyncAdaptor::sync(const QString &dataTypeString, int accountId
GoogleDataTypeSyncAdaptor::sync(dataTypeString, accountId);
}

void GoogleContactSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds)
void GoogleContactSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds, SocialNetworkSyncAdaptor::PurgeMode)
{
foreach (int pid, purgeIds) {
// first, purge all data from QtContacts
purgeAccount(pid);
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/google/google-contacts/googlecontactsyncadaptor.h
Expand Up @@ -52,7 +52,7 @@ class GoogleContactSyncAdaptor : public GoogleDataTypeSyncAdaptor
void sync(const QString &dataTypeString, int accountId = 0);

protected: // implementing GoogleDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &accessToken);
void finalCleanup();

Expand Down
Expand Up @@ -94,7 +94,7 @@ void GoogleTwoWayContactSyncAdaptor::sync(const QString &dataTypeString, int acc
GoogleDataTypeSyncAdaptor::sync(dataTypeString, accountId);
}

void GoogleTwoWayContactSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds)
void GoogleTwoWayContactSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds, SocialNetworkSyncAdaptor::PurgeMode )
{
foreach (int pid, purgeIds) {
purgeAccount(pid);
Expand Down
Expand Up @@ -59,7 +59,7 @@ class GoogleTwoWayContactSyncAdaptor : public GoogleDataTypeSyncAdaptor, public

protected:
// implementing GoogleDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &accessToken);
void finalize(int accountId);
void finalCleanup();
Expand Down
2 changes: 1 addition & 1 deletion src/google/google-signon/googlesignonsyncadaptor.cpp
Expand Up @@ -51,7 +51,7 @@ void GoogleSignonSyncAdaptor::sync(const QString &dataTypeString, int accountId)
GoogleDataTypeSyncAdaptor::sync(dataTypeString, accountId);
}

void GoogleSignonSyncAdaptor::purgeDataForOldAccounts(const QList<int> &)
void GoogleSignonSyncAdaptor::purgeDataForOldAccounts(const QList<int> &, SocialNetworkSyncAdaptor::PurgeMode)
{
// Nothing to do.
}
Expand Down
2 changes: 1 addition & 1 deletion src/google/google-signon/googlesignonsyncadaptor.h
Expand Up @@ -52,7 +52,7 @@ class GoogleSignonSyncAdaptor : public GoogleDataTypeSyncAdaptor
void sync(const QString &dataTypeString, int accountId = 0);

protected: // implementing GoogleDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &accessToken);
void finalize(int accountId);

Expand Down
Expand Up @@ -50,7 +50,7 @@ QString TwitterMentionTimelineSyncAdaptor::syncServiceName() const
return QStringLiteral("twitter-microblog");
}

void TwitterMentionTimelineSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds)
void TwitterMentionTimelineSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds, SocialNetworkSyncAdaptor::PurgeMode)
{
foreach (int accountIdentifier, purgeIds) {
Notification *notification = findNotification(accountIdentifier);
Expand Down
Expand Up @@ -44,7 +44,7 @@ class TwitterMentionTimelineSyncAdaptor : public TwitterDataTypeSyncAdaptor
QString syncServiceName() const;

protected: // implementing TwitterDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &oauthToken, const QString &oauthTokenSecret);

private:
Expand Down
Expand Up @@ -36,7 +36,7 @@ TwitterHomeTimelineSyncAdaptor::~TwitterHomeTimelineSyncAdaptor()
{
}

void TwitterHomeTimelineSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds)
void TwitterHomeTimelineSyncAdaptor::purgeDataForOldAccounts(const QList<int> &purgeIds, SocialNetworkSyncAdaptor::PurgeMode)
{
if (purgeIds.size()) {
foreach (int accountIdentifier, purgeIds) {
Expand Down
2 changes: 1 addition & 1 deletion src/twitter/twitter-posts/twitterhometimelinesyncadaptor.h
Expand Up @@ -47,7 +47,7 @@ class TwitterHomeTimelineSyncAdaptor : public TwitterDataTypeSyncAdaptor
QString syncServiceName() const;

protected: // implementing TwitterDataTypeSyncAdaptor interface
void purgeDataForOldAccounts(const QList<int> &oldIds);
void purgeDataForOldAccounts(const QList<int> &oldIds, SocialNetworkSyncAdaptor::PurgeMode mode);
void beginSync(int accountId, const QString &oauthToken, const QString &oauthTokenSecret);
void finalize(int accountId);

Expand Down
2 changes: 1 addition & 1 deletion tests/tst_facebook/tst_facebook.cpp
Expand Up @@ -81,7 +81,7 @@ class TestFacebookContactSyncAdaptor : public FacebookContactSyncAdaptor
TestFacebookContactSyncAdaptor(QObject *parent)
: FacebookContactSyncAdaptor(parent), m_doFinalCleanup(false) {}
void doBeginSync(int accountId, const QString &accessToken) { beginSync(accountId, accessToken); }
void doPurge(int accountId) { purgeDataForOldAccounts(QList<int>() << accountId); }
void doPurge(int accountId) { purgeDataForOldAccounts(QList<int>() << accountId, SocialNetworkSyncAdaptor::SyncPurge); }
protected:
// override this to avoid auto purging the fake account contacts when sync finishes.
void finalCleanup() { if (m_doFinalCleanup) FacebookContactSyncAdaptor::finalCleanup(); }
Expand Down

0 comments on commit 64cf0b4

Please sign in to comment.