File: cdtpcontroller.h

package info (click to toggle)
contactsd 1.4.15-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,392 kB
  • sloc: cpp: 8,862; ansic: 3,793; sh: 361; xml: 75; python: 22; makefile: 13
file content (123 lines) | stat: -rw-r--r-- 4,226 bytes parent folder | download
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
113
114
115
116
117
118
119
120
121
122
123
/** This file is part of Contacts daemon
 **
 ** Copyright (c) 2010-2011 Nokia Corporation and/or its subsidiary(-ies).
 **
 ** Contact:  Nokia Corporation (info@qt.nokia.com)
 **
 ** GNU Lesser General Public License Usage
 ** This file may be used under the terms of the GNU Lesser General Public License
 ** version 2.1 as published by the Free Software Foundation and appearing in the
 ** file LICENSE.LGPL included in the packaging of this file.  Please review the
 ** following information to ensure the GNU Lesser General Public License version
 ** 2.1 requirements will be met:
 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 **
 ** In addition, as a special exception, Nokia gives you certain additional rights.
 ** These rights are described in the Nokia Qt LGPL Exception version 1.1, included
 ** in the file LGPL_EXCEPTION.txt in this package.
 **
 ** Other Usage
 ** Alternatively, this file may be used in accordance with the terms and
 ** conditions contained in a signed written agreement between you and Nokia.
 **/

#ifndef CDTPCONTROLLER_H
#define CDTPCONTROLLER_H

#include "cdtpaccount.h"
#include "cdtpcontact.h"
#include "cdtpstorage.h"

#include <TelepathyQt/Types>

#include <QList>
#include <QObject>
#include <QSettings>

class PendingOfflineRemoval;

class CDTpController : public QObject
{
    Q_OBJECT

public:
    CDTpController(QObject *parent = 0);
    ~CDTpController();

Q_SIGNALS:
    void importStarted(const QString &service, const QString &account);
    void importEnded(const QString &service, const QString &account, int contactsAdded, int contactsRemoved, int contactsMerged);
    void error(int code, const QString &message);

public Q_SLOTS:
    void inviteBuddies(const QString &accountPath, const QStringList &imIds);
    void inviteBuddiesOnContact(const QString &accountPath, const QStringList &imIds, uint localId);
    void removeBuddies(const QString &accountPath, const QStringList &imIds);
    void onRosterChanged(CDTpAccountPtr accountWrapper);

private Q_SLOTS:
    void onAccountManagerReady(Tp::PendingOperation *op);
    void onAccountAdded(const Tp::AccountPtr &account);
    void onAccountRemoved(const Tp::AccountPtr &account);
    void onSyncStarted(Tp::AccountPtr account);
    void onSyncEnded(Tp::AccountPtr account, int contactsAdded, int contactsRemoved);
    void onInvitationFinished(Tp::PendingOperation *op);
    void onRemovalFinished(Tp::PendingOperation *op);

private:
    CDTpAccountPtr insertAccount(const Tp::AccountPtr &account, bool newAccount);
    void removeAccount(const QString &accountObjectPath);
    void maybeStartOfflineOperations(CDTpAccountPtr accountWrapper);
    QStringList updateOfflineRosterBuffer(const QString group, const QString accountPath,
        const QStringList idsToAdd, const QStringList idsToRemove);
    bool registerDBusObject();

private:
    CDTpStorage mStorage;
    Tp::AccountManagerPtr mAM;
    Tp::AccountSetPtr mAccountSet;
    QHash<QString, CDTpAccountPtr> mAccounts;
    QSettings mOfflineRosterBuffer;
};

class CDTpRemovalOperation : public Tp::PendingOperation
{
    Q_OBJECT

public:
    CDTpRemovalOperation(CDTpAccountPtr accountWrapper, const QStringList &contactIds);
    QStringList contactIds() const { return mContactIds; }
    CDTpAccountPtr accountWrapper() const { return mAccountWrapper; }

private Q_SLOTS:
    void onContactsRemoved(Tp::PendingOperation *op);

private:
    QStringList mContactIds;
    CDTpAccountPtr mAccountWrapper;
};

class CDTpInvitationOperation : public Tp::PendingOperation
{
    Q_OBJECT

public:
    CDTpInvitationOperation(CDTpStorage &storage,
                            CDTpAccountPtr accountWrapper,
                            const QStringList &contactIds,
                            uint contactLocalId);
    QStringList contactIds() const { return mContactIds; }
    CDTpAccountPtr accountWrapper() const { return mAccountWrapper; }

private Q_SLOTS:
    void onContactsRetrieved(Tp::PendingOperation *op);
    void onPresenceSubscriptionRequested(Tp::PendingOperation *op);

private:
    CDTpStorage &mStorage;
    QStringList mContactIds;
    CDTpAccountPtr mAccountWrapper;
    uint mContactLocalId;
};

#endif // CDTPCONTROLLER_H