1 /*
2  * %kadu copyright begin%
3  * Copyright 2011 Piotr Galiszewski (piotr.galiszewski@kadu.im)
4  * Copyright 2012 Wojciech Treter (juzefwt@gmail.com)
5  * Copyright 2011, 2013 Bartosz Brachaczek (b.brachaczek@gmail.com)
6  * Copyright 2011, 2012, 2013, 2014 Rafał Przemysław Malinowski (rafal.przemyslaw.malinowski@gmail.com)
7  * %kadu copyright end%
8  *
9  * This program is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU General Public License as
11  * published by the Free Software Foundation; either version 2 of
12  * the License, or (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program. If not, see <http://www.gnu.org/licenses/>.
21  */
22 
23 #pragma once
24 
25 #include "services/jabber-avatar-service.h"
26 #include "services/jabber-contact-personal-info-service.h"
27 #include "services/jabber-file-transfer-service.h"
28 #include "services/jabber-personal-info-service.h"
29 #include "services/jabber-subscription-service.h"
30 #include "jabber-account-details.h"
31 
32 #include "protocols/protocol.h"
33 #include "protocols/services/chat-service.h"
34 
35 #include <injeqt/injeqt.h>
36 #include <qxmpp/QXmppClient.h>
37 
38 class PluginInjectedFactory;class JabberChangePasswordService;
39 class JabberErrorService;
40 class JabberPresenceService;
41 class JabberRegisterExtension;
42 class JabberResourceService;
43 class JabberRoomChatService;
44 class JabberRosterExtension;
45 class JabberStreamDebugService;
46 class SystemInfo;
47 class VersionService;
48 
49 class QXmppClient;
50 class QXmppMucManager;
51 class QXmppTransferManager;
52 
53 class JabberProtocol : public Protocol
54 {
55 	Q_OBJECT
56 
57 public:
58 	explicit JabberProtocol(Account account, ProtocolFactory *factory);
59 	virtual ~JabberProtocol();
60 
61 	void setContactsListReadOnly(bool contactsListReadOnly);
contactsListReadOnly()62 	virtual bool contactsListReadOnly() override { return m_contactsListReadOnly; }
63 
64 	virtual QString statusPixmapPath() override;
65 
avatarService()66 	virtual AvatarService * avatarService() override { return m_avatarService; }
contactPersonalInfoService()67 	virtual ContactPersonalInfoService * contactPersonalInfoService() override { return m_contactPersonalInfoService; }
fileTransferService()68 	virtual FileTransferService * fileTransferService() override { return m_fileTransferService; }
personalInfoService()69 	virtual PersonalInfoService * personalInfoService() override { return m_personalInfoService; }
subscriptionService()70 	virtual SubscriptionService * subscriptionService() override { return m_subscriptionService; }
streamDebugService()71 	virtual JabberStreamDebugService * streamDebugService() { return m_streamDebugService; }
vcardService()72 	virtual JabberVCardService * vcardService() { return m_vcardService; }
73 
74 	JabberChangePasswordService * changePasswordService() const;
75 
76 signals:
77 	void userStatusChangeIgnored(Buddy);
78 
79 protected:
80 	virtual void login() override;
81 	virtual void logout() override;
82 	virtual void sendStatusToServer() override;
83 
84 	virtual void changePrivateMode() override;
85 
86 private:
87 	QPointer<SystemInfo> m_systemInfo;
88 	QPointer<VersionService> m_versionService;
89 
90 	JabberAvatarService *m_avatarService;
91 	JabberChangePasswordService *m_changePasswordService;
92 	JabberContactPersonalInfoService *m_contactPersonalInfoService;
93 	JabberErrorService *m_errorService;
94 	JabberFileTransferService *m_fileTransferService;
95 	JabberPersonalInfoService *m_personalInfoService;
96 	JabberSubscriptionService *m_subscriptionService;
97 	JabberPresenceService *m_presenceService;
98 	JabberRoomChatService *m_roomChatService;
99 	JabberStreamDebugService *m_streamDebugService;
100 	JabberVCardService *m_vcardService;
101 	JabberResourceService *m_resourceService;
102 
103 	QXmppClient *m_client;
104 	std::unique_ptr<JabberRegisterExtension> m_registerExtension;
105 	std::unique_ptr<JabberRosterExtension> m_rosterExtension;
106 	std::unique_ptr<QXmppMucManager> m_mucManager;
107 	std::unique_ptr<QXmppTransferManager> m_transferManager;
108 
109 	bool m_contactsListReadOnly;
110 
111 private slots:
112 	INJEQT_SET void setSystemInfo(SystemInfo *systemInfo);
113 	INJEQT_SET void setVersionService(VersionService *versionService);
114 	INJEQT_INIT void init();
115 
116 	void connectedToServer();
117 	void disconenctedFromServer();
118 	void error(QXmppClient::Error error);
119 
120 	void rosterReady();
121 
122 	void updatePresence();
123 	void presenceReceived(const QXmppPresence &presence);
124 
125 };
126