Implementing private messages in lobby chat, ticket #12. Some cosmetic improvements are still missing.
This commit is contained in:
@@ -223,6 +223,10 @@ void ServerGuiWrapper::SignalNetClientLobbyChatMsg(const string &playerName, con
|
||||
{
|
||||
if (myClientcb) myClientcb->SignalNetClientLobbyChatMsg(playerName, msg);
|
||||
}
|
||||
void ServerGuiWrapper::SignalNetClientPrivateChatMsg(const string &playerName, const string &msg)
|
||||
{
|
||||
if (myClientcb) myClientcb->SignalNetClientPrivateChatMsg(playerName, msg);
|
||||
}
|
||||
void ServerGuiWrapper::SignalNetClientMsgBox(const string &msg)
|
||||
{
|
||||
if (myClientcb) myClientcb->SignalNetClientMsgBox(msg);
|
||||
|
||||
@@ -123,6 +123,7 @@ public:
|
||||
void SignalNetClientNewGameAdmin(unsigned playerId, const std::string &playerName);
|
||||
void SignalNetClientGameChatMsg(const std::string &playerName, const std::string &msg);
|
||||
void SignalNetClientLobbyChatMsg(const std::string &playerName, const std::string &msg);
|
||||
void SignalNetClientPrivateChatMsg(const std::string &playerName, const std::string &msg);
|
||||
void SignalNetClientWaitDialog();
|
||||
void SignalNetClientWarningAutoFoldInRankingGame(unsigned remainingAutoFolds);
|
||||
|
||||
|
||||
@@ -44,10 +44,19 @@ void ChatTools::sendMessage()
|
||||
|
||||
if(myLineEdit->text().size() && mySession) {
|
||||
fillChatLinesHistory(myLineEdit->text());
|
||||
QString chatText(myLineEdit->text());
|
||||
if(myChatType == INGAME_CHAT) {
|
||||
mySession->sendGameChatMessage(myLineEdit->text().toUtf8().constData());
|
||||
mySession->sendGameChatMessage(chatText.toUtf8().constData());
|
||||
} else {
|
||||
mySession->sendLobbyChatMessage(myLineEdit->text().toUtf8().constData());
|
||||
// Parse user name for private messages.
|
||||
if(chatText.indexOf(QString("/msg ")) == 0) {
|
||||
chatText.remove(0, 5);
|
||||
unsigned playerId = parsePrivateMessageTarget(chatText);
|
||||
if (playerId)
|
||||
mySession->sendPrivateChatMessage(playerId, chatText.toUtf8().constData());
|
||||
} else {
|
||||
mySession->sendLobbyChatMessage(chatText.toUtf8().constData());
|
||||
}
|
||||
}
|
||||
myLineEdit->setText("");
|
||||
}
|
||||
@@ -145,6 +154,11 @@ void ChatTools::receiveMessage(QString playerName, QString message)
|
||||
}
|
||||
}
|
||||
|
||||
void ChatTools::privateMessage(QString playerName, QString message)
|
||||
{
|
||||
receiveMessage(playerName, "->" + message);
|
||||
}
|
||||
|
||||
void ChatTools::clearChat()
|
||||
{
|
||||
|
||||
@@ -247,3 +261,37 @@ void ChatTools::refreshIgnoreList()
|
||||
{
|
||||
ignoreList = myConfig->readConfigStringList("PlayerIgnoreList");
|
||||
}
|
||||
|
||||
unsigned ChatTools::parsePrivateMessageTarget(QString &chatText)
|
||||
{
|
||||
QString playerName;
|
||||
int endPosName = -1;
|
||||
// Target player is either in the format "this is a user" or singlename.
|
||||
if (chatText.startsWith('"')) {
|
||||
chatText.remove(0, 1);
|
||||
endPosName = chatText.indexOf('"');
|
||||
} else {
|
||||
endPosName = chatText.indexOf(' ');
|
||||
}
|
||||
if (endPosName > 0) {
|
||||
playerName = chatText.left(endPosName);
|
||||
chatText.remove(0, endPosName + 1);
|
||||
}
|
||||
chatText = chatText.trimmed();
|
||||
unsigned playerId = 0;
|
||||
if (!playerName.isEmpty() && !chatText.isEmpty()) {
|
||||
if(myNickListModel) {
|
||||
int it = 0;
|
||||
while (myNickListModel->item(it)) {
|
||||
QString text = myNickListModel->item(it, 0)->data(Qt::DisplayRole).toString();
|
||||
if(text == playerName) {
|
||||
playerId = myNickListModel->item(it, 0)->data(Qt::UserRole).toUInt();
|
||||
break;
|
||||
}
|
||||
++it;
|
||||
}
|
||||
}
|
||||
}
|
||||
return playerId;
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ public slots:
|
||||
|
||||
void sendMessage();
|
||||
void receiveMessage(QString playerName, QString message);
|
||||
void privateMessage(QString playerName, QString message);
|
||||
void clearChat();
|
||||
void checkInputLength(QString string);
|
||||
|
||||
@@ -76,6 +77,9 @@ public slots:
|
||||
}
|
||||
void refreshIgnoreList();
|
||||
|
||||
protected:
|
||||
|
||||
unsigned parsePrivateMessageTarget(QString &chatText);
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -404,6 +404,10 @@ void GuiWrapper::SignalNetClientLobbyChatMsg(const string &playerName, const str
|
||||
{
|
||||
myStartWindow->signalNetClientLobbyChatMsg(QString::fromUtf8(playerName.c_str()), QString::fromUtf8(msg.c_str()));
|
||||
}
|
||||
void GuiWrapper::SignalNetClientPrivateChatMsg(const std::string &playerName, const std::string &msg)
|
||||
{
|
||||
myStartWindow->signalNetClientPrivateChatMsg(QString::fromUtf8(playerName.c_str()), QString::fromUtf8(msg.c_str()));
|
||||
}
|
||||
void GuiWrapper::SignalNetClientMsgBox(const string &msg)
|
||||
{
|
||||
myStartWindow->signalNetClientMsgBox(QString::fromUtf8(msg.c_str()));
|
||||
|
||||
@@ -135,6 +135,7 @@ public:
|
||||
void SignalNetClientNewGameAdmin(unsigned playerId, const std::string &playerName);
|
||||
void SignalNetClientGameChatMsg(const std::string &playerName, const std::string &msg);
|
||||
void SignalNetClientLobbyChatMsg(const std::string &playerName, const std::string &msg);
|
||||
void SignalNetClientPrivateChatMsg(const std::string &playerName, const std::string &msg);
|
||||
void SignalNetClientMsgBox(const std::string &msg);
|
||||
void SignalNetClientMsgBox(unsigned msgId);
|
||||
|
||||
|
||||
@@ -146,6 +146,8 @@ startWindowImpl::startWindowImpl(ConfigFile *c)
|
||||
connect(this, SIGNAL(signalNetClientGameChatMsg(QString, QString)), myGuiInterface->getMyW()->getMyChat(), SLOT(receiveMessage(QString, QString)));
|
||||
connect(this, SIGNAL(signalNetClientLobbyChatMsg(QString, QString)), myStartNetworkGameDialog->getMyChat(), SLOT(receiveMessage(QString, QString)));
|
||||
connect(this, SIGNAL(signalNetClientLobbyChatMsg(QString, QString)), myGameLobbyDialog->getMyChat(), SLOT(receiveMessage(QString, QString)));
|
||||
connect(this, SIGNAL(signalNetClientPrivateChatMsg(QString, QString)), myStartNetworkGameDialog->getMyChat(), SLOT(privateMessage(QString, QString)));
|
||||
connect(this, SIGNAL(signalNetClientPrivateChatMsg(QString, QString)), myGameLobbyDialog->getMyChat(), SLOT(privateMessage(QString, QString)));
|
||||
connect(this, SIGNAL(signalNetClientMsgBox(QString)), this, SLOT(networkMessage(QString)));
|
||||
connect(this, SIGNAL(signalNetClientMsgBox(unsigned)), this, SLOT(networkMessage(unsigned)));
|
||||
connect(this, SIGNAL(signalNetClientShowTimeoutDialog(int, unsigned)), this, SLOT(showTimeoutDialog(int, unsigned)));
|
||||
|
||||
@@ -100,6 +100,7 @@ signals:
|
||||
void signalNetClientGameStart(boost::shared_ptr<Game> game);
|
||||
void signalNetClientGameChatMsg(QString nickName, QString msg);
|
||||
void signalNetClientLobbyChatMsg(QString nickName, QString msg);
|
||||
void signalNetClientPrivateChatMsg(QString nickName, QString msg);
|
||||
void signalNetClientMsgBox(QString msg);
|
||||
void signalNetClientMsgBox(unsigned msgId);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user