diff --git a/src/mumble/ACLEditor.cpp b/src/mumble/ACLEditor.cpp index a0cce815e..9d482bf0c 100644 --- a/src/mumble/ACLEditor.cpp +++ b/src/mumble/ACLEditor.cpp @@ -63,8 +63,14 @@ ACLEditor::ACLEditor(int channelparentid, QWidget *p) : QDialog(p) { qleChannelPassword->hide(); qlChannelPassword->hide(); - qlChannelMaxUsers->hide(); - qsbChannelMaxUsers->hide(); + if (g.sh->uiVersion >= 0x010300) { + qsbChannelMaxUsers->setRange(0, INT_MAX); + qsbChannelMaxUsers->setValue(0); + qsbChannelMaxUsers->setSpecialValueText(tr("Default server value")); + } else { + qlChannelMaxUsers->hide(); + qsbChannelMaxUsers->hide(); + } qlChannelID->hide(); @@ -272,7 +278,7 @@ void ACLEditor::accept() { // Update channel state if (bAddChannelMode) { - g.sh->createChannel(iChannel, qleChannelName->text(), rteChannelDescription->text(), qsbChannelPosition->value(), qcbChannelTemporary->isChecked()); + g.sh->createChannel(iChannel, qleChannelName->text(), rteChannelDescription->text(), qsbChannelPosition->value(), qcbChannelTemporary->isChecked(), qsbChannelMaxUsers->value()); } else { bool needs_update = false; diff --git a/src/mumble/ServerHandler.cpp b/src/mumble/ServerHandler.cpp index 8681344bd..8ac77b0e1 100644 --- a/src/mumble/ServerHandler.cpp +++ b/src/mumble/ServerHandler.cpp @@ -680,13 +680,14 @@ void ServerHandler::joinChannel(unsigned int uiSession, unsigned int channel) { sendMessage(mpus); } -void ServerHandler::createChannel(unsigned int parent_id, const QString &name, const QString &description, unsigned int position, bool temporary) { +void ServerHandler::createChannel(unsigned int parent_id, const QString &name, const QString &description, unsigned int position, bool temporary, unsigned int maxUsers) { MumbleProto::ChannelState mpcs; mpcs.set_parent(parent_id); mpcs.set_name(u8(name)); mpcs.set_description(u8(description)); mpcs.set_position(position); mpcs.set_temporary(temporary); + mpcs.set_max_users(maxUsers); sendMessage(mpcs); } diff --git a/src/mumble/ServerHandler.h b/src/mumble/ServerHandler.h index 3406a15fe..cac0f62ee 100644 --- a/src/mumble/ServerHandler.h +++ b/src/mumble/ServerHandler.h @@ -129,7 +129,7 @@ class ServerHandler : public QThread { void requestUserStats(unsigned int uiSession, bool statsOnly); void joinChannel(unsigned int uiSession, unsigned int channel); - void createChannel(unsigned int parent_id, const QString &name, const QString &description, unsigned int position, bool temporary); + void createChannel(unsigned int parent_id, const QString &name, const QString &description, unsigned int position, bool temporary, unsigned int maxUsers); void requestBanList(); void requestUserList(); void requestACL(unsigned int channel); diff --git a/src/murmur/Messages.cpp b/src/murmur/Messages.cpp index 98ede4ec9..957eebe5c 100644 --- a/src/murmur/Messages.cpp +++ b/src/murmur/Messages.cpp @@ -906,7 +906,7 @@ void Server::msgChannelState(ServerUser *uSource, MumbleProto::ChannelState &msg return; } - c = addChannel(p, qsName, msg.temporary(), msg.position()); + c = addChannel(p, qsName, msg.temporary(), msg.position(), msg.max_users()); hashAssign(c->qsDesc, c->qbaDescHash, qsDesc); if (uSource->iId >= 0) { diff --git a/src/murmur/Server.h b/src/murmur/Server.h index d437d68e1..693faf220 100644 --- a/src/murmur/Server.h +++ b/src/murmur/Server.h @@ -336,7 +336,7 @@ class Server : public QThread { // Database / DBus functions. Implementation in ServerDB.cpp void initialize(); int authenticate(QString &name, const QString &pw, int sessionId = 0, const QStringList &emails = QStringList(), const QString &certhash = QString(), bool bStrongCert = false, const QList & = QList()); - Channel *addChannel(Channel *c, const QString &name, bool temporary = false, int position = 0); + Channel *addChannel(Channel *c, const QString &name, bool temporary = false, int position = 0, unsigned int maxUsers = 0); void removeChannelDB(const Channel *c); void readChannels(Channel *p = NULL); void readLinks(); diff --git a/src/murmur/ServerDB.cpp b/src/murmur/ServerDB.cpp index 97c5e84a0..dd9fc6437 100644 --- a/src/murmur/ServerDB.cpp +++ b/src/murmur/ServerDB.cpp @@ -1311,7 +1311,7 @@ void Server::removeLink(Channel *c, Channel *l) { SQLEXEC(); } -Channel *Server::addChannel(Channel *p, const QString &name, bool temporary, int position) { +Channel *Server::addChannel(Channel *p, const QString &name, bool temporary, int position, unsigned int maxUsers) { TransactionHolder th; QSqlQuery &query = *th.qsqQuery; @@ -1348,11 +1348,19 @@ Channel *Server::addChannel(Channel *p, const QString &name, bool temporary, int query.addBindValue(ServerDB::Channel_Position); query.addBindValue(QVariant(position).toString()); SQLEXEC(); + + // Update channel maximum users + query.addBindValue(iServerNum); + query.addBindValue(id); + query.addBindValue(ServerDB::Channel_Max_Users); + query.addBindValue(QVariant(maxUsers).toString()); + SQLEXEC(); } Channel *c = new Channel(id, name, p); c->bTemporary = temporary; c->iPosition = position; + c->uiMaxUsers = maxUsers; qhChannels.insert(id, c); return c; }