From: Manuel Nickschas Date: Mon, 14 Apr 2008 19:12:56 +0000 (+0000) Subject: Merging r732:745 from trunk into branches/0.3. Forwardporting fancy bufferviews and... X-Git-Tag: 0.3.0~425^2~25 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=cf7c5679c2475bb563cd64e15477c485d89368a3 Merging r732:745 from trunk into branches/0.3. Forwardporting fancy bufferviews and more. --- diff --git a/src/client/client.cpp b/src/client/client.cpp index 5e472a10..8d606891 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -333,11 +333,12 @@ void Client::disconnectFromCore() { socket->deleteLater(); } _syncedToCore = false; - setCurrentCoreAccount(0); emit disconnected(); emit coreConnectionStateChanged(false); // Clear internal data. Hopefully nothing relies on it at this point. + setCurrentCoreAccount(0); + if(_bufferSyncer) { _bufferSyncer->deleteLater(); _bufferSyncer = 0; diff --git a/src/client/clientsettings.cpp b/src/client/clientsettings.cpp index 64274a37..3a1dbd88 100644 --- a/src/client/clientsettings.cpp +++ b/src/client/clientsettings.cpp @@ -39,7 +39,8 @@ CoreAccountSettings::CoreAccountSettings(const QString &subgroup) : ClientSettin QList CoreAccountSettings::knownAccounts() { QList ids; foreach(QString key, localChildGroups()) { - ids << key.toInt(); + AccountId acc = key.toInt(); + if(acc.isValid()) ids << acc; } return ids; } diff --git a/src/common/bufferviewconfig.cpp b/src/common/bufferviewconfig.cpp index 2ffb3a7a..1affaba7 100644 --- a/src/common/bufferviewconfig.cpp +++ b/src/common/bufferviewconfig.cpp @@ -129,26 +129,32 @@ void BufferViewConfig::initSetBufferList(const QList &buffers) { } void BufferViewConfig::addBuffer(const BufferId &bufferId, int pos) { - qDebug() << "addBuffer" << bufferId; if(_buffers.contains(bufferId)) return; + + if(pos < 0) + pos = 0; + if(pos > _buffers.count()) + pos = _buffers.count(); _buffers.insert(pos, bufferId); emit bufferAdded(bufferId, pos); } void BufferViewConfig::moveBuffer(const BufferId &bufferId, int pos) { - qDebug() << "moveeBuffer" << bufferId; if(!_buffers.contains(bufferId)) return; - qDebug() << "lala" << bufferId << pos; + if(pos < 0) + pos = 0; + if(pos >= _buffers.count()) + pos = _buffers.count() - 1; + _buffers.move(_buffers.indexOf(bufferId), pos); emit bufferMoved(bufferId, pos); } void BufferViewConfig::removeBuffer(const BufferId &bufferId) { - qDebug() << "removeBuffer" << bufferId; if(!_buffers.contains(bufferId)) return; diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 94cf39eb..d7b9cb19 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -248,8 +248,12 @@ void CoreSession::networkConnected(NetworkId networkid) { // called now only on /quit and requested disconnects, not on normal disconnects! void CoreSession::networkDisconnected(NetworkId networkid) { - Core::setNetworkConnected(user(), networkid, false); - if(_connections.contains(networkid)) _connections.take(networkid)->deleteLater(); + // if the network has already been removed, we don't have a networkconnection left either, so we don't do anything + // make sure to not depend on the network still existing when calling this function! + if(_connections.contains(networkid)) { + Core::setNetworkConnected(user(), networkid, false); + _connections.take(networkid)->deleteLater(); + } } void CoreSession::channelJoined(NetworkId id, const QString &channel, const QString &key) { @@ -433,7 +437,10 @@ void CoreSession::removeNetwork(NetworkId id) { } void CoreSession::destroyNetwork(NetworkId id) { - Q_ASSERT(!_connections.contains(id)); + if(_connections.contains(id)) { + // this can happen if the network was reconnecting while being removed + _connections.take(id)->deleteLater(); + } Network *net = _networks.take(id); if(net && Core::removeNetwork(user(), id)) { emit networkRemoved(id); diff --git a/src/core/userinputhandler.cpp b/src/core/userinputhandler.cpp index 679eb987..618bc8da 100644 --- a/src/core/userinputhandler.cpp +++ b/src/core/userinputhandler.cpp @@ -24,6 +24,7 @@ #include "networkconnection.h" #include "network.h" #include "ctcphandler.h" +#include "ircuser.h" #include @@ -58,13 +59,41 @@ void UserInputHandler::handleAway(const BufferInfo &bufferInfo, const QString &m } void UserInputHandler::handleBan(const BufferInfo &bufferInfo, const QString &msg) { - if(bufferInfo.type() != BufferInfo::ChannelBuffer) + QString banChannel; + QString banUser; + + QStringList params = msg.split(" "); + + if(!params.isEmpty() && isChannelName(params[0])) { + banChannel = params.takeFirst(); + } else if(bufferInfo.type() == BufferInfo::ChannelBuffer) { + banChannel = bufferInfo.bufferName(); + } else { + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", QString("Error: channel unknown in command: /BAN %1").arg(msg)); return; - - //TODO: find suitable default hostmask if msg gives only nickname - // Example: MODE &oulu +b *!*@* - QByteArray banMsg = serverEncode(bufferInfo.bufferName()) + " +b " + channelEncode(bufferInfo.bufferName(), msg); - emit putCmd("MODE", banMsg); + } + + if(!params.isEmpty() && !params.contains("!") && network()->ircUser(params[0])) { + IrcUser *ircuser = network()->ircUser(params[0]); + // generalizedHost changes to *!ident@*.sld.tld. + QString generalizedHost = ircuser->host(); + if(generalizedHost.isEmpty()) { + emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", QString("Error: host unknown in command: /BAN %1").arg(msg)); + return; + } + + if(generalizedHost.lastIndexOf(".") != -1 && generalizedHost.lastIndexOf(".", generalizedHost.lastIndexOf(".")-1) != -1) { + int secondLastPeriodPosition = generalizedHost.lastIndexOf(".", generalizedHost.lastIndexOf(".")-1); + generalizedHost.replace(0, secondLastPeriodPosition, "*"); + } + banUser = QString("*!%1@%2").arg(ircuser->user()).arg(generalizedHost); + } else { + banUser = params.join(" "); + } + + QString banMsg = QString("MODE %1 +b %2").arg(banChannel).arg(banUser); + qDebug() << banMsg; + emit putRawLine(serverEncode(banMsg)); } void UserInputHandler::handleCtcp(const BufferInfo &bufferInfo, const QString &msg) { @@ -139,6 +168,15 @@ void UserInputHandler::handleKick(const BufferInfo &bufferInfo, const QString &m emit putCmd("KICK", params); } +void UserInputHandler::handleKill(const BufferInfo &bufferInfo, const QString &msg) { + QString nick = msg.section(' ', 0, 0, QString::SectionSkipEmpty); + QString pass = msg.section(' ', 1, -1, QString::SectionSkipEmpty); + QList params; + params << serverEncode(nick) << serverEncode(pass); + emit putCmd("KILL", params); +} + + void UserInputHandler::handleList(const BufferInfo &bufferInfo, const QString &msg) { Q_UNUSED(bufferInfo) emit putCmd("LIST", serverEncode(msg.split(' ', QString::SkipEmptyParts))); @@ -184,6 +222,10 @@ void UserInputHandler::handleOp(const BufferInfo &bufferInfo, const QString &msg emit putCmd("MODE", serverEncode(params)); } +void UserInputHandler::handleOper(const BufferInfo &bufferInfo, const QString &msg) { + emit putRawLine(serverEncode(QString("OPER %1").arg(msg))); +} + void UserInputHandler::handlePart(const BufferInfo &bufferInfo, const QString &msg) { QList params; params << serverEncode(bufferInfo.bufferName()) << channelEncode(bufferInfo.bufferName(), msg); diff --git a/src/core/userinputhandler.h b/src/core/userinputhandler.h index 85355467..d1e2d266 100644 --- a/src/core/userinputhandler.h +++ b/src/core/userinputhandler.h @@ -43,11 +43,13 @@ public slots: void handleJ(const BufferInfo &bufferInfo, const QString &text); void handleJoin(const BufferInfo &bufferInfo, const QString &text); void handleKick(const BufferInfo &bufferInfo, const QString &text); + void handleKill(const BufferInfo &bufferInfo, const QString &text); void handleList(const BufferInfo &bufferInfo, const QString &text); void handleMe(const BufferInfo &bufferInfo, const QString &text); void handleMode(const BufferInfo &bufferInfo, const QString &text); void handleMsg(const BufferInfo &bufferInfo, const QString &text); void handleNick(const BufferInfo &bufferInfo, const QString &text); + void handleOper(const BufferInfo &bufferInfo, const QString &text); void handleOp(const BufferInfo &bufferInfo, const QString &text); void handlePart(const BufferInfo &bufferInfo, const QString &text); void handleQuery(const BufferInfo &bufferInfo, const QString &text); diff --git a/src/qtui/coreconnectdlg.cpp b/src/qtui/coreconnectdlg.cpp index 4811e2e0..7490cb41 100644 --- a/src/qtui/coreconnectdlg.cpp +++ b/src/qtui/coreconnectdlg.cpp @@ -52,6 +52,7 @@ CoreConnectDlg::CoreConnectDlg(QWidget *parent, bool autoconnect) foreach(AccountId id, s.knownAccounts()) { if(!id.isValid()) continue; QVariantMap data = s.retrieveAccountData(id); + data["AccountId"] = QVariant::fromValue(id); accounts[id] = data; QListWidgetItem *item = new QListWidgetItem(data["AccountName"].toString(), ui.accountList); item->setData(Qt::UserRole, QVariant::fromValue(id)); diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 36d70969..7b177c1a 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -101,6 +101,8 @@ void MainWin::init() { Client::signalProxy()->attachSignal(this, SIGNAL(requestBacklog(BufferInfo, QVariant, QVariant))); + connect(QApplication::instance(), SIGNAL(aboutToQuit()), this, SLOT(saveLayout())); + connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(clientNetworkCreated(NetworkId))); connect(Client::instance(), SIGNAL(networkRemoved(NetworkId)), this, SLOT(clientNetworkRemoved(NetworkId))); //ui.bufferWidget->init(); @@ -132,7 +134,7 @@ void MainWin::init() { // restore mainwin state restoreState(s.value("MainWinState").toByteArray()); - disconnectedFromCore(); // Disable menus and stuff + setDisconnectedState(); // Disable menus and stuff showCoreConnectionDlg(true); // autoconnect if appropriate // attach the BufferWidget to the BufferModel and the default selection @@ -225,7 +227,7 @@ void MainWin::removeBufferView(int bufferViewConfigId) { break; dock = qobject_cast(action->parent()); - if(dock && actionData.toInt() != bufferViewConfigId) { + if(dock && actionData.toInt() == bufferViewConfigId) { removeAction(action); dock->deleteLater(); } @@ -407,7 +409,10 @@ void MainWin::connectedToCore() { foreach(BufferInfo id, Client::allBufferInfos()) { Client::backlogManager()->requestBacklog(id.bufferId(), 500, -1); } + setConnectedState(); +} +void MainWin::setConnectedState() { ui.menuViews->setEnabled(true); //ui.menuCore->setEnabled(true); ui.actionConnectCore->setEnabled(false); @@ -427,6 +432,12 @@ void MainWin::loadLayout() { restoreState(s.value(QString("MainWinState-%1").arg(accountId)).toByteArray(), accountId); } +void MainWin::saveLayout() { + QtUiSettings s; + int accountId = Client::currentCoreAccount().toInt(); + if(accountId > 0) s.setValue(QString("MainWinState-%1").arg(accountId) , saveState(accountId)); +} + void MainWin::securedConnection() { // todo: make status bar entry qDebug() << "secured the connection"; @@ -436,9 +447,7 @@ void MainWin::securedConnection() { void MainWin::disconnectedFromCore() { // save core specific layout and remove bufferviews; - QtUiSettings s; - int accountId = Client::currentCoreAccount().toInt(); - s.setValue(QString("MainWinState-%1").arg(accountId) , saveState(accountId)); + saveLayout(); QVariant actionData; BufferViewDock *dock; foreach(QAction *action, ui.menuViews->actions()) { @@ -455,7 +464,12 @@ void MainWin::disconnectedFromCore() { dock->deleteLater(); } } + QtUiSettings s; + restoreState(s.value("MainWinState").toByteArray()); + setDisconnectedState(); +} +void MainWin::setDisconnectedState() { ui.menuViews->setEnabled(false); //ui.menuCore->setEnabled(false); ui.actionDisconnectCore->setEnabled(false); diff --git a/src/qtui/mainwin.h b/src/qtui/mainwin.h index 01903456..f572e1d5 100644 --- a/src/qtui/mainwin.h +++ b/src/qtui/mainwin.h @@ -64,8 +64,10 @@ class MainWin : public QMainWindow { protected slots: void connectedToCore(); + void setConnectedState(); void securedConnection(); void disconnectedFromCore(); + void setDisconnectedState(); void systrayActivated( QSystemTrayIcon::ActivationReason ); private slots: @@ -91,6 +93,7 @@ class MainWin : public QMainWindow { void saveStatusBarStatus(bool enabled); void loadLayout(); + void saveLayout(); signals: void connectToCore(const QVariantMap &connInfo); diff --git a/src/qtui/settingspages/bufferviewsettingspage.cpp b/src/qtui/settingspages/bufferviewsettingspage.cpp index 9e959960..1d69e4ef 100644 --- a/src/qtui/settingspages/bufferviewsettingspage.cpp +++ b/src/qtui/settingspages/bufferviewsettingspage.cpp @@ -425,6 +425,12 @@ BufferViewConfig *BufferViewSettingsPage::cloneConfig(BufferViewConfig *config) BufferViewConfig *changedConfig = new BufferViewConfig(-1, this); changedConfig->fromVariantMap(config->toVariantMap()); _changedBufferViews[config] = changedConfig; + connect(config, SIGNAL(bufferAdded(const BufferId &, int)), changedConfig, SLOT(addBuffer(const BufferId &, int))); + connect(config, SIGNAL(bufferMoved(const BufferId &, int)), changedConfig, SLOT(moveBuffer(const BufferId &, int))); + connect(config, SIGNAL(bufferRemoved(const BufferId &)), changedConfig, SLOT(removeBuffer(const BufferId &))); + connect(config, SIGNAL(addBufferRequested(const BufferId &, int)), changedConfig, SLOT(addBuffer(const BufferId &, int))); + connect(config, SIGNAL(moveBufferRequested(const BufferId &, int)), changedConfig, SLOT(moveBuffer(const BufferId &, int))); + connect(config, SIGNAL(removeBufferRequested(const BufferId &)), changedConfig, SLOT(removeBuffer(const BufferId &))); // if this is the currently displayed view we have to change the config of the preview filter BufferViewFilter *filter = qobject_cast(ui.bufferViewPreview->model()); diff --git a/src/qtui/settingspages/networkssettingspage.ui b/src/qtui/settingspages/networkssettingspage.ui index 7dd53086..b4d1f332 100644 --- a/src/qtui/settingspages/networkssettingspage.ui +++ b/src/qtui/settingspages/networkssettingspage.ui @@ -1,6 +1,14 @@ NetworksSettingsPage + + + 0 + 0 + 736 + 452 + + Form @@ -29,7 +37,8 @@ Re&name... - :/16x16/actions/oxygen/16x16/actions/edit-rename.png + + :/16x16/actions/oxygen/16x16/actions/edit-rename.png:/16x16/actions/oxygen/16x16/actions/edit-rename.png @@ -45,7 +54,8 @@ &Add... - :/16x16/actions/oxygen/16x16/actions/list-add.png + + :/16x16/actions/oxygen/16x16/actions/list-add.png:/16x16/actions/oxygen/16x16/actions/list-add.png @@ -67,7 +77,8 @@ De&lete - :/16x16/actions/oxygen/16x16/actions/edit-delete.png + + :/16x16/actions/oxygen/16x16/actions/edit-delete.png:/16x16/actions/oxygen/16x16/actions/edit-delete.png @@ -76,7 +87,7 @@ Qt::Vertical - + 131 71 @@ -99,7 +110,9 @@ Connect now - + + + @@ -148,12 +161,20 @@ Unless you *really* know what you do, leave this as ISO-8859-1! - 0 + 1 true + + + 0 + 0 + 398 + 326 + + Servers @@ -184,7 +205,9 @@ Unless you *really* know what you do, leave this as ISO-8859-1! &Edit... - + + + @@ -200,7 +223,8 @@ Unless you *really* know what you do, leave this as ISO-8859-1! &Add... - :/16x16/actions/oxygen/16x16/actions/list-add.png + + :/16x16/actions/oxygen/16x16/actions/list-add.png:/16x16/actions/oxygen/16x16/actions/list-add.png @@ -216,7 +240,8 @@ Unless you *really* know what you do, leave this as ISO-8859-1! De&lete - :/16x16/actions/oxygen/16x16/actions/edit-delete.png + + :/16x16/actions/oxygen/16x16/actions/edit-delete.png:/16x16/actions/oxygen/16x16/actions/edit-delete.png @@ -227,7 +252,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Qt::Horizontal - + 0 20 @@ -244,7 +269,8 @@ Unless you *really* know what you do, leave this as ISO-8859-1! ... - :/16x16/actions/oxygen/16x16/actions/go-up.png + + :/16x16/actions/oxygen/16x16/actions/go-up.png:/16x16/actions/oxygen/16x16/actions/go-up.png @@ -257,7 +283,8 @@ Unless you *really* know what you do, leave this as ISO-8859-1! ... - :/16x16/actions/oxygen/16x16/actions/go-down.png + + :/16x16/actions/oxygen/16x16/actions/go-down.png:/16x16/actions/oxygen/16x16/actions/go-down.png @@ -266,7 +293,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Qt::Horizontal - + 0 20 @@ -281,7 +308,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Qt::Vertical - + 20 40 @@ -306,10 +333,18 @@ Unless you *really* know what you do, leave this as ISO-8859-1! + + + 0 + 0 + 398 + 326 + + Perform - + @@ -341,52 +376,60 @@ Unless you *really* know what you do, leave this as ISO-8859-1! true - - - - - - Service: - - - - - - - true - - - NickServ - - - - - - - true - - - Password: - - - - - - - true - - - QLineEdit::Password - - - - - + + + + + + Service: + + + + + + + true + + + NickServ + + + + + + + true + + + Password: + + + + + + + true + + + QLineEdit::Password + + + + + + + + 0 + 0 + 398 + 326 + + Advanced diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index 896bd116..a14ab031 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -22,6 +22,7 @@ #include +#include "buffermodel.h" #include "client.h" #include "networkmodel.h" @@ -36,6 +37,8 @@ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig * { setConfig(config); setSourceModel(model); + connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(source_rowsInserted(const QModelIndex &, int, int))); + // setSortCaseSensitivity(Qt::CaseInsensitive); setDynamicSortFilter(true); } @@ -88,6 +91,8 @@ bool BufferViewFilter::dropMimeData(const QMimeData *data, Qt::DropAction action networkId = bufferList[i].first; bufferId = bufferList[i].second; if(droppedNetworkId == networkId) { + if(row < 0) + row = 0; if(row < rowCount(parent)) { BufferId beforeBufferId = parent.child(row, 0).data(NetworkModel::BufferIdRole).value(); pos = config()->bufferList().indexOf(beforeBufferId); @@ -142,18 +147,20 @@ void BufferViewFilter::removeBuffer(const QModelIndex &index) { bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) const { if(!_config) return true; - + if(!(_config->allowedBufferTypes() & (BufferInfo::Type)source_bufferIndex.data(NetworkModel::BufferTypeRole).toInt())) return false; if(_config->hideInactiveBuffers() && !source_bufferIndex.data(NetworkModel::ItemActiveRole).toBool()) return false; - if(_config->minimumActivity() > source_bufferIndex.data(NetworkModel::BufferActivityRole).toInt()) - return false; + if(_config->minimumActivity() > source_bufferIndex.data(NetworkModel::BufferActivityRole).toInt()) { + if(!Client::bufferModel()->standardSelectionModel()->isSelected(source_bufferIndex)) + return false; + } - BufferId bufferId = sourceModel()->data(source_bufferIndex, NetworkModel::BufferIdRole).value(); - return _config->bufferList().contains(bufferId); + BufferId bufferId = sourceModel()->data(source_bufferIndex, NetworkModel::BufferIdRole).value(); + return _config->bufferList().contains(bufferId); } bool BufferViewFilter::filterAcceptNetwork(const QModelIndex &source_index) const { @@ -243,6 +250,17 @@ QVariant BufferViewFilter::foreground(const QModelIndex &index) const { } +void BufferViewFilter::source_rowsInserted(const QModelIndex &parent, int start, int end) { + if(parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType) + return; + + if(!config() || !config()->addNewBuffersAutomatically()) + return; + + for(int row = start; row <= end; row++) { + addBuffer(parent.child(row, 0).data(NetworkModel::BufferIdRole).value()); + } +} // ****************************** // Helper diff --git a/src/uisupport/bufferviewfilter.h b/src/uisupport/bufferviewfilter.h index 581cd6c9..07fec1bf 100644 --- a/src/uisupport/bufferviewfilter.h +++ b/src/uisupport/bufferviewfilter.h @@ -62,6 +62,7 @@ public: public slots: void removeBuffer(const QModelIndex &); + void source_rowsInserted(const QModelIndex &parent, int start, int end); protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index 71bee86c..5470d69f 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -124,10 +124,9 @@ void NickView::showContextMenu(const QPoint & pos ) { QAction *deVoiceAction = modeMenu->addAction(tr("Devoice %1").arg(nick)); QMenu *kickBanMenu = nickContextMenu.addMenu(tr("Kick/Ban")); - //TODO: add kick message from network identity (kick reason) QAction *kickAction = kickBanMenu->addAction(tr("Kick %1").arg(nick)); + QAction *banAction = kickBanMenu->addAction(tr("Ban %1").arg(nick)); QAction *kickBanAction = kickBanMenu->addAction(tr("Kickban %1").arg(nick)); - kickBanMenu->setEnabled(false); QAction *ignoreAction = nickContextMenu.addAction(tr("Ignore")); ignoreAction->setEnabled(false); @@ -152,7 +151,9 @@ void NickView::showContextMenu(const QPoint & pos ) { else if(action == deVoiceAction) { executeCommand(bufferInfo, QString("/DEVOICE %1").arg(nick)); } else if(action == kickAction) { executeCommand(bufferInfo, QString("/KICK %1").arg(nick)); } - else if(action == kickBanAction) { executeCommand(bufferInfo, QString("/KICKBAN %1").arg(nick)); } + else if(action == banAction) { executeCommand(bufferInfo, QString("/BAN %1").arg(nick)); } + else if(action == kickBanAction) { executeCommand(bufferInfo, QString("/KICK %1").arg(nick)); + executeCommand(bufferInfo, QString("/BAN %1").arg(nick)); } else if(action == queryAction) { executeCommand(bufferInfo, QString("/QUERY %1").arg(nick)); } } diff --git a/version.inc b/version.inc index 51049707..7f81fdb0 100644 --- a/version.inc +++ b/version.inc @@ -4,8 +4,8 @@ { using namespace Global; quasselVersion = "0.2.0-beta1-pre"; - quasselDate = "2008-04-13"; - quasselBuild = 733; + quasselDate = "2008-04-14"; + quasselBuild = 745; //! Minimum client build number the core needs clientBuildNeeded = 731;