Quassel IRC  Pre-Release
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros
message.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2005-2015 by the Quassel Project *
3  * devel@quassel-irc.org *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) version 3. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *
19  ***************************************************************************/
20 
21 #ifndef MESSAGE_H_
22 #define MESSAGE_H_
23 
24 #include <QCoreApplication>
25 #include <QDateTime>
26 
27 #include "bufferinfo.h"
28 #include "types.h"
29 
30 class Message
31 {
33 
34 public:
36  enum Type {
37  Plain = 0x00001,
38  Notice = 0x00002,
39  Action = 0x00004,
40  Nick = 0x00008,
41  Mode = 0x00010,
42  Join = 0x00020,
43  Part = 0x00040,
44  Quit = 0x00080,
45  Kick = 0x00100,
46  Kill = 0x00200,
47  Server = 0x00400,
48  Info = 0x00800,
49  Error = 0x01000,
50  DayChange = 0x02000,
51  Topic = 0x04000,
52  NetsplitJoin = 0x08000,
53  NetsplitQuit = 0x10000,
54  Invite = 0x20000,
55  };
56 
57  // DO NOT CHANGE without knowing what you do, some of these flags are stored in the database
58  enum Flag {
59  None = 0x00,
60  Self = 0x01,
61  Highlight = 0x02,
62  Redirected = 0x04,
63  ServerMsg = 0x08,
64  Backlog = 0x80
65  };
66  Q_DECLARE_FLAGS(Flags, Flag)
67 
68  Message(const BufferInfo &bufferInfo = BufferInfo(), Type type = Plain, const QString &contents = "", const QString &sender = "", Flags flags = None);
69  Message(const QDateTime &ts, const BufferInfo &buffer = BufferInfo(), Type type = Plain,
70  const QString &contents = "", const QString &sender = "", Flags flags = None);
71 
72  inline static Message ChangeOfDay(const QDateTime &day) { return Message(day, BufferInfo(), DayChange); }
73  inline const MsgId &msgId() const { return _msgId; }
74  inline void setMsgId(MsgId id) { _msgId = id; }
75 
76  inline const BufferInfo &bufferInfo() const { return _bufferInfo; }
77  inline const BufferId &bufferId() const { return _bufferInfo.bufferId(); }
78  inline void setBufferId(BufferId id) { _bufferInfo.setBufferId(id); }
79  inline const QString &contents() const { return _contents; }
80  inline const QString &sender() const { return _sender; }
81  inline Type type() const { return _type; }
82  inline Flags flags() const { return _flags; }
83  inline void setFlags(Flags flags) { _flags = flags; }
84  inline const QDateTime &timestamp() const { return _timestamp; }
85 
86  inline bool isValid() const { return _msgId.isValid(); }
87 
88  inline bool operator<(const Message &other) const { return _msgId < other._msgId; }
89 
90 private:
91  QDateTime _timestamp;
94  QString _contents;
95  QString _sender;
97  Flags _flags;
98 
99  friend QDataStream &operator>>(QDataStream &in, Message &msg);
100 };
101 
102 
103 typedef QList<Message> MessageList;
104 
105 QDataStream &operator<<(QDataStream &out, const Message &msg);
106 QDataStream &operator>>(QDataStream &in, Message &msg);
107 QDebug operator<<(QDebug dbg, const Message &msg);
108 
111 
112 #endif