Fixed a bug in the multiuser environment
[quassel.git] / src / core / sqlitestorage.cpp
index fcb0700..52846cd 100644 (file)
@@ -1,11 +1,11 @@
 /***************************************************************************
- *   Copyright (C) 2005-07 by The Quassel Team                             *
+ *   Copyright (C) 2005-07 by the Quassel IRC Team                         *
  *   devel@quassel-irc.org                                                 *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
  *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
+ *   (at your option) version 3.                                           *
  *                                                                         *
  *   This program is distributed in the hope that it will be useful,       *
  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
@@ -67,7 +67,7 @@ bool SqliteStorage::setup(const QVariantMap &settings) {
   {
     logDb = QSqlDatabase::addDatabase("QSQLITE", "quassel_setup");
     logDb.setDatabaseName(SqliteStorage::backlogFile(true));
-    bool ok = logDb.open();
+    ok = logDb.open();
     
     if (!ok) {
       qWarning(tr("Could not open backlog database: %1").arg(logDb.lastError().text()).toAscii());
@@ -167,7 +167,7 @@ bool SqliteStorage::init(const QVariantMap &settings) {
 
   // we will need those pretty often... so let's speed things up:
   createBufferQuery = new QSqlQuery(logDb);
-  createBufferQuery->prepare("INSERT INTO buffer (userid, networkid, buffername) VALUES (:userid, (SELECT networkid FROM network WHERE networkname = :networkname), :buffername)");
+  createBufferQuery->prepare("INSERT INTO buffer (userid, networkid, buffername) VALUES (:userid, (SELECT networkid FROM network WHERE networkname = :networkname AND userid = :userid2), :buffername)");
 
   createNetworkQuery = new QSqlQuery(logDb);
   createNetworkQuery->prepare("INSERT INTO network (userid, networkname) VALUES (:userid, :networkname)");
@@ -175,7 +175,7 @@ bool SqliteStorage::init(const QVariantMap &settings) {
   getBufferInfoQuery = new QSqlQuery(logDb);
   getBufferInfoQuery->prepare("SELECT bufferid FROM buffer "
                             "JOIN network ON buffer.networkid = network.networkid "
-                            "WHERE network.networkname = :networkname AND buffer.userid = :userid AND lower(buffer.buffername) = lower(:buffername)");
+                            "WHERE network.networkname = :networkname AND network.userid = :userid AND buffer.userid = :userid2 AND lower(buffer.buffername) = lower(:buffername)");
 
   logMessageQuery = new QSqlQuery(logDb);
   logMessageQuery->prepare("INSERT INTO backlog (time, bufferid, type, flags, senderid, message) "
@@ -311,6 +311,7 @@ void SqliteStorage::delUser(UserId user) {
 
 void SqliteStorage::createBuffer(UserId user, const QString &network, const QString &buffer) {
   createBufferQuery->bindValue(":userid", user);
+  createBufferQuery->bindValue(":userid2", user);  // Qt can't handle same placeholder twice (maybe sqlites fault)
   createBufferQuery->bindValue(":networkname", network);
   createBufferQuery->bindValue(":buffername", buffer);
   createBufferQuery->exec();
@@ -359,6 +360,7 @@ BufferInfo SqliteStorage::getBufferInfo(UserId user, const QString &network, con
   uint networkId = getNetworkId(user, network);
   getBufferInfoQuery->bindValue(":networkname", network);
   getBufferInfoQuery->bindValue(":userid", user);
+  getBufferInfoQuery->bindValue(":userid2", user); // Qt can't handle same placeholder twice... though I guess it's sqlites fault
   getBufferInfoQuery->bindValue(":buffername", buffer);
   getBufferInfoQuery->exec();
 
@@ -521,7 +523,7 @@ QList<Message> SqliteStorage::requestMsgRange(BufferInfo buffer, int first, int
 
 QString SqliteStorage::backlogFile(bool createPath) {
   // kinda ugly, but I currently see no other way to do that
-#ifdef _WINDOWS
+#ifdef Q_OS_WIN32
   QString quasselDir = QDir::homePath() + qgetenv("APPDATA") + "\\quassel\\";
 #else
   QString quasselDir = QDir::homePath() + "/.quassel/";