Rename room history to room list & re-work GUI

This commit is contained in:
et0h 2020-09-13 14:26:06 +01:00
parent 86bd299a58
commit 3c7ca9706d
13 changed files with 108 additions and 31 deletions

View File

@ -533,6 +533,13 @@ class SyncplayClient(object):
# TODO: Properly add message for setting trusted domains! # TODO: Properly add message for setting trusted domains!
# TODO: Handle cases where users add www. to start of domain # TODO: Handle cases where users add www. to start of domain
def setRoomList(self, newRoomList):
from syncplay.ui.ConfigurationGetter import ConfigurationGetter
ConfigurationGetter().setConfigOption("roomList", newRoomList)
oldRoomList = self._config['roomList']
if oldRoomList != newRoomList:
self._config['roomList'] = newRoomList
def isUntrustedTrustableURI(self, URIToTest): def isUntrustedTrustableURI(self, URIToTest):
if utils.isURL(URIToTest): if utils.isURL(URIToTest):
for trustedProtocol in constants.TRUSTABLE_WEB_PROTOCOLS: for trustedProtocol in constants.TRUSTABLE_WEB_PROTOCOLS:

View File

@ -184,6 +184,7 @@ de = {
"name-label": "Benutzername (optional):", "name-label": "Benutzername (optional):",
"password-label": "Server-Passwort (falls nötig):", "password-label": "Server-Passwort (falls nötig):",
"room-label": "Standard-Raum:", "room-label": "Standard-Raum:",
"roomlist-msgbox-label": "Edit room list (one per line)", # TODO: Translate
"media-setting-title": "Media-Player Einstellungen", "media-setting-title": "Media-Player Einstellungen",
"executable-path-label": "Pfad zum Media-Player:", "executable-path-label": "Pfad zum Media-Player:",
@ -373,6 +374,8 @@ de = {
"password-tooltip": "Passwörter sind nur bei Verbindung zu privaten Servern nötig.", "password-tooltip": "Passwörter sind nur bei Verbindung zu privaten Servern nötig.",
"room-tooltip": "Der Raum, der betreten werden soll, kann ein x-beliebiger sein. Allerdings werden nur Clients im selben Raum synchronisiert.", "room-tooltip": "Der Raum, der betreten werden soll, kann ein x-beliebiger sein. Allerdings werden nur Clients im selben Raum synchronisiert.",
"edit-rooms-tooltip": "Edit room list.", # TO DO: Translate
"executable-path-tooltip": "Pfad zum ausgewählten, unterstützten Mediaplayer (mpv, mpv.net, VLC, MPC-HC/BE or mplayer2).", "executable-path-tooltip": "Pfad zum ausgewählten, unterstützten Mediaplayer (mpv, mpv.net, VLC, MPC-HC/BE or mplayer2).",
"media-path-tooltip": "Pfad zum wiederzugebenden Video oder Stream. Notwendig für mplayer2.", "media-path-tooltip": "Pfad zum wiederzugebenden Video oder Stream. Notwendig für mplayer2.",
"player-arguments-tooltip": "Zusätzliche Kommandozeilenparameter/-schalter für diesen Mediaplayer.", "player-arguments-tooltip": "Zusätzliche Kommandozeilenparameter/-schalter für diesen Mediaplayer.",

View File

@ -184,6 +184,7 @@ en = {
"name-label": "Username (optional):", "name-label": "Username (optional):",
"password-label": "Server password (if any):", "password-label": "Server password (if any):",
"room-label": "Default room: ", "room-label": "Default room: ",
"roomlist-msgbox-label": "Edit room list (one per line)",
"media-setting-title": "Media player settings", "media-setting-title": "Media player settings",
"executable-path-label": "Path to media player:", "executable-path-label": "Path to media player:",
@ -374,6 +375,8 @@ en = {
"password-tooltip": "Passwords are only needed for connecting to private servers.", "password-tooltip": "Passwords are only needed for connecting to private servers.",
"room-tooltip": "Room to join upon connection can be almost anything, but you will only be synchronised with people in the same room.", "room-tooltip": "Room to join upon connection can be almost anything, but you will only be synchronised with people in the same room.",
"edit-rooms-tooltip": "Edit room list.",
"executable-path-tooltip": "Location of your chosen supported media player (mpv, mpv.net, VLC, MPC-HC/BE or mplayer2).", "executable-path-tooltip": "Location of your chosen supported media player (mpv, mpv.net, VLC, MPC-HC/BE or mplayer2).",
"media-path-tooltip": "Location of video or stream to be opened. Necessary for mplayer2.", "media-path-tooltip": "Location of video or stream to be opened. Necessary for mplayer2.",
"player-arguments-tooltip": "Additional command line arguments / switches to pass on to this media player.", "player-arguments-tooltip": "Additional command line arguments / switches to pass on to this media player.",

View File

@ -184,6 +184,7 @@ es = {
"name-label": "Nombre de usuario (opcional):", "name-label": "Nombre de usuario (opcional):",
"password-label": "Contraseña del servidor (si corresponde):", "password-label": "Contraseña del servidor (si corresponde):",
"room-label": "Sala por defecto: ", "room-label": "Sala por defecto: ",
"roomlist-msgbox-label": "Edit room list (one per line)", # TODO: Translate
"media-setting-title": "Configuración del reproductor multimedia", "media-setting-title": "Configuración del reproductor multimedia",
"executable-path-label": "Ruta al reproductor multimedia:", "executable-path-label": "Ruta al reproductor multimedia:",
@ -374,6 +375,8 @@ es = {
"password-tooltip": "Las contraseñas son sólo necesarias para conectarse a servidores privados.", "password-tooltip": "Las contraseñas son sólo necesarias para conectarse a servidores privados.",
"room-tooltip": "La sala para unirse en la conexión puede ser casi cualquier cosa, pero sólo se sincronizará con las personas en la misma sala.", "room-tooltip": "La sala para unirse en la conexión puede ser casi cualquier cosa, pero sólo se sincronizará con las personas en la misma sala.",
"edit-rooms-tooltip": "Edit room list.", # TO DO: Translate
"executable-path-tooltip": "Ubicación de tu reproductor multimedia compatible elegido (mpv, mpv.net, VLC, MPC-HC/BE o mplayer2).", "executable-path-tooltip": "Ubicación de tu reproductor multimedia compatible elegido (mpv, mpv.net, VLC, MPC-HC/BE o mplayer2).",
"media-path-tooltip": "Ubicación del video o flujo que se abrirá. Necesario para mplayer2.", "media-path-tooltip": "Ubicación del video o flujo que se abrirá. Necesario para mplayer2.",
"player-arguments-tooltip": "Arguementos de línea de comandos adicionales / parámetros para pasar a este reproductor multimedia.", "player-arguments-tooltip": "Arguementos de línea de comandos adicionales / parámetros para pasar a este reproductor multimedia.",

View File

@ -184,6 +184,7 @@ it = {
"name-label": "Username (opzionale):", "name-label": "Username (opzionale):",
"password-label": "Password del server (se necessaria):", "password-label": "Password del server (se necessaria):",
"room-label": "Stanza di default: ", "room-label": "Stanza di default: ",
"roomlist-msgbox-label": "Edit room list (one per line)", # TODO: Translate
"media-setting-title": "Impostazioni del media player", "media-setting-title": "Impostazioni del media player",
"executable-path-label": "Percorso del media player:", "executable-path-label": "Percorso del media player:",
@ -374,6 +375,8 @@ it = {
"password-tooltip": "La password è necessaria solo in caso di connessione a server privati.", "password-tooltip": "La password è necessaria solo in caso di connessione a server privati.",
"room-tooltip": "La stanza in cui entrare dopo la connessione. Può assumere qualsiasi nome, ma ricorda che sarai sincronizzato solo con gli utenti nella stessa stanza.", "room-tooltip": "La stanza in cui entrare dopo la connessione. Può assumere qualsiasi nome, ma ricorda che sarai sincronizzato solo con gli utenti nella stessa stanza.",
"edit-rooms-tooltip": "Edit room list.", # TO DO: Translate
"executable-path-tooltip": "Percorso del media player desiderato (scegliere tra mpv, mpv.net, VLC, MPC-HC/BE or mplayer2).", "executable-path-tooltip": "Percorso del media player desiderato (scegliere tra mpv, mpv.net, VLC, MPC-HC/BE or mplayer2).",
"media-path-tooltip": "Percorso del video o stream da aprire. Necessario per mplayer2.", "media-path-tooltip": "Percorso del video o stream da aprire. Necessario per mplayer2.",
"player-arguments-tooltip": "Argomenti da linea di comando aggiuntivi da passare al media player scelto.", "player-arguments-tooltip": "Argomenti da linea di comando aggiuntivi da passare al media player scelto.",

View File

@ -184,6 +184,7 @@ pt_BR = {
"name-label": "Nome de usuário (opcional): ", "name-label": "Nome de usuário (opcional): ",
"password-label": "Senha do servidor (se existir): ", "password-label": "Senha do servidor (se existir): ",
"room-label": "Sala padrão: ", "room-label": "Sala padrão: ",
"roomlist-msgbox-label": "Edit room list (one per line)", # TODO: Translate
"media-setting-title": "Configurações do reprodutor de mídia", "media-setting-title": "Configurações do reprodutor de mídia",
"executable-path-label": "Executável do reprodutor:", "executable-path-label": "Executável do reprodutor:",
@ -374,6 +375,8 @@ pt_BR = {
"password-tooltip": "Senhas são necessárias apenas para servidores privados.", "password-tooltip": "Senhas são necessárias apenas para servidores privados.",
"room-tooltip": "O nome da sala para se conectar pode ser praticamente qualquer coisa, mas você só irá se sincronizar com pessoas na mesma sala.", "room-tooltip": "O nome da sala para se conectar pode ser praticamente qualquer coisa, mas você só irá se sincronizar com pessoas na mesma sala.",
"edit-rooms-tooltip": "Edit room list.", # TO DO: Translate
"executable-path-tooltip": "Localização do seu reprodutor de mídia preferido (mpv, mpv.net, VLC, MPC-HC/BE ou mplayer2).", "executable-path-tooltip": "Localização do seu reprodutor de mídia preferido (mpv, mpv.net, VLC, MPC-HC/BE ou mplayer2).",
"media-path-tooltip": "Localização do vídeo ou transmissão a ser aberto. Necessário com o mplayer2.", "media-path-tooltip": "Localização do vídeo ou transmissão a ser aberto. Necessário com o mplayer2.",
"player-arguments-tooltip": "Argumentos de comando de linha adicionais para serem repassados ao reprodutor de mídia.", "player-arguments-tooltip": "Argumentos de comando de linha adicionais para serem repassados ao reprodutor de mídia.",

View File

@ -184,6 +184,7 @@ pt_PT = {
"name-label": "Nome de utilizador (opcional): ", "name-label": "Nome de utilizador (opcional): ",
"password-label": "Senha do servidor (se existir): ", "password-label": "Senha do servidor (se existir): ",
"room-label": "Sala padrão: ", "room-label": "Sala padrão: ",
"roomlist-msgbox-label": "Edit room list (one per line)", # TODO: Translate
"media-setting-title": "Configurações do reprodutor de mídia", "media-setting-title": "Configurações do reprodutor de mídia",
"executable-path-label": "Executável do reprodutor:", "executable-path-label": "Executável do reprodutor:",
@ -374,6 +375,8 @@ pt_PT = {
"password-tooltip": "Senhas são necessárias apenas para servidores privados.", "password-tooltip": "Senhas são necessárias apenas para servidores privados.",
"room-tooltip": "O nome da sala para se conectar pode ser praticamente qualquer coisa, mas você só irá se sincronizar com utilizadores na mesma sala.", "room-tooltip": "O nome da sala para se conectar pode ser praticamente qualquer coisa, mas você só irá se sincronizar com utilizadores na mesma sala.",
"edit-rooms-tooltip": "Edit room list.", # TO DO: Translate
"executable-path-tooltip": "Localização do seu reprodutor de mídia preferido (mpv, mpv.net, VLC, MPC-HC/BE ou mplayer2).", "executable-path-tooltip": "Localização do seu reprodutor de mídia preferido (mpv, mpv.net, VLC, MPC-HC/BE ou mplayer2).",
"media-path-tooltip": "Localização do vídeo ou transmissão a ser aberto. Necessário com o mplayer2.", "media-path-tooltip": "Localização do vídeo ou transmissão a ser aberto. Necessário com o mplayer2.",
"player-arguments-tooltip": "Argumentos de comando de linha adicionais para serem repassados ao reprodutor de mídia.", "player-arguments-tooltip": "Argumentos de comando de linha adicionais para serem repassados ao reprodutor de mídia.",

View File

@ -185,6 +185,7 @@ ru = {
"name-label": "Имя пользователя (не обязательно):", "name-label": "Имя пользователя (не обязательно):",
"password-label": "Пароль сервера (если требуется):", "password-label": "Пароль сервера (если требуется):",
"room-label": "Комната:", "room-label": "Комната:",
"roomlist-msgbox-label": "Edit room list (one per line)", # TODO: Translate
"media-setting-title": "Воспроизведение", "media-setting-title": "Воспроизведение",
"executable-path-label": "Путь к проигрывателю:", "executable-path-label": "Путь к проигрывателю:",
@ -377,6 +378,8 @@ ru = {
"password-tooltip": "Пароли нужны для подключения к приватным серверам.", "password-tooltip": "Пароли нужны для подключения к приватным серверам.",
"room-tooltip": "Комната, в которую Вы попадете сразу после подключения. Синхронизация возможна только между людьми в одной и той же комнате.", "room-tooltip": "Комната, в которую Вы попадете сразу после подключения. Синхронизация возможна только между людьми в одной и той же комнате.",
"edit-rooms-tooltip": "Edit room list.", # TO DO: Translate
"executable-path-tooltip": "Расположение Вашего видеопроигрывателя (mpv, mpv.net, VLC, MPC-HC/BE или mplayer2).", "executable-path-tooltip": "Расположение Вашего видеопроигрывателя (mpv, mpv.net, VLC, MPC-HC/BE или mplayer2).",
"media-path-tooltip": "Расположение видеофайла или потока для просмотра. Обязательно для mplayer2.", # TODO: Confirm translation "media-path-tooltip": "Расположение видеофайла или потока для просмотра. Обязательно для mplayer2.", # TODO: Confirm translation
"player-arguments-tooltip": "Передавать дополнительные аргументы командной строки этому проигрывателю.", "player-arguments-tooltip": "Передавать дополнительные аргументы командной строки этому проигрывателю.",

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 B

View File

@ -29,7 +29,7 @@ class ConfigurationGetter(object):
"noGui": False, "noGui": False,
"noStore": False, "noStore": False,
"room": "", "room": "",
"roomhistory": [], "roomList": [],
"password": None, "password": None,
"playerPath": None, "playerPath": None,
"perPlayerArguments": None, "perPlayerArguments": None,
@ -150,7 +150,7 @@ class ConfigurationGetter(object):
] ]
self._serialised = [ self._serialised = [
"roomhistory", "roomList",
"perPlayerArguments", "perPlayerArguments",
"mediaSearchDirectories", "mediaSearchDirectories",
"trustedDomains", "trustedDomains",
@ -183,7 +183,7 @@ class ConfigurationGetter(object):
self._iniStructure = { self._iniStructure = {
"server_data": ["host", "port", "password"], "server_data": ["host", "port", "password"],
"client_settings": [ "client_settings": [
"name", "room", "roomhistory", "playerPath", "name", "room", "roomList", "playerPath",
"perPlayerArguments", "slowdownThreshold", "perPlayerArguments", "slowdownThreshold",
"rewindThreshold", "fastforwardThreshold", "rewindThreshold", "fastforwardThreshold",
"slowOnDesync", "rewindOnDesync", "slowOnDesync", "rewindOnDesync",

View File

@ -158,25 +158,27 @@ class ConfigDialog(QtWidgets.QDialog):
def openRoomsDialog(self): def openRoomsDialog(self):
RoomsDialog = QtWidgets.QDialog() RoomsDialog = QtWidgets.QDialog()
RoomsDialog.setWindowFlags(Qt.FramelessWindowHint)
RoomsLayout = QtWidgets.QGridLayout() RoomsLayout = QtWidgets.QGridLayout()
RoomsTextbox = QtWidgets.QPlainTextEdit() RoomsTextbox = QtWidgets.QPlainTextEdit()
RoomsDialog.setWindowTitle(getMessage("roomlist-msgbox-label"))
RoomsPlaylistLabel = QtWidgets.QLabel(getMessage("roomlist-msgbox-label"))
RoomsTextbox.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap) RoomsTextbox.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap)
RoomsTextbox.setPlainText(utils.getListAsMultilineString(self.config['roomhistory'])) RoomsTextbox.setPlainText(utils.getListAsMultilineString(self.config['roomList']))
RoomsLayout.addWidget(RoomsTextbox, 0, 0, 1, 1) RoomsLayout.addWidget(RoomsPlaylistLabel, 0, 0, 1, 1)
RoomsLayout.addWidget(RoomsTextbox, 1, 0, 1, 1)
RoomsButtonBox = QtWidgets.QDialogButtonBox() RoomsButtonBox = QtWidgets.QDialogButtonBox()
RoomsButtonBox.setOrientation(Qt.Horizontal) RoomsButtonBox.setOrientation(Qt.Horizontal)
RoomsButtonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel) RoomsButtonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel)
RoomsButtonBox.accepted.connect(RoomsDialog.accept) RoomsButtonBox.accepted.connect(RoomsDialog.accept)
RoomsButtonBox.rejected.connect(RoomsDialog.reject) RoomsButtonBox.rejected.connect(RoomsDialog.reject)
RoomsLayout.addWidget(RoomsButtonBox, 1, 0, 1, 1) RoomsLayout.addWidget(RoomsButtonBox, 2, 0, 1, 1)
RoomsDialog.setLayout(RoomsLayout) RoomsDialog.setLayout(RoomsLayout)
RoomsDialog.setModal(True) RoomsDialog.setModal(True)
RoomsDialog.show() RoomsDialog.show()
result = RoomsDialog.exec_() result = RoomsDialog.exec_()
if result == QtWidgets.QDialog.Accepted: if result == QtWidgets.QDialog.Accepted:
newRooms = utils.convertMultilineStringToList(RoomsTextbox.toPlainText()) newRooms = utils.convertMultilineStringToList(RoomsTextbox.toPlainText())
self.relistRoomHistory(newRooms) self.relistRoomList(newRooms)
def safenormcaseandpath(self, path): def safenormcaseandpath(self, path):
if utils.isURL(path): if utils.isURL(path):
@ -403,25 +405,27 @@ class ConfigDialog(QtWidgets.QDialog):
self.hostCombobox.setEditText(currentServer) self.hostCombobox.setEditText(currentServer)
def fillRoomsCombobox(self): def fillRoomsCombobox(self):
previousRoomSelection = self.roomsCombobox.currentText()
self.roomsCombobox.clear() self.roomsCombobox.clear()
for roomHistoryValue in self.config['roomhistory']: for roomListValue in self.config['roomList']:
self.roomsCombobox.addItem(roomHistoryValue) self.roomsCombobox.addItem(roomListValue)
self.roomsCombobox.setEditText(previousRoomSelection)
def relistRoomHistory(self, newRooms): def relistRoomList(self, newRooms):
filteredNewRooms = [room for room in newRooms if room and not room.isspace()] filteredNewRooms = [room for room in newRooms if room and not room.isspace()]
self.config['roomhistory'] = filteredNewRooms self.config['roomList'] = filteredNewRooms
self.fillRoomsCombobox() self.fillRoomsCombobox()
def addRoomToHistory(self, newRoom=None): def addRoomToList(self, newRoom=None):
if newRoom is None: if newRoom is None:
newRoom = self.roomsCombobox.currentText() newRoom = self.roomsCombobox.currentText()
if not newRoom: if not newRoom:
return return
roomHistory = self.config['roomhistory'] roomList = self.config['roomList']
if newRoom in roomHistory: if newRoom in roomList:
roomHistory.remove(newRoom) roomList.remove(newRoom)
roomHistory.insert(0, newRoom) roomList.insert(0, newRoom)
self.config['roomhistory'] = roomHistory self.config['roomList'] = roomList
def showErrorMessage(self, errorMessage): def showErrorMessage(self, errorMessage):
QtWidgets.QMessageBox.warning(self, "Syncplay", errorMessage) QtWidgets.QMessageBox.warning(self, "Syncplay", errorMessage)
@ -645,14 +649,16 @@ class ConfigDialog(QtWidgets.QDialog):
self.serverpassLabel = QLabel(getMessage("password-label"), self) self.serverpassLabel = QLabel(getMessage("password-label"), self)
self.roomsCombobox = QtWidgets.QComboBox(self) self.roomsCombobox = QtWidgets.QComboBox(self)
self.roomsCombobox.setEditable(True) self.roomsCombobox.setEditable(True)
self.addRoomToHistory(config['room']) # self.addRoomToHistory(config['room']) - TO DO: Make this optional
self.fillRoomsCombobox() self.fillRoomsCombobox()
self.roomsCombobox.setEditText(config['room'])
self.usernameLabel = QLabel(getMessage("name-label"), self) self.usernameLabel = QLabel(getMessage("name-label"), self)
self.serverpassTextbox = QLineEdit(self) self.serverpassTextbox = QLineEdit(self)
self.serverpassTextbox.setText(self.storedPassword) self.serverpassTextbox.setText(self.storedPassword)
self.defaultroomLabel = QLabel(getMessage("room-label"), self) self.defaultroomLabel = QLabel(getMessage("room-label"), self)
self.editRoomsButton = QtWidgets.QToolButton() self.editRoomsButton = QtWidgets.QToolButton()
self.editRoomsButton.setIcon(QtGui.QIcon(resourcespath + 'eye.png')) self.editRoomsButton.setIcon(QtGui.QIcon(resourcespath + 'bullet_edit_centered.png'))
self.editRoomsButton.setObjectName(constants.LOAD_SAVE_MANUALLY_MARKER + "edit-rooms")
self.editRoomsButton.released.connect(self.openRoomsDialog) self.editRoomsButton.released.connect(self.openRoomsDialog)
self.hostLabel.setObjectName("host") self.hostLabel.setObjectName("host")
@ -674,7 +680,7 @@ class ConfigDialog(QtWidgets.QDialog):
self.connectionSettingsLayout.addWidget(self.usernameLabel, 2, 0) self.connectionSettingsLayout.addWidget(self.usernameLabel, 2, 0)
self.connectionSettingsLayout.addWidget(self.usernameTextbox, 2, 1) self.connectionSettingsLayout.addWidget(self.usernameTextbox, 2, 1)
self.connectionSettingsLayout.addWidget(self.defaultroomLabel, 3, 0) self.connectionSettingsLayout.addWidget(self.defaultroomLabel, 3, 0)
self.connectionSettingsLayout.addWidget(self.editRoomsButton, 3, 0, Qt.AlignRight) self.connectionSettingsLayout.addWidget(self.editRoomsButton, 3, 2, Qt.AlignRight)
self.connectionSettingsLayout.addWidget(self.roomsCombobox, 3, 1) self.connectionSettingsLayout.addWidget(self.roomsCombobox, 3, 1)
self.connectionSettingsLayout.setSpacing(10) self.connectionSettingsLayout.setSpacing(10)
self.connectionSettingsGroup.setLayout(self.connectionSettingsLayout) self.connectionSettingsGroup.setLayout(self.connectionSettingsLayout)

View File

@ -244,6 +244,7 @@ class MainWindow(QtWidgets.QMainWindow):
sslInformation = "N/A" sslInformation = "N/A"
sslMode = False sslMode = False
def setPlaylistInsertPosition(self, newPosition): def setPlaylistInsertPosition(self, newPosition):
if not self.playlist.isEnabled(): if not self.playlist.isEnabled():
return return
@ -459,12 +460,21 @@ class MainWindow(QtWidgets.QMainWindow):
return f(self, *args, **kwds) return f(self, *args, **kwds)
return wrapper return wrapper
def fillRoomsCombobox(self):
previousRoomSelection = self.roomsCombobox.currentText()
self.roomsCombobox.clear()
for roomListValue in self.config['roomList']:
self.roomsCombobox.addItem(roomListValue)
self.roomsCombobox.setEditText(previousRoomSelection)
def addClient(self, client): def addClient(self, client):
self._syncplayClient = client self._syncplayClient = client
if self.console: if self.console:
self.console.addClient(client) self.console.addClient(client)
self.roomInput.setText(self._syncplayClient.getRoom())
self.config = self._syncplayClient.getConfig() self.config = self._syncplayClient.getConfig()
self.roomsCombobox.setEditText(self._syncplayClient.getRoom())
self.fillRoomsCombobox()
try: try:
self.playlistGroup.blockSignals(True) self.playlistGroup.blockSignals(True)
self.playlistGroup.setChecked(self.config['sharedPlaylistEnabled']) self.playlistGroup.setChecked(self.config['sharedPlaylistEnabled'])
@ -502,7 +512,7 @@ class MainWindow(QtWidgets.QMainWindow):
if not featureList["sharedPlaylists"]: if not featureList["sharedPlaylists"]:
self.playlistGroup.setEnabled(False) self.playlistGroup.setEnabled(False)
self.chatInput.setMaxLength(constants.MAX_CHAT_MESSAGE_LENGTH) self.chatInput.setMaxLength(constants.MAX_CHAT_MESSAGE_LENGTH)
self.roomInput.setMaxLength(constants.MAX_ROOM_NAME_LENGTH) #self.roomsCombobox.setMaxLength(constants.MAX_ROOM_NAME_LENGTH)
def setSSLMode(self, sslMode, sslInformation): def setSSLMode(self, sslMode, sslInformation):
self.sslMode = sslMode self.sslMode = sslMode
@ -868,7 +878,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.playlist.updatePlaylistIndexIcon() self.playlist.updatePlaylistIndexIcon()
def updateRoomName(self, room=""): def updateRoomName(self, room=""):
self.roomInput.setText(room) self.roomsCombobox.setEditText(room)
def showDebugMessage(self, message): def showDebugMessage(self, message):
print(message) print(message)
@ -889,13 +899,13 @@ class MainWindow(QtWidgets.QMainWindow):
@needsClient @needsClient
def joinRoom(self, room=None): def joinRoom(self, room=None):
if room is None: if room is None:
room = self.roomInput.text() room = self.roomsCombobox.currentText()
if room == "": if room == "":
if self._syncplayClient.userlist.currentUser.file: if self._syncplayClient.userlist.currentUser.file:
room = self._syncplayClient.userlist.currentUser.file["name"] room = self._syncplayClient.userlist.currentUser.file["name"]
else: else:
room = self._syncplayClient.defaultRoom room = self._syncplayClient.defaultRoom
self.roomInput.setText(room) self.roomsCombobox.setEditText(room)
if room != self._syncplayClient.getRoom(): if room != self._syncplayClient.getRoom():
self._syncplayClient.setRoom(room, resetAutoplay=True) self._syncplayClient.setRoom(room, resetAutoplay=True)
self._syncplayClient.sendRoom() self._syncplayClient.sendRoom()
@ -1121,6 +1131,36 @@ class MainWindow(QtWidgets.QMainWindow):
self.addStreamToPlaylist(URI) self.addStreamToPlaylist(URI)
self.updatingPlaylist = False self.updatingPlaylist = False
def openEditRoomsDialog(self):
RoomsDialog = QtWidgets.QDialog()
RoomsLayout = QtWidgets.QGridLayout()
RoomsTextbox = QtWidgets.QPlainTextEdit()
RoomsDialog.setWindowTitle(getMessage("roomlist-msgbox-label"))
RoomsPlaylistLabel = QtWidgets.QLabel(getMessage("roomlist-msgbox-label"))
RoomsTextbox.setLineWrapMode(QtWidgets.QPlainTextEdit.NoWrap)
RoomsTextbox.setPlainText(utils.getListAsMultilineString(self.config['roomList']))
RoomsLayout.addWidget(RoomsPlaylistLabel, 0, 0, 1, 1)
RoomsLayout.addWidget(RoomsTextbox, 1, 0, 1, 1)
RoomsButtonBox = QtWidgets.QDialogButtonBox()
RoomsButtonBox.setOrientation(Qt.Horizontal)
RoomsButtonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Ok | QtWidgets.QDialogButtonBox.Cancel)
RoomsButtonBox.accepted.connect(RoomsDialog.accept)
RoomsButtonBox.rejected.connect(RoomsDialog.reject)
RoomsLayout.addWidget(RoomsButtonBox, 2, 0, 1, 1)
RoomsDialog.setLayout(RoomsLayout)
RoomsDialog.setModal(True)
RoomsDialog.show()
result = RoomsDialog.exec_()
if result == QtWidgets.QDialog.Accepted:
newRooms = utils.convertMultilineStringToList(RoomsTextbox.toPlainText())
self.relistRoomList(newRooms)
self._syncplayClient.setRoomList(newRooms)
def relistRoomList(self, newRooms):
filteredNewRooms = [room for room in newRooms if room and not room.isspace()]
self.config['roomList'] = filteredNewRooms
self.fillRoomsCombobox()
@needsClient @needsClient
def openEditPlaylistDialog(self): def openEditPlaylistDialog(self):
oldPlaylist = utils.getListAsMultilineString(self.getPlaylistState()) oldPlaylist = utils.getListAsMultilineString(self.getPlaylistState())
@ -1422,14 +1462,14 @@ class MainWindow(QtWidgets.QMainWindow):
window.listSplit = QtWidgets.QSplitter(Qt.Vertical, self) window.listSplit = QtWidgets.QSplitter(Qt.Vertical, self)
window.listSplit.addWidget(window.userlistFrame) window.listSplit.addWidget(window.userlistFrame)
window.listLayout.addWidget(window.listSplit) window.listLayout.addWidget(window.listSplit)
window.roomsCombobox = QtWidgets.QComboBox(self)
window.roomInput = QtWidgets.QLineEdit() window.roomsCombobox.setEditable(True)
window.roomInput.setMaxLength(constants.MAX_ROOM_NAME_LENGTH) #window.roomsCombobox.setMaxLength(constants.MAX_ROOM_NAME_LENGTH)
window.roomInput.returnPressed.connect(self.joinRoom)
window.roomButton = QtWidgets.QPushButton( window.roomButton = QtWidgets.QPushButton(
QtGui.QPixmap(resourcespath + 'door_in.png'), QtGui.QPixmap(resourcespath + 'door_in.png'),
getMessage("joinroom-label")) getMessage("joinroom-label"))
window.roomButton.pressed.connect(self.joinRoom) window.roomButton.pressed.connect(self.joinRoom)
window.roomButton.setFixedWidth(window.roomButton.sizeHint().width())
window.roomLayout = QtWidgets.QHBoxLayout() window.roomLayout = QtWidgets.QHBoxLayout()
window.roomFrame = QtWidgets.QFrame() window.roomFrame = QtWidgets.QFrame()
window.roomFrame.setLayout(self.roomLayout) window.roomFrame.setLayout(self.roomLayout)
@ -1441,7 +1481,7 @@ class MainWindow(QtWidgets.QMainWindow):
window.roomFrame.setContentsMargins(0, 0, 0, 0) window.roomFrame.setContentsMargins(0, 0, 0, 0)
window.roomLayout.setContentsMargins(0, 0, 0, 0) window.roomLayout.setContentsMargins(0, 0, 0, 0)
self.roomButton.setToolTip(getMessage("joinroom-tooltip")) self.roomButton.setToolTip(getMessage("joinroom-tooltip"))
window.roomLayout.addWidget(window.roomInput) window.roomLayout.addWidget(window.roomsCombobox)
window.roomLayout.addWidget(window.roomButton) window.roomLayout.addWidget(window.roomButton)
window.roomFrame.setMaximumHeight(window.roomFrame.sizeHint().height()) window.roomFrame.setMaximumHeight(window.roomFrame.sizeHint().height())
window.listLayout.addWidget(window.roomFrame, Qt.AlignRight) window.listLayout.addWidget(window.roomFrame, Qt.AlignRight)
@ -1673,6 +1713,9 @@ class MainWindow(QtWidgets.QMainWindow):
window.autoplayAction = window.windowMenu.addAction(getMessage("autoplay-menu-label")) window.autoplayAction = window.windowMenu.addAction(getMessage("autoplay-menu-label"))
window.autoplayAction.setCheckable(True) window.autoplayAction.setCheckable(True)
window.autoplayAction.triggered.connect(self.updateAutoplayVisibility) window.autoplayAction.triggered.connect(self.updateAutoplayVisibility)
window.editroomsAction = window.windowMenu.addAction(QtGui.QPixmap(resourcespath + 'door_open_edit.png'), getMessage("roomlist-msgbox-label"))
window.editroomsAction.triggered.connect(self.openEditRoomsDialog)
window.menuBar.addMenu(window.windowMenu) window.menuBar.addMenu(window.windowMenu)
# Help menu # Help menu