more default nick and realname improvements
[quassel.git] / src / common / identity.h
1 /***************************************************************************
2  *   Copyright (C) 2005-09 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  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
19  ***************************************************************************/
20
21 #ifndef IDENTITY_H
22 #define IDENTITY_H
23
24 #include <QByteArray>
25 #include <QDataStream>
26 #include <QMetaType>
27 #include <QString>
28 #include <QStringList>
29
30 #include "types.h"
31 #include "syncableobject.h"
32
33 class Identity : public SyncableObject {
34   Q_OBJECT
35
36   Q_PROPERTY(IdentityId identityId READ id WRITE setId STORED false)
37   Q_PROPERTY(QString identityName READ identityName WRITE setIdentityName STORED false)
38   Q_PROPERTY(QString realName READ realName WRITE setRealName STORED false)
39   Q_PROPERTY(QStringList nicks READ nicks WRITE setNicks STORED false)
40   Q_PROPERTY(QString awayNick READ awayNick WRITE setAwayNick STORED false)
41   Q_PROPERTY(bool awayNickEnabled READ awayNickEnabled WRITE setAwayNickEnabled STORED false)
42   Q_PROPERTY(QString awayReason READ awayReason WRITE setAwayReason STORED false)
43   Q_PROPERTY(bool awayReasonEnabled READ awayReasonEnabled WRITE setAwayReasonEnabled STORED false)
44   Q_PROPERTY(bool autoAwayEnabled READ autoAwayEnabled WRITE setAutoAwayEnabled STORED false)
45   Q_PROPERTY(int autoAwayTime READ autoAwayTime WRITE setAutoAwayTime STORED false)
46   Q_PROPERTY(QString autoAwayReason READ autoAwayReason WRITE setAutoAwayReason STORED false)
47   Q_PROPERTY(bool autoAwayReasonEnabled READ autoAwayReasonEnabled WRITE setAutoAwayReasonEnabled STORED false)
48   Q_PROPERTY(bool detachAwayEnabled READ detachAwayEnabled WRITE setDetachAwayEnabled STORED false)
49   Q_PROPERTY(QString detachAwayReason READ detachAwayReason WRITE setDetachAwayReason STORED false)
50   Q_PROPERTY(bool detachAwayReasonEnabled READ detachAwayReasonEnabled WRITE setDetachAwayReasonEnabled STORED false)
51   Q_PROPERTY(QString ident READ ident WRITE setIdent STORED false)
52   Q_PROPERTY(QString kickReason READ kickReason WRITE setKickReason STORED false)
53   Q_PROPERTY(QString partReason READ partReason WRITE setPartReason STORED false)
54   Q_PROPERTY(QString quitReason READ quitReason WRITE setQuitReason STORED false)
55
56 public:
57   Identity(IdentityId id = 0, QObject *parent = 0);
58   Identity(const Identity &other, QObject *parent = 0);
59   inline virtual const QMetaObject *syncMetaObject() const { return &staticMetaObject; }
60
61   void setToDefaults();
62
63   bool operator==(const Identity &other) const;
64   bool operator!=(const Identity &other) const;
65
66   inline bool isValid() const { return id().isValid(); }
67
68   inline IdentityId id() const { return _identityId; }
69   inline const QString &identityName() const { return _identityName; }
70   inline const QString &realName() const { return _realName; }
71   inline const QStringList &nicks() const { return _nicks; }
72   inline const QString &awayNick() const { return _awayNick; }
73   inline bool awayNickEnabled() const { return _awayNickEnabled; }
74   inline const QString &awayReason() const { return _awayReason; }
75   inline bool awayReasonEnabled() const { return _awayReasonEnabled; }
76   inline bool autoAwayEnabled() const { return _autoAwayEnabled; }
77   inline int autoAwayTime() const { return _autoAwayTime; }
78   inline const QString &autoAwayReason() const { return _autoAwayReason; }
79   inline bool autoAwayReasonEnabled() const { return _autoAwayReasonEnabled; }
80   inline bool detachAwayEnabled() const { return _detachAwayEnabled; }
81   inline const QString &detachAwayReason() const { return _detachAwayReason; }
82   inline bool detachAwayReasonEnabled() const { return _detachAwayReasonEnabled; }
83   inline const QString &ident() const { return _ident; }
84   inline const QString &kickReason() const { return _kickReason; }
85   inline const QString &partReason() const { return _partReason; }
86   inline const QString &quitReason() const { return _quitReason; }
87
88 public slots:
89   void setId(IdentityId id);
90   void setIdentityName(const QString &name);
91   void setRealName(const QString &realName);
92   void setNicks(const QStringList &nicks);
93   void setAwayNick(const QString &awayNick);
94   void setAwayNickEnabled(bool enabled);
95   void setAwayReason(const QString &awayReason);
96   void setAwayReasonEnabled(bool enabled);
97   void setAutoAwayEnabled(bool enabled);
98   void setAutoAwayTime(int time);
99   void setAutoAwayReason(const QString &reason);
100   void setAutoAwayReasonEnabled(bool enabled);
101   void setDetachAwayEnabled(bool enabled);
102   void setDetachAwayReason(const QString &reason);
103   void setDetachAwayReasonEnabled(bool enabled);
104   void setIdent(const QString &ident);
105   void setKickReason(const QString &reason);
106   void setPartReason(const QString &reason);
107   void setQuitReason(const QString &reason);
108
109   void copyFrom(const Identity &other);
110
111 signals:
112   void idSet(IdentityId id);
113   void identityNameSet(const QString &name);
114   void realNameSet(const QString &realName);
115   void nicksSet(const QStringList &nicks);
116   void awayNickSet(const QString &awayNick);
117   void awayNickEnabledSet(bool);
118   void awayReasonSet(const QString &awayReason);
119   void awayReasonEnabledSet(bool);
120   void autoAwayEnabledSet(bool);
121   void autoAwayTimeSet(int);
122   void autoAwayReasonSet(const QString &);
123   void autoAwayReasonEnabledSet(bool);
124   void detachAwayEnabledSet(bool);
125   void detachAwayReasonSet(const QString &);
126   void detachAwayReasonEnabledSet(bool);
127   void identSet(const QString &);
128   void kickReasonSet(const QString &);
129   void partReasonSet(const QString &);
130   void quitReasonSet(const QString &);
131
132 private:
133   IdentityId _identityId;
134   QString _identityName, _realName;
135   QStringList _nicks;
136   QString _awayNick;
137   bool _awayNickEnabled;
138   QString _awayReason;
139   bool _awayReasonEnabled;
140   bool _autoAwayEnabled;
141   int _autoAwayTime;
142   QString _autoAwayReason;
143   bool _autoAwayReasonEnabled;
144   bool _detachAwayEnabled;
145   QString _detachAwayReason;
146   bool _detachAwayReasonEnabled;
147   QString _ident, _kickReason, _partReason, _quitReason;
148
149   void init();
150   QString defaultNick();
151   QString defaultRealName();
152
153   friend QDataStream &operator>>(QDataStream &in, Identity &identity);
154 };
155
156 QDataStream &operator<<(QDataStream &out, Identity identity);
157 QDataStream &operator>>(QDataStream &in, Identity &identity);
158
159 Q_DECLARE_METATYPE(Identity)
160
161 #ifdef HAVE_SSL
162 #include <QSslKey>
163 #include <QSslCertificate>
164
165 class CertManager : public SyncableObject {
166   Q_OBJECT
167   Q_PROPERTY(QByteArray sslKey READ sslKeyPem WRITE setSslKey STORED false)
168   Q_PROPERTY(QByteArray sslCert READ sslCertPem WRITE setSslCert STORED false)
169
170 public:
171   CertManager(IdentityId id, QObject *parent = 0) : SyncableObject(QString::number(id.toInt()), parent) {}
172   inline virtual const QMetaObject *syncMetaObject() const { return &staticMetaObject; }
173
174   virtual const QSslKey &sslKey() const = 0;
175   inline QByteArray sslKeyPem() const { return sslKey().toPem(); }
176   virtual const QSslCertificate &sslCert() const = 0;
177   inline QByteArray sslCertPem() const { return sslCert().toPem(); }
178
179 public slots:
180   inline virtual void setSslKey(const QByteArray &encoded) { emit sslKeySet(encoded); }
181   inline virtual void setSslCert(const QByteArray &encoded) { emit sslCertSet(encoded); }
182
183 signals:
184   void sslKeySet(const QByteArray &);
185   void sslCertSet(const QByteArray &);
186 };
187
188 #endif // HAVE_SSL
189
190 #endif // IDENTITY_H