# HG changeset patch # User Wuzzy # Date 1534810455 -7200 # Node ID 1aa5e884326a4302d3118397392f33b9fc3d30f0 # Parent 7a31a292fa840dad09aa1be7c0964724f05cc033 Fix some string/translation inconsistencies in strings related to leaving diff -r 7a31a292fa84 -r 1aa5e884326a QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Sun Aug 19 09:54:46 2018 -0400 +++ b/QTfrontend/hwform.cpp Tue Aug 21 02:14:15 2018 +0200 @@ -1672,7 +1672,8 @@ } if (pnetserver) return; // we have server - let it care of all things - if (hwnet) { + if (hwnet && (reason != "bye") && (!reason.startsWith("User quit: "))) + { QString errorStr = QMessageBox::tr("The connection to the server is lost.") + (reason.isEmpty()?"":("\n\n" + HWNewNet::tr("Reason:") + "\n" + reason)); MessageDialog::ShowErrorMessage(errorStr, this); } diff -r 7a31a292fa84 -r 1aa5e884326a QTfrontend/net/newnetclient.cpp --- a/QTfrontend/net/newnetclient.cpp Sun Aug 19 09:54:46 2018 -0400 +++ b/QTfrontend/net/newnetclient.cpp Tue Aug 21 02:14:15 2018 +0200 @@ -74,7 +74,7 @@ { if (m_game_connected) { - RawSendNet(QString("QUIT%1%2").arg(delimiter).arg("User quit")); + RawSendNet(QString("QUIT%1").arg(delimiter)); emit disconnected(tr("User quit")); } NetSocket.flush(); @@ -91,7 +91,7 @@ void HWNewNet::Disconnect() { if (m_game_connected) - RawSendNet(QString("QUIT%1%2").arg(delimiter).arg("User quit")); + RawSendNet(QString("QUIT%1").arg(delimiter)); m_game_connected = false; NetSocket.disconnectFromHost(); @@ -870,7 +870,21 @@ if (lst.size() < 3) emit chatStringFromNet(tr("%1 *** %2 has left").arg('\x03').arg(lst[1])); else - emit chatStringFromNet(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1], lst[2])); + { + QString leaveMsg = QString(lst[2]); + if (leaveMsg.startsWith("User quit: ")) + { + leaveMsg.remove(0, 11); + emit chatStringFromNet(tr("%1 *** %2 has left (message: \"%3\")").arg('\x03').arg(lst[1]).arg(leaveMsg)); + } + else if (leaveMsg.startsWith("part: ")) + { + leaveMsg.remove(0, 6); + emit chatStringFromNet(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1]).arg(leaveMsg)); + } + else + emit chatStringFromNet(tr("%1 *** %2 has left (%3)").arg('\x03').arg(lst[1]).arg(HWApplication::translate("server", leaveMsg.toLatin1().constData()))); + } m_playersModel->playerLeftRoom(lst[1]); return; } diff -r 7a31a292fa84 -r 1aa5e884326a QTfrontend/ui/widget/chatwidget.cpp --- a/QTfrontend/ui/widget/chatwidget.cpp Sun Aug 19 09:54:46 2018 -0400 +++ b/QTfrontend/ui/widget/chatwidget.cpp Tue Aug 21 02:14:15 2018 +0200 @@ -539,10 +539,28 @@ emit nickCountUpdate(chatNicks->model()->rowCount()); - if (message.isEmpty()) + // Normal quit + if (message.isEmpty() || message == "bye") printChatString(nick, QString("*** ") + tr("%1 has left").arg(linkedNick(nick)), "Leave", false); + // Quit with custom player message + else if (message.startsWith("User quit: ") && message.length() > 11) + { + QString playerMessage = QString(message); + playerMessage.remove(0, 11); + printChatString(nick, QString("*** ") + tr("%1 has left (message: \"%2\")").arg(linkedNick(nick)).arg(playerMessage.toHtmlEscaped()), "Leave", false); + } + // Quit with special PART message + else if (message.startsWith("part: ") && message.length() > 6) + { + QString playerMessage = QString(message); + playerMessage.remove(0, 6); + printChatString(nick, QString("*** ") + tr("%1 has left (%2)").arg(linkedNick(nick).arg(playerMessage.toHtmlEscaped())), "Leave", false); + } + // Quit with additional server message (i.e. ping timeout) else - printChatString(nick, QString("*** ") + tr("%1 has left (%2)").arg(linkedNick(nick)).arg(messageToHTML(message)), "Leave", false); + { + printChatString(nick, QString("*** ") + tr("%1 has left (%2)").arg(linkedNick(nick)).arg(HWApplication::translate("server", message.toLatin1().constData()).toHtmlEscaped()), "Leave", false); + } } void HWChatWidget::clear() diff -r 7a31a292fa84 -r 1aa5e884326a gameServer/Actions.hs --- a/gameServer/Actions.hs Sun Aug 19 09:54:46 2018 -0400 +++ b/gameServer/Actions.hs Tue Aug 21 02:14:15 2018 +0200 @@ -117,7 +117,7 @@ loggedIn <- client's isVisible when (ri /= lobbyId) $ do - processAction $ MoveToLobby ("quit: " `B.append` msg) + processAction $ (MoveToLobby msg) return () clientsChans <- liftM (Prelude.map sendChan . Prelude.filter isVisible) $! allClientsS diff -r 7a31a292fa84 -r 1aa5e884326a gameServer/ClientIO.hs --- a/gameServer/ClientIO.hs Sun Aug 19 09:54:46 2018 -0400 +++ b/gameServer/ClientIO.hs Tue Aug 21 02:14:15 2018 +0200 @@ -96,6 +96,7 @@ where killReciever = Exception.throwTo tId . ShutdownThreadException + -- intentionally not localized quitMessage ["BYE"] = "bye" quitMessage ("BYE":msg:_) = msg quitMessage _ = error "quitMessage" diff -r 7a31a292fa84 -r 1aa5e884326a gameServer/HWProtoCore.hs --- a/gameServer/HWProtoCore.hs Sun Aug 19 09:54:46 2018 -0400 +++ b/gameServer/HWProtoCore.hs Tue Aug 21 02:14:15 2018 +0200 @@ -40,7 +40,10 @@ handleCmd ("QUIT" : xs) = return [ByeClient msg] where - msg = if not $ null xs then "User quit: " `B.append` (head xs) else loc "bye" + -- "User quit: " is a special string parsed by frontend, do not localize. + -- It denotes when the /quit command has been used with message parameter. + -- "bye" is also a special string. + msg = if not $ null xs then "User quit: " `B.append` (head xs) else "bye" handleCmd ["PONG"] = do diff -r 7a31a292fa84 -r 1aa5e884326a gameServer/HWProtoInRoomState.hs --- a/gameServer/HWProtoInRoomState.hs Sun Aug 19 09:54:46 2018 -0400 +++ b/gameServer/HWProtoInRoomState.hs Tue Aug 21 02:14:15 2018 +0200 @@ -74,7 +74,10 @@ s <- roomOthersChans return [AnswerClients s ["CHAT", n, msg]] -handleCmd_inRoom ["PART"] = return [MoveToLobby "part"] +-- Leave room normally +handleCmd_inRoom ["PART"] = return [MoveToLobby ""] +-- Leave room with custom quit message by player +-- "part: " is a special marker string to be detected by the frontend. Not translated for obvious reasons handleCmd_inRoom ["PART", msg] = return [MoveToLobby $ "part: " `B.append` msg] diff -r 7a31a292fa84 -r 1aa5e884326a gameServer/HWProtoNEState.hs --- a/gameServer/HWProtoNEState.hs Sun Aug 19 09:54:46 2018 -0400 +++ b/gameServer/HWProtoNEState.hs Tue Aug 21 02:14:15 2018 +0200 @@ -65,6 +65,7 @@ if clientProto cl < 48 && passwd == webPassword cl then return $ JoinLobby : [AnswerClients [sendChan cl] ["ADMIN_ACCESS"] | isAdministrator cl] else + -- String is parsed by frontend, do not localize! return [ByeClient "Authentication failed"] @@ -81,6 +82,7 @@ , JoinLobby ] else + -- String is parsed by frontend, do not localize! return [ByeClient "Authentication failed"] where h = B.pack . showDigest . sha1 . BL.fromChunks diff -r 7a31a292fa84 -r 1aa5e884326a gameServer/Utils.hs --- a/gameServer/Utils.hs Sun Aug 19 09:54:46 2018 -0400 +++ b/gameServer/Utils.hs Tue Aug 21 02:14:15 2018 +0200 @@ -233,6 +233,9 @@ AnswerClients [clChan] ["HH_NUM", teamname team, showB $ hhnum team]] +-- Locale function to localize strings. +-- loc is just the identity functions, but it will be collected by scripts +-- for localization. Use loc to mark a string for translation. loc :: B.ByteString -> B.ByteString loc = id