-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathchannel.h
107 lines (88 loc) · 3.01 KB
/
channel.h
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
/*
Hanghish
Copyright (C) 2015 Daniele Rogora
This file is part of Hangish.
Hangish is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Hangish is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Nome-Programma. If not, see <http://www.gnu.org/licenses/>
*/
#ifndef CHANNEL_H
#define CHANNEL_H
#include "utils.h"
#include "notification.h"
#include "conversationmodel.h"
#include "rostermodel.h"
struct ChannelEvent {
QString conversationId;
bool isTyping;
QString userId;
int typingStatus;
};
class Channel : public QObject
{
Q_OBJECT
//Used to know wether the network has problems, so that the app doesn't spawn lots of unuseful connections
bool channelError, fetchingSid;
QNetworkReply *LPrep;
User myself;
ConversationModel *conversationModel;
RosterModel *rosterModel;
QNetworkAccessManager *nam;
QNetworkCookieJar cJar;
QList<QNetworkCookie> session_cookies;
QString sid, clid, ec, path, prop, header_client, email, gsessionid;
QString lastIncompleteParcel;
QDateTime lastPushReceived;
int lastAs;
private:
QByteArray getAuthHeader();
QTimer *checkChannelTimer;
bool channelEstablishmentOccurring;
bool isOnline;
int lastValidParcelId;
QDateTime lastLongPollReq;
QDateTime lastValidParcelIdTS;
bool appPaused;
QString lastIncomingConvId;
void fetchNewSid();
void checkChannelAndReconnect();
void processCookies(QNetworkReply *reply);
void addChannelService();
public:
Channel(QList<QNetworkCookie> cookies, QString ppath, QString pclid, QString pec, QString pprop, User pms, ConversationModel *cModel, RosterModel *rModel);
void listen();
void parseChannelData(QString sreply);
QDateTime getLastPushTs();
void fastReconnect();
void setAppPaused();
void setAppOpened();
QString getLastIncomingConversation();
void setStatus(bool online);
public slots:
void checkChannel();
void nr();
void nrf();
void parseSid();
void slotError(QNetworkReply::NetworkError err);
private slots:
void longPollRequest();
signals:
void cookieUpdateNeeded(QList<QNetworkCookie> cookies);
void updateClientId(QString newID);
void activeClientUpdate(int state);
void updateWM(QString convId);
void channelLost();
void channelRestored(QDateTime lastRecv);
void isTyping(QString convId, QString chatId, int type);
void showNotification(QString preview, QString summary, QString body, QString sender, int num, QString convId);
void renameConversation(QString cid, QString newname);
void cancelAllActiveRequests();
};
#endif // CHANNEL_H