Skip to content

Commit 8a1c19d

Browse files
authored
Special-case MOTD in showMessage procedures. (#709)
For a MOTD it is natural to use ASCII art but since messages in the chat box are added using QT's HTML-like text fragments, multiple spaces are merged together and the default variable-width font destroys alignment. Therefore, when showing a MOTD we escape spaces with `&nbsp;` and wrap everything in `<code>` tags to select a monospace font. One problem is that MOTD is also used for showing warnings to the user, such as the "new-syncplay-available-motd-message" message. These will also be changed accordingly. If undesired, these warning should be sent in a separate field.
1 parent 1169ed5 commit 8a1c19d

File tree

4 files changed

+11
-7
lines changed

4 files changed

+11
-7
lines changed

syncplay/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1687,10 +1687,10 @@ def showChatMessage(self, username, userMessage):
16871687
def setSSLMode(self, sslMode, sslInformation=""):
16881688
self.__ui.setSSLMode(sslMode, sslInformation)
16891689

1690-
def showMessage(self, message, noPlayer=False, noTimestamp=False, OSDType=constants.OSD_NOTIFICATION, mood=constants.MESSAGE_NEUTRAL):
1690+
def showMessage(self, message, noPlayer=False, noTimestamp=False, OSDType=constants.OSD_NOTIFICATION, mood=constants.MESSAGE_NEUTRAL, isMotd=False):
16911691
if not noPlayer:
16921692
self.showOSDMessage(message, duration=constants.OSD_DURATION, OSDType=OSDType, mood=mood)
1693-
self.__ui.showMessage(message, noTimestamp)
1693+
self.__ui.showMessage(message, noTimestamp=noTimestamp, isMotd=isMotd)
16941694

16951695
def updateAutoPlayState(self, newState):
16961696
self.__ui.updateAutoPlayState(newState)

syncplay/protocols.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ def handleHello(self, hello):
145145
motd += "\n\n"
146146
motd += getMessage("persistent-rooms-notice")
147147
if motd:
148-
self._client.ui.showMessage(motd, True, True)
148+
self._client.ui.showMessage(motd, noPlayer=True, noTimestamp=True, isMotd=True)
149149
self._client.ui.showMessage(getMessage("connected-successful-notification"))
150150
self._client.connected()
151151
self._client.sendFile()

syncplay/ui/consoleUI.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def fileSwitchFoundFiles(self):
9999
def setFeatures(self, featureList):
100100
pass
101101

102-
def showMessage(self, message, noTimestamp=False):
102+
def showMessage(self, message, noTimestamp=False, isMotd=False):
103103
message = message.encode(sys.stdout.encoding, 'replace')
104104
try:
105105
message = message.decode('utf-8')

syncplay/ui/gui.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@
4949

5050

5151
class ConsoleInGUI(ConsoleUI):
52-
def showMessage(self, message, noTimestamp=False):
53-
self._syncplayClient.ui.showMessage(message, True)
52+
def showMessage(self, message, noTimestamp=False, isMotd=False):
53+
self._syncplayClient.ui.showMessage(message, noTimestamp=True, isMotd=isMotd)
5454

5555
def showDebugMessage(self, message):
5656
self._syncplayClient.ui.showDebugMessage(message)
@@ -542,7 +542,7 @@ def setSSLMode(self, sslMode, sslInformation):
542542
def getSSLInformation(self):
543543
return self.sslInformation
544544

545-
def showMessage(self, message, noTimestamp=False):
545+
def showMessage(self, message, noTimestamp=False, isMotd=False):
546546
message = str(message)
547547
username = None
548548
messageWithUsername = re.match(constants.MESSAGE_WITH_USERNAME_REGEX, message, re.UNICODE)
@@ -552,6 +552,10 @@ def showMessage(self, message, noTimestamp=False):
552552
message = message.replace("&", "&amp;").replace('"', "&quot;").replace("<", "&lt;").replace(">", "&gt;")
553553
if username:
554554
message = constants.STYLE_USER_MESSAGE.format(constants.STYLE_USERNAME, username, message)
555+
# When showing a MOTD, escape spaces and use a monospace font to preserve the look of ASCII art.
556+
if isMotd:
557+
message = message.replace(" ", "&nbsp;")
558+
message = "<code>{}</code>".format(message)
555559
message = message.replace("\n", "<br />")
556560
if noTimestamp:
557561
self.newMessage("{}<br />".format(message))

0 commit comments

Comments
 (0)