cmake: avoid de-duplication of user's CXXFLAGS
[quassel.git] / src / common / message.h
1 /***************************************************************************
2  *   Copyright (C) 2005-2022 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 #pragma once
22
23 #include "common-export.h"
24
25 #include <QCoreApplication>
26 #include <QDateTime>
27
28 #include "bufferinfo.h"
29 #include "types.h"
30
31 class COMMON_EXPORT Message
32 {
33     Q_DECLARE_TR_FUNCTIONS(Message)
34
35 public:
36     /** The different types a message can have for display */
37     enum Type
38     {
39         Plain        = 0x00001,
40         Notice       = 0x00002,
41         Action       = 0x00004,
42         Nick         = 0x00008,
43         Mode         = 0x00010,
44         Join         = 0x00020,
45         Part         = 0x00040,
46         Quit         = 0x00080,
47         Kick         = 0x00100,
48         Kill         = 0x00200,
49         Server       = 0x00400,
50         Info         = 0x00800,
51         Error        = 0x01000,
52         DayChange    = 0x02000,
53         Topic        = 0x04000,
54         NetsplitJoin = 0x08000,
55         NetsplitQuit = 0x10000,
56         Invite       = 0x20000,
57     };
58     Q_DECLARE_FLAGS(Types, Type)
59
60     // DO NOT CHANGE without knowing what you do, some of these flags are stored in the database
61     enum Flag
62     {
63         None       = 0x00,
64         Self       = 0x01,
65         Highlight  = 0x02,
66         Redirected = 0x04,
67         ServerMsg  = 0x08,
68         StatusMsg  = 0x10,
69         Ignored    = 0x20, ///< This message matched an active ignore rule when first received
70         Backlog    = 0x80
71     };
72     Q_DECLARE_FLAGS(Flags, Flag)
73
74     Message(BufferInfo bufferInfo = BufferInfo(),
75             Type type = Plain,
76             QString contents = {},
77             QString sender = {},
78             QString senderPrefixes = {},
79             QString realName = {},
80             QString avatarUrl = {},
81             Flags flags = None);
82     Message(QDateTime ts,
83             BufferInfo buffer = BufferInfo(),
84             Type type = Plain,
85             QString contents = {},
86             QString sender = {},
87             QString senderPrefixes = {},
88             QString realName = {},
89             QString avatarUrl = {},
90             Flags flags = None);
91
92     inline static Message ChangeOfDay(const QDateTime& day) { return Message(day, BufferInfo(), DayChange); }
93     inline const MsgId& msgId() const { return _msgId; }
94     inline void setMsgId(MsgId id) { _msgId = id; }
95
96     inline const BufferInfo& bufferInfo() const { return _bufferInfo; }
97     inline const BufferId& bufferId() const { return _bufferInfo.bufferId(); }
98     inline void setBufferId(BufferId id) { _bufferInfo.setBufferId(id); }
99     inline const QString& contents() const { return _contents; }
100     inline const QString& sender() const { return _sender; }
101     inline const QString& senderPrefixes() const { return _senderPrefixes; }
102     inline const QString& realName() const { return _realName; }
103     inline const QString& avatarUrl() const { return _avatarUrl; }
104     inline Type type() const { return _type; }
105     inline Flags flags() const { return _flags; }
106     inline void setFlags(Flags flags) { _flags = flags; }
107     inline const QDateTime& timestamp() const { return _timestamp; }
108
109     inline bool isValid() const { return _msgId.isValid(); }
110
111     inline bool operator<(const Message& other) const { return _msgId < other._msgId; }
112
113 private:
114     QDateTime _timestamp;
115     MsgId _msgId;
116     BufferInfo _bufferInfo;
117     QString _contents;
118     QString _sender;
119     QString _senderPrefixes;
120     QString _realName;
121     QString _avatarUrl;
122     Type _type;
123     Flags _flags;
124
125     friend QDataStream& operator>>(QDataStream& in, Message& msg);
126 };
127
128 using MessageList = QList<Message>;
129
130 QDataStream& operator<<(QDataStream& out, const Message& msg);
131 QDataStream& operator>>(QDataStream& in, Message& msg);
132 QDebug operator<<(QDebug dbg, const Message& msg);
133
134 Q_DECLARE_METATYPE(Message)
135 Q_DECLARE_OPERATORS_FOR_FLAGS(Message::Types)
136 Q_DECLARE_OPERATORS_FOR_FLAGS(Message::Flags)