* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-
-#include "util.h"
-#include "global.h"
#include "server.h"
-#include "message.h"
#include <QMetaObject>
+#include <QMetaMethod>
#include <QDateTime>
+#include "util.h"
+#include "core.h"
+#include "coresession.h"
+
Server::Server(UserId uid, QString net) : user(uid), network(net) {
QString MQUOTE = QString('\020');
ctcpMDequoteHash[MQUOTE + '0'] = QString('\000');
QString XQUOTE = QString('\134');
ctcpXDelimDequoteHash[XQUOTE + XQUOTE] = XQUOTE;
ctcpXDelimDequoteHash[XQUOTE + QString('a')] = XDELIM;
+
+ serverinfo = new ServerInfo();
}
Server::~Server() {
-
+ delete serverinfo;
}
void Server::run() {
void Server::connectToIrc(QString net) {
if(net != network) return; // not me!
- networkSettings = Global::data(user, "Networks").toMap()[net].toMap();
- identity = Global::data(user, "Identities").toMap()[networkSettings["Identity"].toString()].toMap();
+ CoreSession *sess = Core::session(user);
+ //networkSettings = Global::data(user, "Networks").toMap()[net].toMap();
+ networkSettings = sess->retrieveSessionData("Networks").toMap()[net].toMap();
+ //identity = Global::data(user, "Identities").toMap()[networkSettings["Identity"].toString()].toMap();
+ identity = sess->retrieveSessionData("Identities").toMap()[networkSettings["Identity"].toString()].toMap();
QList<QVariant> servers = networkSettings["Servers"].toList();
QString host = servers[0].toMap()["Address"].toString();
quint16 port = servers[0].toMap()["Port"].toUInt();
void Server::socketHasData() {
while(socket.canReadLine()) {
- QString s = socket.readLine().trimmed();
+ QByteArray s = socket.readLine().trimmed();
//qDebug() << "Read" << s;
- emit recvRawServerMsg(s);
+ //emit recvRawServerMsg(s); // signal not needed, and we should make sure we consider encodings where we need them
//Message *msg = Message::createFromServerString(this, s);
handleServerMsg(s);
}
socket.write(m.toAscii());
}
-/** Handle a raw message string sent by the server. We try to find a suitable handler, otherwise we call a default handler. */
-void Server::handleServerMsg(QString msg) {
+/*! Handle a raw message string sent by the server. We try to find a suitable handler, otherwise we call a default handler. */
+void Server::handleServerMsg(QByteArray rawmsg) {
try {
- if(msg.isEmpty()) {
+ if(rawmsg.isEmpty()) {
qWarning() << "Received empty string from server!";
return;
}
+ // TODO Implement encoding conversion
+ /* At this point, we have a raw message as a byte array. This needs to be converted to a QString somewhere.
+ * Problem is, that at this point we don't know which encoding to use for the various parts of the message.
+ * This is something the command handler needs to take care of (e.g. PRIVMSG needs to first parse for CTCP,
+ * and then convert the raw strings into the correct encoding.
+ * We _can_ safely assume Server encoding for prefix and cmd, but not for the params. Therefore, we need to
+ * change from a QStringList to a QList<QByteArray> in all the handlers, and have the handlers call decodeString
+ * where needed...
+ */
+ QString msg = QString::fromLatin1(rawmsg);
+
// OK, first we split the raw message into its various parts...
QString prefix = "";
QString cmd;