mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-22 17:45:09 -07:00
[UserList] Context menu invite (#7138)
* [Client] Send game invites from the user context menu via a private message The user context menu gains an "Invite to Game" submenu listing the inviteable games in the room (the inviter's own games, honoring the buddy-only setting). Picking one opens a private message to the target user with a cockatrice://joingame link naming the game, so the target gets a clickable invite instead of a raw URL. Multi-game rooms offer a picker; a single inviteable game sends directly. Sending a message to an offline user no longer swallows the draft — it reports that the user is offline and keeps the typed text. Took 50 seconds Took 3 minutes * [Client] Extract sendPrivateMessage() to fix invite message draft overwrite sendInviteMessage() was calling sayEdit->setText(text) then sendMessage(), which overwrites any text the user had typed. Extract the command-building and sending logic into a new sendPrivateMessage(const QString &text) method that takes the text directly. sendMessage() now calls it after its guards and clears sayEdit; sendInviteMessage() calls it directly without touching the input field at all. Took 33 minutes * Rename method, address comments. Took 5 minutes --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
776f917ffc
commit
765ebf8fb1
9 changed files with 179 additions and 14 deletions
|
|
@ -96,6 +96,18 @@ void TabMessage::closeEvent(QCloseEvent *event)
|
|||
event->accept();
|
||||
}
|
||||
|
||||
void TabMessage::sendPrivateMessage(const QString &text)
|
||||
{
|
||||
Command_Message cmd;
|
||||
cmd.set_user_name(otherUserInfo->name());
|
||||
cmd.set_message(text.toStdString());
|
||||
|
||||
PendingCommand *pend = client->prepareSessionCommand(cmd);
|
||||
pend->setExtraData(text);
|
||||
connect(pend, &PendingCommand::finished, this, &TabMessage::messageSent);
|
||||
client->sendCommand(pend);
|
||||
}
|
||||
|
||||
void TabMessage::sendMessage()
|
||||
{
|
||||
if (sayEdit->text().isEmpty()) {
|
||||
|
|
@ -103,24 +115,19 @@ void TabMessage::sendMessage()
|
|||
}
|
||||
|
||||
if (!userOnline) {
|
||||
// Keep the draft: the user may be back momentarily, and the typed text
|
||||
// should not be lost to a transient offline spell.
|
||||
notifyUserOffline();
|
||||
return;
|
||||
}
|
||||
|
||||
Command_Message cmd;
|
||||
cmd.set_user_name(otherUserInfo->name());
|
||||
cmd.set_message(sayEdit->text().toStdString());
|
||||
|
||||
PendingCommand *pend = client->prepareSessionCommand(cmd);
|
||||
pend->setExtraData(sayEdit->text());
|
||||
connect(pend, &PendingCommand::finished, this, &TabMessage::messageSent);
|
||||
client->sendCommand(pend);
|
||||
|
||||
sendPrivateMessage(sayEdit->text());
|
||||
sayEdit->clear();
|
||||
}
|
||||
|
||||
bool TabMessage::isUserOnline() const
|
||||
{
|
||||
return userOnline;
|
||||
}
|
||||
|
||||
void TabMessage::messageSent(const Response &response,
|
||||
const CommandContainer & /*commandContainer*/,
|
||||
const QVariant &extraData)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue