diff --git a/buildPy2exe.py b/buildPy2exe.py
index 24175c1..a4e7da3 100644
--- a/buildPy2exe.py
+++ b/buildPy2exe.py
@@ -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/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/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.extend(guiIcons)
diff --git a/resources/arrow_refresh.png b/resources/arrow_refresh.png
new file mode 100644
index 0000000..0de2656
Binary files /dev/null and b/resources/arrow_refresh.png differ
diff --git a/resources/report_magnify.png b/resources/report_magnify.png
deleted file mode 100644
index aeaa889..0000000
Binary files a/resources/report_magnify.png and /dev/null differ
diff --git a/syncplay/client.py b/syncplay/client.py
index 7ac9b56..41c6acd 100644
--- a/syncplay/client.py
+++ b/syncplay/client.py
@@ -3,6 +3,7 @@ import os.path
import time
import re
import sys
+import ast
from twisted.internet.protocol import ClientFactory
from twisted.internet import reactor, task
from functools import wraps
@@ -676,9 +677,14 @@ class SyncplayClient(object):
response = f.read()
response = response.replace("
","").replace("
","").replace("
","").replace("“","\"").replace("”","\"") # Fix Wordpress
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("”","'").replace(":’","'").replace("’","'").replace("′","'").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:
- 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):
def __init__(self, player, userlist, ui, client):
diff --git a/syncplay/constants.py b/syncplay/constants.py
index 52d8977..e0abbe5 100644
--- a/syncplay/constants.py
+++ b/syncplay/constants.py
@@ -16,7 +16,7 @@ SHOW_CONTACT_INFO = True # Displays dev contact details below list in GUI
SHOW_TOOLTIPS = True
WARN_ABOUT_MISSING_STRINGS = False # (If debug mode is enabled)
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
SHOW_OSD = True # Sends Syncplay messages to media player OSD
diff --git a/syncplay/messages.py b/syncplay/messages.py
index ef0efd3..14f9afe 100755
--- a/syncplay/messages.py
+++ b/syncplay/messages.py
@@ -173,7 +173,7 @@ en = {
"media-path-label" : "Path to media file:",
"player-arguments-label" : "Player arguments (if any):",
"browse-label" : "Browse",
- "list-servers-label" : u"Find public server",
+ "update-server-list-label" : u"Update list",
"more-title" : "Show more settings",
"never-rewind-value" : "Never",
@@ -541,7 +541,7 @@ ru = {
"media-path-label" : u"Путь к видеофайлу:",
"player-arguments-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"Больше настроек",
"never-rewind-value" : u"Никогда",
@@ -909,7 +909,7 @@ de = {
"media-path-label" : u"Pfad zur Datei:",
"player-arguments-label" : u"Player arguments:", # TODO: Translate into German
"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",
"never-rewind-value" : u"Niemals",
diff --git a/syncplay/ui/GuiConfiguration.py b/syncplay/ui/GuiConfiguration.py
index 0895434..c4586c6 100644
--- a/syncplay/ui/GuiConfiguration.py
+++ b/syncplay/ui/GuiConfiguration.py
@@ -202,6 +202,13 @@ class ConfigDialog(QtGui.QDialog):
else:
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):
settings = QSettings("Syncplay", "MediaBrowseDialog")
settings.beginGroup("MediaBrowseDialog")
@@ -231,26 +238,24 @@ class ConfigDialog(QtGui.QDialog):
settings.endGroup()
- def findPublicServer(self):
+ def updateServerList(self):
try:
servers = utils.getListOfPublicServers()
except IOError as e:
self.showErrorMessage(unicode(e))
return
- dialog = QtGui.QInputDialog()
- dialog.setWindowTitle(getMessage("list-servers-label"))
- dialog.setLabelText(getMessage("public-server-msgbox-label"))
- serverTitles = []
- serverDict = {}
- for server in servers:
- serverTitle = server[0]
- serverAddress = server[1]
- serverTitles.append(serverTitle)
- serverDict[serverTitle]=serverAddress
- dialog.setComboBoxItems(serverTitles)
- ok = dialog.exec_()
- if ok:
- self.hostCombobox.setEditText(serverDict[dialog.textValue()])
+ currentServer = self.hostCombobox.currentText()
+ self.hostCombobox.clear()
+ if servers:
+ i = 0
+ for server in servers:
+ self.hostCombobox.addItem(server[1])
+ self.hostCombobox.setItemData(i, server[0], Qt.ToolTipRole)
+ i += 1
+ settings = QSettings("Syncplay", "Interface")
+ settings.beginGroup("PublicServerList")
+ settings.setValue("publicServers", servers)
+ self.hostCombobox.setEditText(currentServer)
def showErrorMessage(self, errorMessage):
QtGui.QMessageBox.warning(self, "Syncplay", errorMessage)
@@ -416,14 +421,20 @@ class ConfigDialog(QtGui.QDialog):
self.mediaSearchDirectories = self.config["mediaSearchDirectories"]
self.connectionSettingsGroup = QtGui.QGroupBox(getMessage("connection-group-title"))
+ self.loadSavedPublicServerList()
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.setEditText(host)
self.hostCombobox.setFixedWidth(165)
self.hostLabel = QLabel(getMessage("host-label"), self)
- self.findServerButton = QtGui.QPushButton(QtGui.QIcon(resourcespath + 'report_magnify.png'), getMessage("list-servers-label"))
- self.findServerButton.clicked.connect(self.findPublicServer)
+ self.findServerButton = QtGui.QPushButton(QtGui.QIcon(resourcespath + 'arrow_refresh.png'), getMessage("update-server-list-label"))
+ self.findServerButton.clicked.connect(self.updateServerList)
self.usernameTextbox = QLineEdit(self)
self.usernameTextbox.setObjectName("name")
@@ -881,6 +892,8 @@ class ConfigDialog(QtGui.QDialog):
def clearGUIData(self, leaveMore=False):
settings = QSettings("Syncplay", "PlayerList")
settings.clear()
+ settings = QSettings("Syncplay", "PublicServerList")
+ settings.clear()
settings = QSettings("Syncplay", "MediaBrowseDialog")
settings.clear()
settings = QSettings("Syncplay", "MainWindow")
@@ -902,6 +915,7 @@ class ConfigDialog(QtGui.QDialog):
self.datacleared = False
self.config['resetConfig'] = False
self.subitems = {}
+ self.publicServers = None
if self.config['clearGUIData'] == True:
self.config['clearGUIData'] = False
diff --git a/syncplay/ui/gui.py b/syncplay/ui/gui.py
index cc001fd..23f43da 100644
--- a/syncplay/ui/gui.py
+++ b/syncplay/ui/gui.py
@@ -841,7 +841,8 @@ class MainWindow(QtGui.QMainWindow):
@needsClient
def checkForUpdates(self, userInitiated=False):
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 updateStatus == "uptodate":
updateMessage = getMessage("syncplay-uptodate-notification")
@@ -898,6 +899,10 @@ class MainWindow(QtGui.QMainWindow):
settings.beginGroup("Update")
settings.setValue("lastChecked", self.lastCheckedForUpdates)
settings.endGroup()
+ settings.beginGroup("PublicServerList")
+ if self.publicServerList:
+ settings.setValue("publicServers", self.publicServerList)
+ settings.endGroup()
def loadSettings(self):
settings = QSettings("Syncplay", "MainWindow")
@@ -920,9 +925,14 @@ class MainWindow(QtGui.QMainWindow):
settings = QSettings("Syncplay", "Interface")
settings.beginGroup("Update")
self.lastCheckedForUpdates = settings.value("lastChecked", None)
+ settings.endGroup()
+ settings.beginGroup("PublicServerList")
+ self.publicServerList = settings.value("publicServers", None)
def __init__(self):
super(MainWindow, self).__init__()
+ self.publicServerList = []
+ self.lastCheckedForUpdates = None
self._syncplayClient = None
self.folderSearchEnabled = True
self.QtGui = QtGui