~mardy/ubuntu-system-settings-online-accounts/remove-stale-accounts

« back to all changes in this revision

Viewing changes to online-accounts-service/libaccounts-service.cpp

  • Committer: Alberto Mardegan
  • Date: 2014-12-11 12:51:46 UTC
  • mto: (219.3.1 click-plugins)
  • mto: This revision was merged to the branch mainline in revision 220.
  • Revision ID: alberto.mardegan@canonical.com-20141211125146-xjqgqph87lbca7yj
Fixes and unit tests

Show diffs side-by-side

added added

removed removed

Lines of Context:
34
34
static QString stripVersion(const QString &appId)
35
35
{
36
36
    QStringList components = appId.split('_');
37
 
    if (components.count() != 3) return QString();
 
37
    if (components.count() != 3) return appId;
38
38
 
39
39
    /* Click packages have a profile of the form
40
40
     *  $name_$application_$version
64
64
    QList<ServiceChanges> serviceChanges;
65
65
};
66
66
 
 
67
struct PendingWrite {
 
68
    PendingWrite(const QDBusConnection &c, const QDBusMessage &m):
 
69
        message(m), connection(c) {}
 
70
    QDBusMessage message;
 
71
    QDBusConnection connection;
 
72
};
 
73
 
67
74
class LibaccountsServicePrivate: public QObject
68
75
{
69
76
    Q_OBJECT
81
88
 
82
89
private:
83
90
    Accounts::Manager m_manager;
84
 
    QHash<Accounts::Account *,QDBusMessage> m_pendingWrites;
 
91
    QHash<Accounts::Account *,PendingWrite> m_pendingWrites;
85
92
    mutable LibaccountsService *q_ptr;
86
93
};
87
94
 
136
143
        }
137
144
    }
138
145
 
139
 
    m_pendingWrites.insert(account, q->message());
 
146
    m_pendingWrites.insert(account,
 
147
                           PendingWrite(q->connection(), q->message()));
140
148
    QObject::connect(account, SIGNAL(synced()),
141
149
                     this, SLOT(onAccountSynced()));
142
 
    QObject::connect(account, SIGNAL(Accounts::Error),
 
150
    QObject::connect(account, SIGNAL(error(Accounts::Error)),
143
151
                     this, SLOT(onAccountError(Accounts::Error)));
144
152
    account->sync();
145
153
}
151
159
    Accounts::Account *account = qobject_cast<Accounts::Account*>(sender());
152
160
    account->deleteLater();
153
161
 
154
 
    QDBusMessage message = m_pendingWrites.take(account);
155
 
    q->connection().send(message.createReply());
 
162
    QHash<Accounts::Account*,PendingWrite>::iterator i =
 
163
        m_pendingWrites.find(account);
 
164
    if (Q_LIKELY(i != m_pendingWrites.end())) {
 
165
        PendingWrite &w = i.value();
 
166
        w.connection.send(w.message.createReply());
 
167
        m_pendingWrites.erase(i);
 
168
    }
156
169
}
157
170
 
158
171
void LibaccountsServicePrivate::onAccountError(Accounts::Error error)
162
175
    Accounts::Account *account = qobject_cast<Accounts::Account*>(sender());
163
176
    account->deleteLater();
164
177
 
165
 
    QDBusMessage message = m_pendingWrites.take(account);
166
 
    QDBusMessage reply =
167
 
        message.createErrorReply(QDBusError::InternalError, error.message());
168
 
    q->connection().send(reply);
 
178
    QHash<Accounts::Account*,PendingWrite>::iterator i =
 
179
        m_pendingWrites.find(account);
 
180
    if (Q_LIKELY(i != m_pendingWrites.end())) {
 
181
        PendingWrite &w = i.value();
 
182
        QDBusMessage reply =
 
183
            w.message.createErrorReply(QDBusError::InternalError,
 
184
                                       error.message());
 
185
        w.connection.send(reply);
 
186
        m_pendingWrites.erase(i);
 
187
    }
169
188
}
170
189
 
171
190
LibaccountsService::LibaccountsService(QObject *parent):
211
230
        return;
212
231
    }
213
232
 
214
 
    QDBusArgument dbusChanges = args.value(n++).value<QDBusArgument>();
 
233
    const QDBusArgument dbusChanges = args.value(n++).value<QDBusArgument>();
215
234
    dbusChanges.beginArray();
216
235
    while (!dbusChanges.atEnd()) {
217
236
        ServiceChanges sc;