Fixed Bug #20 (Handle Numeric Reply 433 ERR_NICKNAMEINUSE properly)
[quassel.git] / main / global.cpp
1 /***************************************************************************
2  *   Copyright (C) 2005 by The Quassel Team                                *
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) any later version.                                   *
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 #include "global.h"
22 #include "logger.h"
23 #include "core.h"
24 #include "message.h"
25 #include "util.h"
26
27 #include <QtCore>
28 #include <QDomDocument>
29
30 extern void messageHandler(QtMsgType type, const char *msg);
31
32 Global::Global() {
33   if(global) qFatal("Trying to instantiate more than one Global object!");
34   qInstallMsgHandler(messageHandler);
35   qRegisterMetaType<Message>("Message");
36   qRegisterMetaTypeStreamOperators<Message>("Message");
37   qRegisterMetaType<BufferId>("BufferId");
38   qRegisterMetaTypeStreamOperators<BufferId>("BufferId");
39
40   //initIconMap();
41 }
42
43 /*
44 void Global::setLogger(Logger *) {
45
46
47 };
48 */
49
50 QVariant Global::getData(QString key, QVariant defval) {
51   QVariant d;
52   mutex.lock();
53   if(data.contains(key)) d = data[key];
54   else d = defval;
55   mutex.unlock();
56   //qDebug() << "getData("<<key<<"): " << d;
57   return d;
58 }
59
60 QStringList Global::getKeys() {
61   QStringList k;
62   mutex.lock();
63   k = data.keys();
64   mutex.unlock();
65   return k;
66 }
67
68 void Global::putData(QString key, QVariant d) {
69   mutex.lock();
70   data[key] = d;
71   mutex.unlock();
72   emit dataPutLocally(key);
73 }
74
75 void Global::updateData(QString key, QVariant d) {
76   mutex.lock();
77   data[key] = d;
78   mutex.unlock();
79   emit dataUpdatedRemotely(key);
80 }
81
82 /* not done yet */
83 void Global::initIconMap() {
84 // Do not depend on GUI in core!
85 /*
86   QDomDocument doc("IconMap");
87   QFile file("images/iconmap.xml");
88   if(!file.open(QIODevice::ReadOnly)) {
89     qDebug() << "Error opening iconMap file!";
90     return;
91   } else if(!doc.setContent(&file)) {
92     file.close();
93     qDebug() << "Error parsing iconMap file!";
94   } else {
95     file.close();
96
97   }
98 */
99 }
100
101 /**************************************************************************************/
102
103
104
105 BufferId::BufferId(uint _id, QString _net, QString _buf, uint _gid) : id(_id), gid(_gid), net(_net), buf(_buf) {
106
107
108 }
109
110 QString BufferId::buffer() {
111   if(isChannelName(buf)) return buf;
112   else return nickFromMask(buf);
113 }
114
115 QDataStream &operator<<(QDataStream &out, const BufferId &bufferId) {
116   out << bufferId.id << bufferId.gid << bufferId.net.toUtf8() << bufferId.buf.toUtf8();
117 }
118
119 QDataStream &operator>>(QDataStream &in, BufferId &bufferId) {
120   QByteArray n, b;
121   BufferId i;
122   in >> bufferId.id >> bufferId.gid >> n >> b;
123   bufferId.net = QString::fromUtf8(n);
124   bufferId.buf = QString::fromUtf8(b);
125 }
126
127 uint qHash(const BufferId &bid) {
128   return qHash(bid.id);
129 }
130
131 /**
132  * Retrieves an icon determined by its symbolic name. The mapping shall later
133  * be performed by a theme manager or something like that.
134  * @param symbol Symbol of requested icon
135  * @return Pointer to a newly created QIcon
136  */
137 //
138 //QIcon *Global::getIcon(QString /*symbol*/) {
139   //if(symbol == "connect"
140
141 //  return 0;
142 //}
143
144 Global *global = 0;
145 Global::RunMode Global::runMode;
146 QString Global::quasselDir;