Add -temp rooms and persistent room notices

This commit is contained in:
et0h 2021-10-31 13:32:57 +00:00
parent 4329d22334
commit 98b0d89981
11 changed files with 33 additions and 3 deletions

View File

@ -640,6 +640,7 @@ class SyncplayClient(object):
"chat": utils.meetsMinVersion(self.serverVersion, constants.CHAT_MIN_VERSION), "chat": utils.meetsMinVersion(self.serverVersion, constants.CHAT_MIN_VERSION),
"readiness": utils.meetsMinVersion(self.serverVersion, constants.USER_READY_MIN_VERSION), "readiness": utils.meetsMinVersion(self.serverVersion, constants.USER_READY_MIN_VERSION),
"managedRooms": utils.meetsMinVersion(self.serverVersion, constants.CONTROLLED_ROOMS_MIN_VERSION), "managedRooms": utils.meetsMinVersion(self.serverVersion, constants.CONTROLLED_ROOMS_MIN_VERSION),
"persistentRooms": False,
"maxChatMessageLength": constants.FALLBACK_MAX_CHAT_MESSAGE_LENGTH, "maxChatMessageLength": constants.FALLBACK_MAX_CHAT_MESSAGE_LENGTH,
"maxUsernameLength": constants.FALLBACK_MAX_USERNAME_LENGTH, "maxUsernameLength": constants.FALLBACK_MAX_USERNAME_LENGTH,
"maxRoomNameLength": constants.FALLBACK_MAX_ROOM_NAME_LENGTH, "maxRoomNameLength": constants.FALLBACK_MAX_ROOM_NAME_LENGTH,
@ -711,6 +712,7 @@ class SyncplayClient(object):
features["featureList"] = True features["featureList"] = True
features["readiness"] = True features["readiness"] = True
features["managedRooms"] = True features["managedRooms"] = True
features["persistentRooms"] = True
return features return features

View File

@ -458,6 +458,7 @@ de = {
# Server messages to client # Server messages to client
"new-syncplay-available-motd-message": "Du nutzt Syncplay Version {}, aber es gibt eine neuere Version auf https://syncplay.pl", # ClientVersion "new-syncplay-available-motd-message": "Du nutzt Syncplay Version {}, aber es gibt eine neuere Version auf https://syncplay.pl", # ClientVersion
"persistent-rooms-notice": "NOTICE: This server uses persistent rooms, which means that the playlist information is stored between playback sessions. If you want to create a room where information is not saved then put -temp at the end of the room name.", # TO DO: Translate - NOTE: Do not translate the word -temp
# Server notifications # Server notifications
"welcome-server-notification": "Willkommen zum Syncplay-Server, v. {0}", # version "welcome-server-notification": "Willkommen zum Syncplay-Server, v. {0}", # version

View File

@ -458,6 +458,7 @@ en = {
# Server messages to client # Server messages to client
"new-syncplay-available-motd-message": "You are using Syncplay {} but a newer version is available from https://syncplay.pl", # ClientVersion "new-syncplay-available-motd-message": "You are using Syncplay {} but a newer version is available from https://syncplay.pl", # ClientVersion
"persistent-rooms-notice": "NOTICE: This server uses persistent rooms, which means that the playlist information is stored between playback sessions. If you want to create a room where information is not saved then put -temp at the end of the room name.", # NOTE: Do not translate the word -temp
# Server notifications # Server notifications
"welcome-server-notification": "Welcome to Syncplay server, ver. {0}", # version "welcome-server-notification": "Welcome to Syncplay server, ver. {0}", # version

View File

@ -457,6 +457,7 @@ es = {
# Server messages to client # Server messages to client
"new-syncplay-available-motd-message": "Estás usando Syncplay {} pero hay una versión más nueva disponible en https://syncplay.pl", # ClientVersion "new-syncplay-available-motd-message": "Estás usando Syncplay {} pero hay una versión más nueva disponible en https://syncplay.pl", # ClientVersion
"persistent-rooms-notice": "NOTICE: This server uses persistent rooms, which means that the playlist information is stored between playback sessions. If you want to create a room where information is not saved then put -temp at the end of the room name.", # TO DO: Translate - NOTE: Do not translate the word -temp
# Server notifications # Server notifications
"welcome-server-notification": "Bienvenido al servidor de Syncplay, ver. {0}", # version "welcome-server-notification": "Bienvenido al servidor de Syncplay, ver. {0}", # version

View File

@ -457,6 +457,7 @@ it = {
# Server messages to client # Server messages to client
"new-syncplay-available-motd-message": "Stai usando Syncplay {} ma una nuova versione è disponibile presso https://syncplay.pl", # ClientVersion "new-syncplay-available-motd-message": "Stai usando Syncplay {} ma una nuova versione è disponibile presso https://syncplay.pl", # ClientVersion
"persistent-rooms-notice": "NOTICE: This server uses persistent rooms, which means that the playlist information is stored between playback sessions. If you want to create a room where information is not saved then put -temp at the end of the room name.", # TO DO: Translate - NOTE: Do not translate the word -temp to create a room where information is not saved then put -temp at the end of the room name.", # TO DO: Translate
# Server notifications # Server notifications
"welcome-server-notification": "Benvenuto nel server Syncplay, ver. {0}", # version "welcome-server-notification": "Benvenuto nel server Syncplay, ver. {0}", # version

View File

@ -458,6 +458,7 @@ pt_BR = {
# Server messages to client # Server messages to client
"new-syncplay-available-motd-message": "Você está usando o Syncplay {}, mas uma versão mais nova está disponível em https://syncplay.pl", # ClientVersion "new-syncplay-available-motd-message": "Você está usando o Syncplay {}, mas uma versão mais nova está disponível em https://syncplay.pl", # ClientVersion
"persistent-rooms-notice": "NOTICE: This server uses persistent rooms, which means that the playlist information is stored between playback sessions. If you want to create a room where information is not saved then put -temp at the end of the room name.", # TO DO: Translate - NOTE: Do not translate the word -temp
# Server notifications # Server notifications
"welcome-server-notification": "Seja bem-vindo ao servidor de Syncplay, versão {0}", # version "welcome-server-notification": "Seja bem-vindo ao servidor de Syncplay, versão {0}", # version

View File

@ -457,6 +457,7 @@ pt_PT = {
# Server messages to client # Server messages to client
"new-syncplay-available-motd-message": "Você está usando o Syncplay {}, mas uma versão mais nova está disponível em https://syncplay.pl", # ClientVersion "new-syncplay-available-motd-message": "Você está usando o Syncplay {}, mas uma versão mais nova está disponível em https://syncplay.pl", # ClientVersion
"persistent-rooms-notice": "NOTICE: This server uses persistent rooms, which means that the playlist information is stored between playback sessions. If you want to create a room where information is not saved then put -temp at the end of the room name.", # TO DO: Translate - NOTE: Do not translate the word -temp
# Server notifications # Server notifications
"welcome-server-notification": "Seja bem-vindo ao servidor de Syncplay, versão {0}", # version "welcome-server-notification": "Seja bem-vindo ao servidor de Syncplay, versão {0}", # version

View File

@ -455,6 +455,7 @@ ru = {
# Server messages to client # Server messages to client
"new-syncplay-available-motd-message": "Вы используете Syncplay версии {}. Доступна более новая версия на https://syncplay.pl/", # ClientVersion "new-syncplay-available-motd-message": "Вы используете Syncplay версии {}. Доступна более новая версия на https://syncplay.pl/", # ClientVersion
"persistent-rooms-notice": "NOTICE: This server uses persistent rooms, which means that the playlist information is stored between playback sessions. If you want to create a room where information is not saved then put -temp at the end of the room name.", # TO DO: Translate - NOTE: Do not translate the word -temp
# Server notifications # Server notifications
"welcome-server-notification": "Добро пожаловать на сервер Syncplay версии {0}", # version "welcome-server-notification": "Добро пожаловать на сервер Syncplay версии {0}", # version

View File

@ -458,6 +458,7 @@ tr = {
# Server messages to client # Server messages to client
"new-syncplay-available-motd-message": "Syncplay {} kullanıyorsunuz ancak daha yeni bir sürüm https://syncplay.pl adresinde mevcut", # ClientVersion "new-syncplay-available-motd-message": "Syncplay {} kullanıyorsunuz ancak daha yeni bir sürüm https://syncplay.pl adresinde mevcut", # ClientVersion
"persistent-rooms-notice": "NOTICE: This server uses persistent rooms, which means that the playlist information is stored between playback sessions. If you want to create a room where information is not saved then put -temp at the end of the room name.", # TO DO: Translate - NOTE: Do not translate the word -temp
# Server notifications # Server notifications
"welcome-server-notification": "Syncplay sunucusuna hoş geldiniz, ver. {0}", # version "welcome-server-notification": "Syncplay sunucusuna hoş geldiniz, ver. {0}", # version

View File

@ -131,6 +131,10 @@ class SyncClientProtocol(JSONCommandProtocol):
self._client.setUsername(username) self._client.setUsername(username)
self._client.setRoom(roomName) self._client.setRoom(roomName)
self.logged = True self.logged = True
if self.persistentRoomWarning(featureList):
if len(motd) > 0:
motd += "\n\n"
motd += getMessage("persistent-rooms-notice")
if motd: if motd:
self._client.ui.showMessage(motd, True, True) self._client.ui.showMessage(motd, True, True)
self._client.ui.showMessage(getMessage("connected-successful-notification")) self._client.ui.showMessage(getMessage("connected-successful-notification"))
@ -138,6 +142,9 @@ class SyncClientProtocol(JSONCommandProtocol):
self._client.sendFile() self._client.sendFile()
self._client.setServerVersion(version, featureList) self._client.setServerVersion(version, featureList)
def persistentRoomWarning(self, serverFeatures):
return serverFeatures["persistentRooms"] if "persistentRooms" in serverFeatures else False
def sendHello(self): def sendHello(self):
hello = {} hello = {}
hello["username"] = self._client.getUsername() hello["username"] = self._client.getUsername()
@ -441,6 +448,7 @@ class SyncServerProtocol(JSONCommandProtocol):
self._features["featureList"] = False self._features["featureList"] = False
self._features["readiness"] = meetsMinVersion(self._version, USER_READY_MIN_VERSION) self._features["readiness"] = meetsMinVersion(self._version, USER_READY_MIN_VERSION)
self._features["managedRooms"] = meetsMinVersion(self._version, CONTROLLED_ROOMS_MIN_VERSION) self._features["managedRooms"] = meetsMinVersion(self._version, CONTROLLED_ROOMS_MIN_VERSION)
self._features["persistentRooms"] = False
return self._features return self._features
def isLogged(self): def isLogged(self):
@ -496,6 +504,11 @@ class SyncServerProtocol(JSONCommandProtocol):
self._logged = True self._logged = True
self.sendHello(version) self.sendHello(version)
def persistentRoomWarning(self, clientFeatures, serverFeatures):
serverPersistentRooms = serverFeatures["persistentRooms"]
clientPersistentRooms = clientFeatures["persistentRooms"] if "persistentRooms" in clientFeatures else False
return serverPersistentRooms and not clientPersistentRooms
@requireLogged @requireLogged
def handleChat(self, chatMessage): def handleChat(self, chatMessage):
if not self._factory.disableChat: if not self._factory.disableChat:
@ -520,8 +533,12 @@ class SyncServerProtocol(JSONCommandProtocol):
hello["room"] = {"name": room.getName()} hello["room"] = {"name": room.getName()}
hello["version"] = clientVersion # Used so 1.2.X client works on newer server hello["version"] = clientVersion # Used so 1.2.X client works on newer server
hello["realversion"] = syncplay.version hello["realversion"] = syncplay.version
hello["motd"] = self._factory.getMotd(userIp, username, room, clientVersion)
hello["features"] = self._factory.getFeatures() hello["features"] = self._factory.getFeatures()
hello["motd"] = self._factory.getMotd(userIp, username, room, clientVersion)
if self.persistentRoomWarning(clientFeatures=self._features, serverFeatures=hello["features"]):
if len(hello["motd"]) > 0:
hello["motd"] += "\n\n"
hello["motd"] += getMessage("persistent-rooms-notice")
self.sendMessage({"Hello": hello}) self.sendMessage({"Hello": hello})
@requireLogged @requireLogged

View File

@ -24,7 +24,6 @@ from syncplay.messages import getMessage
from syncplay.protocols import SyncServerProtocol from syncplay.protocols import SyncServerProtocol
from syncplay.utils import RoomPasswordProvider, NotControlledRoom, RandomStringGenerator, meetsMinVersion, playlistIsValid, truncateText, getListAsMultilineString, convertMultilineStringToList from syncplay.utils import RoomPasswordProvider, NotControlledRoom, RandomStringGenerator, meetsMinVersion, playlistIsValid, truncateText, getListAsMultilineString, convertMultilineStringToList
class SyncFactory(Factory): class SyncFactory(Factory):
def __init__(self, port='', password='', motdFilePath=None, roomsDbFile=None, permanentRoomsFile=None, isolateRooms=False, salt=None, def __init__(self, port='', password='', motdFilePath=None, roomsDbFile=None, permanentRoomsFile=None, isolateRooms=False, salt=None,
disableReady=False, disableChat=False, maxChatMessageLength=constants.MAX_CHAT_MESSAGE_LENGTH, disableReady=False, disableChat=False, maxChatMessageLength=constants.MAX_CHAT_MESSAGE_LENGTH,
@ -93,6 +92,7 @@ class SyncFactory(Factory):
features["isolateRooms"] = self.isolateRooms features["isolateRooms"] = self.isolateRooms
features["readiness"] = not self.disableReady features["readiness"] = not self.disableReady
features["managedRooms"] = True features["managedRooms"] = True
features["persistentRooms"] = self.roomsDbFile is not None
features["chat"] = not self.disableChat features["chat"] = not self.disableChat
features["maxChatMessageLength"] = self.maxChatMessageLength features["maxChatMessageLength"] = self.maxChatMessageLength
features["maxUsernameLength"] = self.maxUsernameLength features["maxUsernameLength"] = self.maxUsernameLength
@ -532,7 +532,10 @@ class Room(object):
return self._roomsDbHandle is not None return self._roomsDbHandle is not None
def isPersistent(self): def isPersistent(self):
return self.roomsCanPersist() return self.roomsCanPersist() and not self.isMarkedAsTemporary()
def isMarkedAsTemporary(self):
return "-temp" in self.getName()
def isPlaylistEmpty(self): def isPlaylistEmpty(self):
return len(self._playlist) == 0 return len(self._playlist) == 0