diff --git a/syncplay/client.py b/syncplay/client.py index 60dc7c6..83060ce 100755 --- a/syncplay/client.py +++ b/syncplay/client.py @@ -534,6 +534,7 @@ class SyncplayClient(object): # TODO: Handle cases where users add www. to start of domain def setRoomList(self, newRoomList): + newRoomList = sorted(newRoomList) from syncplay.ui.ConfigurationGetter import ConfigurationGetter ConfigurationGetter().setConfigOption("roomList", newRoomList) oldRoomList = self._config['roomList'] @@ -1041,6 +1042,8 @@ class SyncplayClient(object): def storeControlPassword(self, room, password): if password: self.controlpasswords[room] = password + if self._config['autosaveJoinsToList']: + self.ui.addRoomToList(room+":"+password) def getControlledRoomPassword(self, room): if room in self.controlpasswords: @@ -1637,6 +1640,9 @@ class UiManager(object): def updateRoomName(self, room=""): self.__ui.updateRoomName(room) + def addRoomToList(self, room): + self.__ui.addRoomToList(room) + def executeCommand(self, command): self.__ui.executeCommand(command) diff --git a/syncplay/messages_de.py b/syncplay/messages_de.py index 10087c7..802e379 100755 --- a/syncplay/messages_de.py +++ b/syncplay/messages_de.py @@ -392,6 +392,8 @@ de = { "privacy-sendhashed-tooltip": "Die Informationen gehasht übertragen, um sie für andere Clients schwerer lesbar zu machen.", "privacy-dontsend-tooltip": "Diese Information nicht übertragen. Dies garantiert den größtmöglichen Datanschutz.", "checkforupdatesautomatically-tooltip": "Regelmäßig auf der Syncplay-Website nach Updates suchen.", + "autosavejoinstolist-tooltip": "When you join a room in a server, automatically remember the room name in the list of rooms to join.", # TO DO: Translate + "autosavejoinstolist-label": "Add rooms you join to the room list e", # TO DO: Translate "slowondesync-tooltip": "Reduziert die Abspielgeschwindigkeit zeitweise, um die Synchronität zu den anderen Clients wiederherzustellen.", "rewindondesync-label": "Zurückspulen bei großer Zeitdifferenz (empfohlen)", "fastforwardondesync-label": "Vorspulen wenn das Video laggt (empfohlen)", diff --git a/syncplay/messages_en.py b/syncplay/messages_en.py index 5d06ea9..243c1ad 100755 --- a/syncplay/messages_en.py +++ b/syncplay/messages_en.py @@ -207,6 +207,7 @@ en = { "filename-privacy-label": "Filename information:", "filesize-privacy-label": "File size information:", "checkforupdatesautomatically-label": "Check for Syncplay updates automatically", + "autosavejoinstolist-label": "Add rooms you join to the room list", "slowondesync-label": "Slow down on minor desync (not supported on MPC-HC/BE)", "rewindondesync-label": "Rewind on major desync (recommended)", "fastforwardondesync-label": "Fast-forward if lagging behind (recommended)", @@ -394,6 +395,7 @@ en = { "privacy-sendhashed-tooltip": "Send a hashed version of the information, making it less visible to other clients.", "privacy-dontsend-tooltip": "Do not send this information to the server. This provides for maximum privacy.", "checkforupdatesautomatically-tooltip": "Regularly check with the Syncplay website to see whether a new version of Syncplay is available.", + "autosavejoinstolist-tooltip": "When you join a room in a server, automatically remember the room name in the list of rooms to join.", "slowondesync-tooltip": "Reduce playback rate temporarily when needed to bring you back in sync with other viewers. Not supported on MPC-HC/BE.", "dontslowdownwithme-tooltip": "Means others do not get slowed down or rewinded if your playback is lagging. Useful for room operators.", "pauseonleave-tooltip": "Pause playback if you get disconnected or someone leaves from your room.", diff --git a/syncplay/messages_es.py b/syncplay/messages_es.py index 6696a6b..b705f98 100644 --- a/syncplay/messages_es.py +++ b/syncplay/messages_es.py @@ -206,6 +206,7 @@ es = { "filename-privacy-label": "Información del nombre de archivo:", "filesize-privacy-label": "Información del tamaño de archivo:", "checkforupdatesautomatically-label": "Buscar actualizaciones de Syncplay automáticamente", + "autosavejoinstolist-label": "Add rooms you join to the room list", # TO DO: Translate "slowondesync-label": "Ralentizar si hay una desincronización menor (no soportado en MPC-HC/BE)", "rewindondesync-label": "Rebobinar si hay una desincronización mayor (recomendado)", "fastforwardondesync-label": "Avanzar rápidamente si hay un retraso (recomendado)", @@ -393,6 +394,7 @@ es = { "privacy-sendhashed-tooltip": "Enviar una versión \"hasheada\" de la información, para que sea menos visible para otros clientes.", "privacy-dontsend-tooltip": "No enviar esta información al servidor. Esto proporciona la máxima privacidad.", "checkforupdatesautomatically-tooltip": "Regularmente verificar con el sitio Web de Syncplay para ver si hay una nueva versión de Syncplay disponible.", + "autosavejoinstolist-tooltip": "When you join a room in a server, automatically remember the room name in the list of rooms to join.", # TO DO: Translate "slowondesync-tooltip": "Reducir la velocidad de reproducción temporalmente cuando sea necesario, para volver a sincronizar con otros espectadores. No soportado en MPC-HC/BE.", "dontslowdownwithme-tooltip": "Significa que otros no se ralentizan ni rebobinan si la reproducción se retrasa. Útil para operadores de la sala.", "pauseonleave-tooltip": "Pausa la reproducción si te desconectas o alguien sale de tu sala.", diff --git a/syncplay/messages_it.py b/syncplay/messages_it.py index 3df17f1..028bb11 100755 --- a/syncplay/messages_it.py +++ b/syncplay/messages_it.py @@ -206,6 +206,7 @@ it = { "filename-privacy-label": "Nome del file:", "filesize-privacy-label": "Dimensione del file:", "checkforupdatesautomatically-label": "Controlla automaticamente gli aggiornamenti di Syncplay", + "autosavejoinstolist-label": "Add rooms you join to the room list", # TO DO: Translate "slowondesync-label": "Rallenta in caso di sfasamento minimo (non supportato su MPC-HC/BE)", "rewindondesync-label": "Riavvolgi in caso di grande sfasamento (consigliato)", "fastforwardondesync-label": "Avanzamento rapido in caso di ritardo (consigliato)", @@ -393,6 +394,7 @@ it = { "privacy-sendhashed-tooltip": "Invia una versione cifrata dell'informazione, rendendola meno visibile agli altri client.", "privacy-dontsend-tooltip": "Non inviare questa informazione al server. Questo garantisce massima privacy.", "checkforupdatesautomatically-tooltip": "Controlla regolarmente la presenza di nuove versioni di Syncplay.", + "autosavejoinstolist-tooltip": "When you join a room in a server, automatically remember the room name in the list of rooms to join.", # TO DO: Translate "slowondesync-tooltip": "Riduce temporaneamente la velocità di riproduzione quando c'è bisogno di sincronizzarti con gli altri utenti. Non supportato su MPC-HC/BE.", "dontslowdownwithme-tooltip": "Gli altri utenti non vengono rallentati se non sei sincronizzato. Utile per i gestori della stanza.", "pauseonleave-tooltip": "Mette in pausa la riproduzione se vieni disconnesso o se qualcuno lascia la stanza.", diff --git a/syncplay/messages_pt_BR.py b/syncplay/messages_pt_BR.py index bb29dca..7f85976 100644 --- a/syncplay/messages_pt_BR.py +++ b/syncplay/messages_pt_BR.py @@ -206,6 +206,7 @@ pt_BR = { "filename-privacy-label": "Informação do nome do arquivo:", "filesize-privacy-label": "Informação do tamanho do arquivo:", "checkforupdatesautomatically-label": "Verificar atualizações do Syncplay automaticamente", + "autosavejoinstolist-label": "Add rooms you join to the room list", # TO DO: Translate "slowondesync-label": "Diminuir velocidade em dessincronizações menores (não suportado pelo MPC-HC/BE)", "rewindondesync-label": "Retroceder em dessincronização maiores (recomendado)", "fastforwardondesync-label": "Avançar se estiver ficando para trás (recomendado)", @@ -393,6 +394,7 @@ pt_BR = { "privacy-sendhashed-tooltip": "Mandar versão hasheada da informação, tornando-a menos visível aos outros clients.", "privacy-dontsend-tooltip": "Não enviar esta informação ao servidor. Esta opção oferece a maior privacidade.", "checkforupdatesautomatically-tooltip": "Checar o site do Syncplay regularmente para ver se alguma nova versão do Syncplay está disponível.", + "autosavejoinstolist-tooltip": "When you join a room in a server, automatically remember the room name in the list of rooms to join.", # TO DO: Translate "slowondesync-tooltip": "Reduzir a velocidade de reprodução temporariamente quando necessário para trazer você de volta à sincronia com os outros espectadores. Não suportado pelo MPC-HC/BE.", "dontslowdownwithme-tooltip": "Significa que outros não serão desacelerados ou retrocedidos se sua reprodução estiver ficando para trás. Útil para operadores de salas.", "pauseonleave-tooltip": "Pausar reprodução se você for disconectado ou se alguém sair da sua sala.", diff --git a/syncplay/messages_pt_PT.py b/syncplay/messages_pt_PT.py index 5bfddea..f0fb92b 100644 --- a/syncplay/messages_pt_PT.py +++ b/syncplay/messages_pt_PT.py @@ -393,6 +393,8 @@ pt_PT = { "privacy-sendhashed-tooltip": "Mandar versão hasheada da informação, tornando-a menos visível aos outros clients.", "privacy-dontsend-tooltip": "Não enviar esta informação ao servidor. Esta opção oferece a maior privacidade.", "checkforupdatesautomatically-tooltip": "Verificar o site do Syncplay regularmente para ver se alguma nova versão do Syncplay está disponível.", + "autosavejoinstolist-tooltip": "When you join a room in a server, automatically remember the room name in the list of rooms to join.", # TO DO: Translate + "autosavejoinstolist-label": "Add rooms you join to the room list", # TO DO: Translate "slowondesync-tooltip": "Reduzir a velocidade de reprodução temporariamente quando necessário para trazer você de volta à sincronia com os outros espectadores. Não suportado pelo MPC-HC/BE.", "dontslowdownwithme-tooltip": "Significa que outros não serão desacelerados ou retrocedidos se sua reprodução estiver ficando para trás. Útil para administradores de salas.", "pauseonleave-tooltip": "Pausar reprodução se você for disconectado ou se alguém sair da sua sala.", diff --git a/syncplay/messages_ru.py b/syncplay/messages_ru.py index 0ac82ea..242abcc 100755 --- a/syncplay/messages_ru.py +++ b/syncplay/messages_ru.py @@ -207,6 +207,7 @@ ru = { "filename-privacy-label": "Имя файла:", "filesize-privacy-label": "Размер файла:", "checkforupdatesautomatically-label": "Проверять обновления автоматически", + "autosavejoinstolist-label": "Add rooms you join to the room list", # TO DO: Translate "slowondesync-label": "Замедлять при небольших рассинхронизациях (не поддерживаетя в MPC-HC/BE)", "rewindondesync-label": "Перемотка при больших рассинхронизациях (настоятельно рекомендуется)", "dontslowdownwithme-label": "Никогда не замедлять и не перематывать видео другим (функция тестируется)", @@ -396,6 +397,7 @@ ru = { "privacy-sendhashed-tooltip": "Отправляет хэш-сумму этой информации, делая ее невидимой для других пользователей.", "privacy-dontsend-tooltip": "Не отправлять эту информацию на сервер. Предоставляет наибольшую приватность.", "checkforupdatesautomatically-tooltip": "Syncplay будет регулярно заходить на сайт и проверять наличие новых версий.", + "autosavejoinstolist-tooltip": "When you join a room in a server, automatically remember the room name in the list of rooms to join.", # TO DO: Translate "slowondesync-tooltip": "Временно уменьшить скорость воспроизведения в целях синхронизации с другими зрителями. Не поддерживается в MPC-HC/BE.", "dontslowdownwithme-tooltip": "Ваши лаги не будут влиять на других зрителей.", "pauseonleave-tooltip": "Приостановить воспроизведение, если Вы покинули комнату или кто-то из зрителей отключился от сервера.", diff --git a/syncplay/ui/ConfigurationGetter.py b/syncplay/ui/ConfigurationGetter.py index dac9290..dd1d8ec 100755 --- a/syncplay/ui/ConfigurationGetter.py +++ b/syncplay/ui/ConfigurationGetter.py @@ -38,6 +38,7 @@ class ConfigurationGetter(object): "loopAtEndOfPlaylist": False, "loopSingleFiles": False, "onlySwitchToTrustedDomains": True, + "autosaveJoinsToList": True, "trustedDomains": constants.DEFAULT_TRUSTED_DOMAINS, "file": None, "playerArgs": [], @@ -137,6 +138,7 @@ class ConfigurationGetter(object): "loopAtEndOfPlaylist", "loopSingleFiles", "onlySwitchToTrustedDomains", + "autosaveJoinsToList", "chatInputEnabled", "chatInputFontUnderline", "chatDirectInput", @@ -196,6 +198,7 @@ class ConfigurationGetter(object): "loopSingleFiles", "onlySwitchToTrustedDomains", "trustedDomains", "publicServers"], "gui": [ + "autosaveJoinsToList", "showOSD", "showOSDWarnings", "showSlowdownOSD", "showDifferentRoomOSD", "showSameRoomOSD", "showNonControllerOSD", "showDurationNotification", diff --git a/syncplay/ui/GuiConfiguration.py b/syncplay/ui/GuiConfiguration.py index 70287eb..9691581 100755 --- a/syncplay/ui/GuiConfiguration.py +++ b/syncplay/ui/GuiConfiguration.py @@ -178,6 +178,7 @@ class ConfigDialog(QtWidgets.QDialog): result = RoomsDialog.exec_() if result == QtWidgets.QDialog.Accepted: newRooms = utils.convertMultilineStringToList(RoomsTextbox.toPlainText()) + newRooms = sorted(newRooms) self.relistRoomList(newRooms) def safenormcaseandpath(self, path): @@ -422,9 +423,9 @@ class ConfigDialog(QtWidgets.QDialog): if not newRoom: return roomList = self.config['roomList'] - if newRoom in roomList: - roomList.remove(newRoom) - roomList.insert(0, newRoom) + if newRoom not in roomList: + roomList.append(newRoom) + roomList = sorted(roomList) self.config['roomList'] = roomList def showErrorMessage(self, errorMessage): @@ -495,6 +496,8 @@ class ConfigDialog(QtWidgets.QDialog): self.config['file'] = str(self.mediapathTextbox.text()) self.config['publicServers'] = self.publicServerAddresses self.config['room'] = self.roomsCombobox.currentText() + if self.config['autosaveJoinsToList']: + self.addRoomToList(self.config['room']) self.pressedclosebutton = False self.close() @@ -649,7 +652,6 @@ class ConfigDialog(QtWidgets.QDialog): self.serverpassLabel = QLabel(getMessage("password-label"), self) self.roomsCombobox = QtWidgets.QComboBox(self) self.roomsCombobox.setEditable(True) - # self.addRoomToHistory(config['room']) - TO DO: Make this optional self.fillRoomsCombobox() self.roomsCombobox.setEditText(config['room']) self.usernameLabel = QLabel(getMessage("name-label"), self) @@ -893,6 +895,10 @@ class ConfigDialog(QtWidgets.QDialog): self.automaticupdatesCheckbox.setObjectName("checkForUpdatesAutomatically") self.internalSettingsLayout.addWidget(self.automaticupdatesCheckbox) + self.autosaveJoinsToListCheckbox = QCheckBox(getMessage("autosavejoinstolist-label")) + self.autosaveJoinsToListCheckbox.setObjectName("autosaveJoinsToList") + self.internalSettingsLayout.addWidget(self.autosaveJoinsToListCheckbox) + ## Media path directories self.mediasearchSettingsGroup = QtWidgets.QGroupBox(getMessage("syncplay-mediasearchdirectories-title")) diff --git a/syncplay/ui/consoleUI.py b/syncplay/ui/consoleUI.py index 700639f..c9d4473 100755 --- a/syncplay/ui/consoleUI.py +++ b/syncplay/ui/consoleUI.py @@ -89,6 +89,9 @@ class ConsoleUI(threading.Thread): def userListChange(self): pass + def addRoomToList(self): + pass + def fileSwitchFoundFiles(self): pass diff --git a/syncplay/ui/gui.py b/syncplay/ui/gui.py index ff05c32..a5c324a 100755 --- a/syncplay/ui/gui.py +++ b/syncplay/ui/gui.py @@ -53,7 +53,7 @@ class ConsoleInGUI(ConsoleUI): def showErrorMessage(self, message, criticalerror=False): self._syncplayClient.ui.showErrorMessage(message, criticalerror) - def updateRoomName(self, room=""): + def updateRoomName(self, room=""): #bob self._syncplayClient.ui.updateRoomName(room) def getUserlist(self): @@ -467,6 +467,18 @@ class MainWindow(QtWidgets.QMainWindow): self.roomsCombobox.addItem(roomListValue) self.roomsCombobox.setEditText(previousRoomSelection) + def addRoomToList(self, newRoom=None): + if newRoom is None: + newRoom = self.roomsCombobox.currentText() + if not newRoom: + return + roomList = self.config['roomList'] + if newRoom not in roomList: + roomList.append(newRoom) + self.config['roomList'] = roomList + roomList = sorted(roomList) + self._syncplayClient.setRoomList(roomList) + self.relistRoomList(roomList) def addClient(self, client): self._syncplayClient = client @@ -879,6 +891,8 @@ class MainWindow(QtWidgets.QMainWindow): def updateRoomName(self, room=""): self.roomsCombobox.setEditText(room) + if self.config['autosaveJoinsToList']: + self.addRoomToList(room) def showDebugMessage(self, message): print(message) @@ -909,6 +923,8 @@ class MainWindow(QtWidgets.QMainWindow): if room != self._syncplayClient.getRoom(): self._syncplayClient.setRoom(room, resetAutoplay=True) self._syncplayClient.sendRoom() + if self.config['autosaveJoinsToList']: + self.addRoomToList(room) def seekPositionDialog(self): seekTime, ok = QtWidgets.QInputDialog.getText( @@ -1153,6 +1169,7 @@ class MainWindow(QtWidgets.QMainWindow): result = RoomsDialog.exec_() if result == QtWidgets.QDialog.Accepted: newRooms = utils.convertMultilineStringToList(RoomsTextbox.toPlainText()) + newRooms = sorted(newRooms) self.relistRoomList(newRooms) self._syncplayClient.setRoomList(newRooms)