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: 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):
if utils.isURL(URIToTest):
for trustedProtocol in constants.TRUSTABLE_WEB_PROTOCOLS:

View File

@ -184,6 +184,7 @@ de = {
"name-label": "Benutzername (optional):",
"password-label": "Server-Passwort (falls nötig):",
"room-label": "Standard-Raum:",
"roomlist-msgbox-label": "Edit room list (one per line)", # TODO: Translate
"media-setting-title": "Media-Player Einstellungen",
"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.",
"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).",
"media-path-tooltip": "Pfad zum wiederzugebenden Video oder Stream. Notwendig für mplayer2.",
"player-arguments-tooltip": "Zusätzliche Kommandozeilenparameter/-schalter für diesen Mediaplayer.",

View File

@ -184,6 +184,7 @@ en = {
"name-label": "Username (optional):",
"password-label": "Server password (if any):",
"room-label": "Default room: ",
"roomlist-msgbox-label": "Edit room list (one per line)",
"media-setting-title": "Media player settings",
"executable-path-label": "Path to media player:",
@ -374,6 +375,8 @@ en = {
"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.",
"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).",
"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.",

View File

@ -184,6 +184,7 @@ es = {
"name-label": "Nombre de usuario (opcional):",
"password-label": "Contraseña del servidor (si corresponde):",
"room-label": "Sala por defecto: ",
"roomlist-msgbox-label": "Edit room list (one per line)", # TODO: Translate
"media-setting-title": "Configuración del 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.",
"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).",
"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.",

View File

@ -184,6 +184,7 @@ it = {
"name-label": "Username (opzionale):",
"password-label": "Password del server (se necessaria):",
"room-label": "Stanza di default: ",
"roomlist-msgbox-label": "Edit room list (one per line)", # TODO: Translate
"media-setting-title": "Impostazioni 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.",
"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).",
"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.",

View File

@ -184,6 +184,7 @@ pt_BR = {
"name-label": "Nome de usuário (opcional): ",
"password-label": "Senha do servidor (se existir): ",
"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",
"executable-path-label": "Executável do reprodutor:",
@ -374,6 +375,8 @@ pt_BR = {
"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.",
"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).",
"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.",

View File

@ -184,6 +184,7 @@ pt_PT = {
"name-label": "Nome de utilizador (opcional): ",
"password-label": "Senha do servidor (se existir): ",
"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",
"executable-path-label": "Executável do reprodutor:",
@ -374,6 +375,8 @@ pt_PT = {
"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.",
"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).",
"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.",

View File

@ -185,6 +185,7 @@ ru = {
"name-label": "Имя пользователя (не обязательно):",
"password-label": "Пароль сервера (если требуется):",
"room-label": "Комната:",
"roomlist-msgbox-label": "Edit room list (one per line)", # TODO: Translate
"media-setting-title": "Воспроизведение",
"executable-path-label": "Путь к проигрывателю:",
@ -377,6 +378,8 @@ ru = {
"password-tooltip": "Пароли нужны для подключения к приватным серверам.",
"room-tooltip": "Комната, в которую Вы попадете сразу после подключения. Синхронизация возможна только между людьми в одной и той же комнате.",
"edit-rooms-tooltip": "Edit room list.", # TO DO: Translate
"executable-path-tooltip": "Расположение Вашего видеопроигрывателя (mpv, mpv.net, VLC, MPC-HC/BE или mplayer2).",
"media-path-tooltip": "Расположение видеофайла или потока для просмотра. Обязательно для mplayer2.", # TODO: Confirm translation
"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,
"noStore": False,
"room": "",
"roomhistory": [],
"roomList": [],
"password": None,
"playerPath": None,
"perPlayerArguments": None,
@ -150,7 +150,7 @@ class ConfigurationGetter(object):
]
self._serialised = [
"roomhistory",
"roomList",
"perPlayerArguments",
"mediaSearchDirectories",
"trustedDomains",
@ -183,7 +183,7 @@ class ConfigurationGetter(object):
self._iniStructure = {
"server_data": ["host", "port", "password"],
"client_settings": [
"name", "room", "roomhistory", "playerPath",
"name", "room", "roomList", "playerPath",
"perPlayerArguments", "slowdownThreshold",
"rewindThreshold", "fastforwardThreshold",
"slowOnDesync", "rewindOnDesync",

View File

@ -158,25 +158,27 @@ class ConfigDialog(QtWidgets.QDialog):
def openRoomsDialog(self):
RoomsDialog = QtWidgets.QDialog()
RoomsDialog.setWindowFlags(Qt.FramelessWindowHint)
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['roomhistory']))
RoomsLayout.addWidget(RoomsTextbox, 0, 0, 1, 1)
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, 1, 0, 1, 1)
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.relistRoomHistory(newRooms)
self.relistRoomList(newRooms)
def safenormcaseandpath(self, path):
if utils.isURL(path):
@ -403,25 +405,27 @@ class ConfigDialog(QtWidgets.QDialog):
self.hostCombobox.setEditText(currentServer)
def fillRoomsCombobox(self):
previousRoomSelection = self.roomsCombobox.currentText()
self.roomsCombobox.clear()
for roomHistoryValue in self.config['roomhistory']:
self.roomsCombobox.addItem(roomHistoryValue)
for roomListValue in self.config['roomList']:
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()]
self.config['roomhistory'] = filteredNewRooms
self.config['roomList'] = filteredNewRooms
self.fillRoomsCombobox()
def addRoomToHistory(self, newRoom=None):
def addRoomToList(self, newRoom=None):
if newRoom is None:
newRoom = self.roomsCombobox.currentText()
if not newRoom:
return
roomHistory = self.config['roomhistory']
if newRoom in roomHistory:
roomHistory.remove(newRoom)
roomHistory.insert(0, newRoom)
self.config['roomhistory'] = roomHistory
roomList = self.config['roomList']
if newRoom in roomList:
roomList.remove(newRoom)
roomList.insert(0, newRoom)
self.config['roomList'] = roomList
def showErrorMessage(self, errorMessage):
QtWidgets.QMessageBox.warning(self, "Syncplay", errorMessage)
@ -645,14 +649,16 @@ class ConfigDialog(QtWidgets.QDialog):
self.serverpassLabel = QLabel(getMessage("password-label"), self)
self.roomsCombobox = QtWidgets.QComboBox(self)
self.roomsCombobox.setEditable(True)
self.addRoomToHistory(config['room'])
# self.addRoomToHistory(config['room']) - TO DO: Make this optional
self.fillRoomsCombobox()
self.roomsCombobox.setEditText(config['room'])
self.usernameLabel = QLabel(getMessage("name-label"), self)
self.serverpassTextbox = QLineEdit(self)
self.serverpassTextbox.setText(self.storedPassword)
self.defaultroomLabel = QLabel(getMessage("room-label"), self)
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.hostLabel.setObjectName("host")
@ -674,7 +680,7 @@ class ConfigDialog(QtWidgets.QDialog):
self.connectionSettingsLayout.addWidget(self.usernameLabel, 2, 0)
self.connectionSettingsLayout.addWidget(self.usernameTextbox, 2, 1)
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.setSpacing(10)
self.connectionSettingsGroup.setLayout(self.connectionSettingsLayout)

View File

@ -244,6 +244,7 @@ class MainWindow(QtWidgets.QMainWindow):
sslInformation = "N/A"
sslMode = False
def setPlaylistInsertPosition(self, newPosition):
if not self.playlist.isEnabled():
return
@ -459,12 +460,21 @@ class MainWindow(QtWidgets.QMainWindow):
return f(self, *args, **kwds)
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):
self._syncplayClient = client
if self.console:
self.console.addClient(client)
self.roomInput.setText(self._syncplayClient.getRoom())
self.config = self._syncplayClient.getConfig()
self.roomsCombobox.setEditText(self._syncplayClient.getRoom())
self.fillRoomsCombobox()
try:
self.playlistGroup.blockSignals(True)
self.playlistGroup.setChecked(self.config['sharedPlaylistEnabled'])
@ -502,7 +512,7 @@ class MainWindow(QtWidgets.QMainWindow):
if not featureList["sharedPlaylists"]:
self.playlistGroup.setEnabled(False)
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):
self.sslMode = sslMode
@ -868,7 +878,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.playlist.updatePlaylistIndexIcon()
def updateRoomName(self, room=""):
self.roomInput.setText(room)
self.roomsCombobox.setEditText(room)
def showDebugMessage(self, message):
print(message)
@ -889,13 +899,13 @@ class MainWindow(QtWidgets.QMainWindow):
@needsClient
def joinRoom(self, room=None):
if room is None:
room = self.roomInput.text()
room = self.roomsCombobox.currentText()
if room == "":
if self._syncplayClient.userlist.currentUser.file:
room = self._syncplayClient.userlist.currentUser.file["name"]
else:
room = self._syncplayClient.defaultRoom
self.roomInput.setText(room)
self.roomsCombobox.setEditText(room)
if room != self._syncplayClient.getRoom():
self._syncplayClient.setRoom(room, resetAutoplay=True)
self._syncplayClient.sendRoom()
@ -1121,6 +1131,36 @@ class MainWindow(QtWidgets.QMainWindow):
self.addStreamToPlaylist(URI)
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
def openEditPlaylistDialog(self):
oldPlaylist = utils.getListAsMultilineString(self.getPlaylistState())
@ -1422,14 +1462,14 @@ class MainWindow(QtWidgets.QMainWindow):
window.listSplit = QtWidgets.QSplitter(Qt.Vertical, self)
window.listSplit.addWidget(window.userlistFrame)
window.listLayout.addWidget(window.listSplit)
window.roomInput = QtWidgets.QLineEdit()
window.roomInput.setMaxLength(constants.MAX_ROOM_NAME_LENGTH)
window.roomInput.returnPressed.connect(self.joinRoom)
window.roomsCombobox = QtWidgets.QComboBox(self)
window.roomsCombobox.setEditable(True)
#window.roomsCombobox.setMaxLength(constants.MAX_ROOM_NAME_LENGTH)
window.roomButton = QtWidgets.QPushButton(
QtGui.QPixmap(resourcespath + 'door_in.png'),
getMessage("joinroom-label"))
window.roomButton.pressed.connect(self.joinRoom)
window.roomButton.setFixedWidth(window.roomButton.sizeHint().width())
window.roomLayout = QtWidgets.QHBoxLayout()
window.roomFrame = QtWidgets.QFrame()
window.roomFrame.setLayout(self.roomLayout)
@ -1441,7 +1481,7 @@ class MainWindow(QtWidgets.QMainWindow):
window.roomFrame.setContentsMargins(0, 0, 0, 0)
window.roomLayout.setContentsMargins(0, 0, 0, 0)
self.roomButton.setToolTip(getMessage("joinroom-tooltip"))
window.roomLayout.addWidget(window.roomInput)
window.roomLayout.addWidget(window.roomsCombobox)
window.roomLayout.addWidget(window.roomButton)
window.roomFrame.setMaximumHeight(window.roomFrame.sizeHint().height())
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.setCheckable(True)
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)
# Help menu