From 1bee788210b1d8d3e7598b6d084ed801e5d8636c Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Wed, 2 Mar 2011 16:34:36 +0100 Subject: [PATCH] don't pm people ignoring you --- cockatrice/src/tab_message.cpp | 10 +++++++++- cockatrice/src/tab_message.h | 2 ++ cockatrice/src/tab_room.cpp | 2 +- common/protocol.cpp | 2 +- common/protocol_datastructures.h | 2 +- common/server_game.cpp | 2 +- common/server_protocolhandler.cpp | 2 ++ servatrice/servatrice.sql | 13 +++++++++++++ servatrice/src/serversocketinterface.cpp | 6 ++++++ 9 files changed, 36 insertions(+), 5 deletions(-) diff --git a/cockatrice/src/tab_message.cpp b/cockatrice/src/tab_message.cpp index ba627432..4581ad14 100644 --- a/cockatrice/src/tab_message.cpp +++ b/cockatrice/src/tab_message.cpp @@ -45,10 +45,18 @@ void TabMessage::sendMessage() if (sayEdit->text().isEmpty() || !userOnline) return; - client->sendCommand(new Command_Message(userName, sayEdit->text())); + Command_Message *cmd = new Command_Message(userName, sayEdit->text()); + connect(cmd, SIGNAL(finished(ProtocolResponse *)), this, SLOT(messageSent(ProtocolResponse *))); + client->sendCommand(cmd); sayEdit->clear(); } +void TabMessage::messageSent(ProtocolResponse *response) +{ + if (response->getResponseCode() == RespInIgnoreList) + chatView->appendMessage(QString(), tr("This user is ignoring you.")); +} + void TabMessage::actLeave() { deleteLater(); diff --git a/cockatrice/src/tab_message.h b/cockatrice/src/tab_message.h index a2d35f84..17856aa5 100644 --- a/cockatrice/src/tab_message.h +++ b/cockatrice/src/tab_message.h @@ -7,6 +7,7 @@ class AbstractClient; class ChatView; class QLineEdit; class Event_Message; +class ProtocolResponse; class TabMessage : public Tab { Q_OBJECT @@ -24,6 +25,7 @@ signals: private slots: void sendMessage(); void actLeave(); + void messageSent(ProtocolResponse *response); public: TabMessage(TabSupervisor *_tabSupervisor, AbstractClient *_client, const QString &_ownName, const QString &_userName); ~TabMessage(); diff --git a/cockatrice/src/tab_room.cpp b/cockatrice/src/tab_room.cpp index 46f6b0b3..1585eb43 100644 --- a/cockatrice/src/tab_room.cpp +++ b/cockatrice/src/tab_room.cpp @@ -80,7 +80,7 @@ void GameSelector::checkResponse(ResponseCode response) case RespNameNotFound: QMessageBox::critical(this, tr("Error"), tr("The game does not exist any more.")); break; case RespUserLevelTooLow: QMessageBox::critical(this, tr("Error"), tr("This game is only open to registered users.")); break; case RespOnlyBuddies: QMessageBox::critical(this, tr("Error"), tr("This game is only open to its creator's buddies.")); break; - case RespOnIgnoreList: QMessageBox::critical(this, tr("Error"), tr("You are being ignored by the creator of this game.")); break; + case RespInIgnoreList: QMessageBox::critical(this, tr("Error"), tr("You are being ignored by the creator of this game.")); break; default: ; } } diff --git a/common/protocol.cpp b/common/protocol.cpp index 717aa791..1185e90b 100644 --- a/common/protocol.cpp +++ b/common/protocol.cpp @@ -266,7 +266,7 @@ void ProtocolResponse::initializeHash() responseHash.insert("spectators_not_allowed", RespSpectatorsNotAllowed); responseHash.insert("only_buddies", RespOnlyBuddies); responseHash.insert("user_level_too_low", RespUserLevelTooLow); - responseHash.insert("on_ignore_list", RespOnIgnoreList); + responseHash.insert("in_ignore_list", RespInIgnoreList); } Response_JoinRoom::Response_JoinRoom(int _cmdId, ResponseCode _responseCode, ServerInfo_Room *_roomInfo) diff --git a/common/protocol_datastructures.h b/common/protocol_datastructures.h index 8291dd82..9fcfb295 100644 --- a/common/protocol_datastructures.h +++ b/common/protocol_datastructures.h @@ -8,7 +8,7 @@ class DeckList; -enum ResponseCode { RespNothing, RespOk, RespInternalError, RespInvalidCommand, RespInvalidData, RespNameNotFound, RespLoginNeeded, RespFunctionNotAllowed, RespGameNotStarted, RespGameFull, RespContextError, RespWrongPassword, RespSpectatorsNotAllowed, RespOnlyBuddies, RespUserLevelTooLow, RespOnIgnoreList }; +enum ResponseCode { RespNothing, RespOk, RespInternalError, RespInvalidCommand, RespInvalidData, RespNameNotFound, RespLoginNeeded, RespFunctionNotAllowed, RespGameNotStarted, RespGameFull, RespContextError, RespWrongPassword, RespSpectatorsNotAllowed, RespOnlyBuddies, RespUserLevelTooLow, RespInIgnoreList }; // PrivateZone: Contents of the zone are always visible to the owner, // but not to anyone else. diff --git a/common/server_game.cpp b/common/server_game.cpp index e984df92..b89370c4 100644 --- a/common/server_game.cpp +++ b/common/server_game.cpp @@ -183,7 +183,7 @@ ResponseCode Server_Game::checkJoin(ServerInfo_User *user, const QString &_passw if (!static_cast(parent())->getServer()->getBuddyList(creatorInfo->getName()).contains(user->getName())) return RespOnlyBuddies; if (static_cast(parent())->getServer()->getIgnoreList(creatorInfo->getName()).contains(user->getName())) - return RespOnIgnoreList; + return RespInIgnoreList; if (spectator) { if (!spectatorsAllowed) return RespSpectatorsNotAllowed; diff --git a/common/server_protocolhandler.cpp b/common/server_protocolhandler.cpp index f050b9fc..71d56a05 100644 --- a/common/server_protocolhandler.cpp +++ b/common/server_protocolhandler.cpp @@ -281,6 +281,8 @@ ResponseCode Server_ProtocolHandler::cmdMessage(Command_Message *cmd, CommandCon Server_ProtocolHandler *userHandler = server->getUsers().value(receiver); if (!userHandler) return RespNameNotFound; + if (userHandler->getIgnoreList().contains(userInfo->getName())) + return RespInIgnoreList; cont->enqueueItem(new Event_Message(userInfo->getName(), receiver, cmd->getText())); userHandler->sendProtocolItem(new Event_Message(userInfo->getName(), receiver, cmd->getText())); diff --git a/servatrice/servatrice.sql b/servatrice/servatrice.sql index 7c7dda60..44298d85 100644 --- a/servatrice/servatrice.sql +++ b/servatrice/servatrice.sql @@ -128,3 +128,16 @@ CREATE TABLE `cockatrice_servermessages` ( `message` text, PRIMARY KEY (`timest`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +CREATE TABLE `cockatrice_ignorelist` ( + `id_user1` int(7) unsigned NOT NULL, + `id_user2` int(7) unsigned NOT NULL, + UNIQUE KEY `key` (`id_user1`, `id_user2`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +CREATE TABLE `cockatrice_buddylist` ( + `id_user1` int(7) unsigned NOT NULL, + `id_user2` int(7) unsigned NOT NULL, + UNIQUE KEY `key` (`id_user1`, `id_user2`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + diff --git a/servatrice/src/serversocketinterface.cpp b/servatrice/src/serversocketinterface.cpp index 48fa5501..daeb29c4 100644 --- a/servatrice/src/serversocketinterface.cpp +++ b/servatrice/src/serversocketinterface.cpp @@ -111,6 +111,9 @@ int ServerSocketInterface::getUserIdInDB(const QString &name) const ResponseCode ServerSocketInterface::cmdAddToList(Command_AddToList *cmd, CommandContainer *cont) { + if (authState != PasswordRight) + return RespFunctionNotAllowed; + QString list = cmd->getList(); QString user = cmd->getUserName(); @@ -148,6 +151,9 @@ ResponseCode ServerSocketInterface::cmdAddToList(Command_AddToList *cmd, Command ResponseCode ServerSocketInterface::cmdRemoveFromList(Command_RemoveFromList *cmd, CommandContainer *cont) { + if (authState != PasswordRight) + return RespFunctionNotAllowed; + QString list = cmd->getList(); QString user = cmd->getUserName();