Move all server listings to combo box

This commit is contained in:
Et0h 2015-08-30 20:31:49 +01:00
parent ea12a4ef9d
commit da1b2894bf
8 changed files with 56 additions and 26 deletions

View File

@ -654,7 +654,7 @@ guiIcons = ['resources/accept.png', 'resources/arrow_undo.png', 'resources/clock
'resources/user_key.png', 'resources/lock.png', 'resources/key_go.png', 'resources/page_white_key.png', 'resources/user_key.png', 'resources/lock.png', 'resources/key_go.png', 'resources/page_white_key.png',
'resources/tick.png', 'resources/lock_open.png', 'resources/empty_checkbox.png', 'resources/tick_checkbox.png', 'resources/tick.png', 'resources/lock_open.png', 'resources/empty_checkbox.png', 'resources/tick_checkbox.png',
'resources/world_explore.png', 'resources/application_get.png', 'resources/cog.png', 'resources/world_explore.png', 'resources/application_get.png', 'resources/cog.png',
'resources/film_go.png', 'resources/world_go.png', 'resources/report_magnify.png' 'resources/film_go.png', 'resources/world_go.png', 'resources/arrow_refresh.png'
] ]
resources = ["resources/icon.ico", "resources/syncplay.png"] resources = ["resources/icon.ico", "resources/syncplay.png"]
resources.extend(guiIcons) resources.extend(guiIcons)

BIN
resources/arrow_refresh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 685 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 738 B

View File

@ -3,6 +3,7 @@ import os.path
import time import time
import re import re
import sys import sys
import ast
from twisted.internet.protocol import ClientFactory from twisted.internet.protocol import ClientFactory
from twisted.internet import reactor, task from twisted.internet import reactor, task
from functools import wraps from functools import wraps
@ -676,9 +677,14 @@ class SyncplayClient(object):
response = f.read() response = f.read()
response = response.replace("<p>","").replace("</p>","").replace("<br />","").replace("&#8220;","\"").replace("&#8221;","\"") # Fix Wordpress response = response.replace("<p>","").replace("</p>","").replace("<br />","").replace("&#8220;","\"").replace("&#8221;","\"") # Fix Wordpress
response = json.loads(response) response = json.loads(response)
return response["version-status"], response["version-message"] if response.has_key("version-message") else None, response["version-url"] if response.has_key("version-url") else None publicServers = None
if response["public-servers"]:
publicServers = response["public-servers"].replace("&#8221;","'").replace(":&#8217;","'").replace("&#8217;","'").replace("&#8242;","'").replace("\n","").replace("\r","")
print publicServers
publicServers = ast.literal_eval(publicServers)
return response["version-status"], response["version-message"] if response.has_key("version-message") else None, response["version-url"] if response.has_key("version-url") else None, publicServers
except: except:
return "failed", getMessage("update-check-failed-notification").format(syncplay.version), constants.SYNCPLAY_DOWNLOAD_URL return "failed", getMessage("update-check-failed-notification").format(syncplay.version), constants.SYNCPLAY_DOWNLOAD_URL, None
class _WarningManager(object): class _WarningManager(object):
def __init__(self, player, userlist, ui, client): def __init__(self, player, userlist, ui, client):

View File

@ -16,7 +16,7 @@ SHOW_CONTACT_INFO = True # Displays dev contact details below list in GUI
SHOW_TOOLTIPS = True SHOW_TOOLTIPS = True
WARN_ABOUT_MISSING_STRINGS = False # (If debug mode is enabled) WARN_ABOUT_MISSING_STRINGS = False # (If debug mode is enabled)
FALLBACK_INITIAL_LANGUAGE = "en" FALLBACK_INITIAL_LANGUAGE = "en"
PUBLIC_SYNCPLAY_SERVERS = ["syncplay.pl:8995","syncplay.pl:8996","syncplay.pl:8997","syncplay.pl:8998","syncplay.pl:8999"] FALLBACK_PUBLIC_SYNCPLAY_SERVERS = ["syncplay.pl:8995","syncplay.pl:8996","syncplay.pl:8997","syncplay.pl:8998","syncplay.pl:8999"]
#Overriden by config #Overriden by config
SHOW_OSD = True # Sends Syncplay messages to media player OSD SHOW_OSD = True # Sends Syncplay messages to media player OSD

View File

@ -173,7 +173,7 @@ en = {
"media-path-label" : "Path to media file:", "media-path-label" : "Path to media file:",
"player-arguments-label" : "Player arguments (if any):", "player-arguments-label" : "Player arguments (if any):",
"browse-label" : "Browse", "browse-label" : "Browse",
"list-servers-label" : u"Find public server", "update-server-list-label" : u"Update list",
"more-title" : "Show more settings", "more-title" : "Show more settings",
"never-rewind-value" : "Never", "never-rewind-value" : "Never",
@ -541,7 +541,7 @@ ru = {
"media-path-label" : u"Путь к видеофайлу:", "media-path-label" : u"Путь к видеофайлу:",
"player-arguments-label" : u"Аргументы для запуска проигрывателя:", "player-arguments-label" : u"Аргументы для запуска проигрывателя:",
"browse-label" : u"Выбрать", "browse-label" : u"Выбрать",
"list-servers-label" : u"Find public server", # TODO: Translate into Russian "update-server-list-label" : u"Update list", # TODO: Translate into Russian
"more-title" : u"Больше настроек", "more-title" : u"Больше настроек",
"never-rewind-value" : u"Никогда", "never-rewind-value" : u"Никогда",
@ -909,7 +909,7 @@ de = {
"media-path-label" : u"Pfad zur Datei:", "media-path-label" : u"Pfad zur Datei:",
"player-arguments-label" : u"Player arguments:", # TODO: Translate into German "player-arguments-label" : u"Player arguments:", # TODO: Translate into German
"browse-label" : u"Durchsuchen", "browse-label" : u"Durchsuchen",
"list-servers-label" : u"Find public server", # TODO: Translate into German "update-server-list-label" : u"Update list", # TODO: Translate into German
"more-title" : u"Mehr Einstellungen zeigen", "more-title" : u"Mehr Einstellungen zeigen",
"never-rewind-value" : u"Niemals", "never-rewind-value" : u"Niemals",

View File

@ -202,6 +202,13 @@ class ConfigDialog(QtGui.QDialog):
else: else:
self.config["lastCheckedForUpdates"] = str(self.lastCheckedForUpdates) self.config["lastCheckedForUpdates"] = str(self.lastCheckedForUpdates)
def loadSavedPublicServerList(self):
settings = QSettings("Syncplay", "Interface")
settings.beginGroup("PublicServerList")
self.publicServers = settings.value("publicServers", constants.FALLBACK_PUBLIC_SYNCPLAY_SERVERS)
if self.publicServers is None:
self.publicServers = constants.FALLBACK_PUBLIC_SYNCPLAY_SERVERS
def loadMediaBrowseSettings(self): def loadMediaBrowseSettings(self):
settings = QSettings("Syncplay", "MediaBrowseDialog") settings = QSettings("Syncplay", "MediaBrowseDialog")
settings.beginGroup("MediaBrowseDialog") settings.beginGroup("MediaBrowseDialog")
@ -231,26 +238,24 @@ class ConfigDialog(QtGui.QDialog):
settings.endGroup() settings.endGroup()
def findPublicServer(self): def updateServerList(self):
try: try:
servers = utils.getListOfPublicServers() servers = utils.getListOfPublicServers()
except IOError as e: except IOError as e:
self.showErrorMessage(unicode(e)) self.showErrorMessage(unicode(e))
return return
dialog = QtGui.QInputDialog() currentServer = self.hostCombobox.currentText()
dialog.setWindowTitle(getMessage("list-servers-label")) self.hostCombobox.clear()
dialog.setLabelText(getMessage("public-server-msgbox-label")) if servers:
serverTitles = [] i = 0
serverDict = {} for server in servers:
for server in servers: self.hostCombobox.addItem(server[1])
serverTitle = server[0] self.hostCombobox.setItemData(i, server[0], Qt.ToolTipRole)
serverAddress = server[1] i += 1
serverTitles.append(serverTitle) settings = QSettings("Syncplay", "Interface")
serverDict[serverTitle]=serverAddress settings.beginGroup("PublicServerList")
dialog.setComboBoxItems(serverTitles) settings.setValue("publicServers", servers)
ok = dialog.exec_() self.hostCombobox.setEditText(currentServer)
if ok:
self.hostCombobox.setEditText(serverDict[dialog.textValue()])
def showErrorMessage(self, errorMessage): def showErrorMessage(self, errorMessage):
QtGui.QMessageBox.warning(self, "Syncplay", errorMessage) QtGui.QMessageBox.warning(self, "Syncplay", errorMessage)
@ -416,14 +421,20 @@ class ConfigDialog(QtGui.QDialog):
self.mediaSearchDirectories = self.config["mediaSearchDirectories"] self.mediaSearchDirectories = self.config["mediaSearchDirectories"]
self.connectionSettingsGroup = QtGui.QGroupBox(getMessage("connection-group-title")) self.connectionSettingsGroup = QtGui.QGroupBox(getMessage("connection-group-title"))
self.loadSavedPublicServerList()
self.hostCombobox = QtGui.QComboBox(self) self.hostCombobox = QtGui.QComboBox(self)
self.hostCombobox.addItems(constants.PUBLIC_SYNCPLAY_SERVERS) if self.publicServers:
i = 0
for publicServer in self.publicServers:
self.hostCombobox.addItem(publicServer[1])
self.hostCombobox.setItemData(i, publicServer[0], Qt.ToolTipRole)
i += 1
self.hostCombobox.setEditable(True) self.hostCombobox.setEditable(True)
self.hostCombobox.setEditText(host) self.hostCombobox.setEditText(host)
self.hostCombobox.setFixedWidth(165) self.hostCombobox.setFixedWidth(165)
self.hostLabel = QLabel(getMessage("host-label"), self) self.hostLabel = QLabel(getMessage("host-label"), self)
self.findServerButton = QtGui.QPushButton(QtGui.QIcon(resourcespath + 'report_magnify.png'), getMessage("list-servers-label")) self.findServerButton = QtGui.QPushButton(QtGui.QIcon(resourcespath + 'arrow_refresh.png'), getMessage("update-server-list-label"))
self.findServerButton.clicked.connect(self.findPublicServer) self.findServerButton.clicked.connect(self.updateServerList)
self.usernameTextbox = QLineEdit(self) self.usernameTextbox = QLineEdit(self)
self.usernameTextbox.setObjectName("name") self.usernameTextbox.setObjectName("name")
@ -881,6 +892,8 @@ class ConfigDialog(QtGui.QDialog):
def clearGUIData(self, leaveMore=False): def clearGUIData(self, leaveMore=False):
settings = QSettings("Syncplay", "PlayerList") settings = QSettings("Syncplay", "PlayerList")
settings.clear() settings.clear()
settings = QSettings("Syncplay", "PublicServerList")
settings.clear()
settings = QSettings("Syncplay", "MediaBrowseDialog") settings = QSettings("Syncplay", "MediaBrowseDialog")
settings.clear() settings.clear()
settings = QSettings("Syncplay", "MainWindow") settings = QSettings("Syncplay", "MainWindow")
@ -902,6 +915,7 @@ class ConfigDialog(QtGui.QDialog):
self.datacleared = False self.datacleared = False
self.config['resetConfig'] = False self.config['resetConfig'] = False
self.subitems = {} self.subitems = {}
self.publicServers = None
if self.config['clearGUIData'] == True: if self.config['clearGUIData'] == True:
self.config['clearGUIData'] = False self.config['clearGUIData'] = False

View File

@ -841,7 +841,8 @@ class MainWindow(QtGui.QMainWindow):
@needsClient @needsClient
def checkForUpdates(self, userInitiated=False): def checkForUpdates(self, userInitiated=False):
self.lastCheckedForUpdates = datetime.utcnow() self.lastCheckedForUpdates = datetime.utcnow()
updateStatus, updateMessage, updateURL = self._syncplayClient.checkForUpdate(userInitiated) updateStatus, updateMessage, updateURL, self.publicServerList = self._syncplayClient.checkForUpdate(userInitiated)
if updateMessage is None: if updateMessage is None:
if updateStatus == "uptodate": if updateStatus == "uptodate":
updateMessage = getMessage("syncplay-uptodate-notification") updateMessage = getMessage("syncplay-uptodate-notification")
@ -898,6 +899,10 @@ class MainWindow(QtGui.QMainWindow):
settings.beginGroup("Update") settings.beginGroup("Update")
settings.setValue("lastChecked", self.lastCheckedForUpdates) settings.setValue("lastChecked", self.lastCheckedForUpdates)
settings.endGroup() settings.endGroup()
settings.beginGroup("PublicServerList")
if self.publicServerList:
settings.setValue("publicServers", self.publicServerList)
settings.endGroup()
def loadSettings(self): def loadSettings(self):
settings = QSettings("Syncplay", "MainWindow") settings = QSettings("Syncplay", "MainWindow")
@ -920,9 +925,14 @@ class MainWindow(QtGui.QMainWindow):
settings = QSettings("Syncplay", "Interface") settings = QSettings("Syncplay", "Interface")
settings.beginGroup("Update") settings.beginGroup("Update")
self.lastCheckedForUpdates = settings.value("lastChecked", None) self.lastCheckedForUpdates = settings.value("lastChecked", None)
settings.endGroup()
settings.beginGroup("PublicServerList")
self.publicServerList = settings.value("publicServers", None)
def __init__(self): def __init__(self):
super(MainWindow, self).__init__() super(MainWindow, self).__init__()
self.publicServerList = []
self.lastCheckedForUpdates = None
self._syncplayClient = None self._syncplayClient = None
self.folderSearchEnabled = True self.folderSearchEnabled = True
self.QtGui = QtGui self.QtGui = QtGui