From 950583853119a1b622c359b42fefd9daf3be8acf Mon Sep 17 00:00:00 2001 From: Et0h Date: Wed, 18 Jun 2014 17:56:35 +0100 Subject: [PATCH] Default 'Auto' mode for slowdown on desync --- syncplay/client.py | 5 ++- syncplay/constants.py | 3 ++ syncplay/messages.py | 8 +++- syncplay/players/mpc.py | 1 + syncplay/players/mplayer.py | 1 + syncplay/players/vlc.py | 1 + syncplay/ui/ConfigurationGetter.py | 5 +-- syncplay/ui/GuiConfiguration.py | 67 ++++++++++++++++++------------ 8 files changed, 59 insertions(+), 32 deletions(-) diff --git a/syncplay/client.py b/syncplay/client.py index 7334d9e..c158eb0 100644 --- a/syncplay/client.py +++ b/syncplay/client.py @@ -228,8 +228,9 @@ class SyncplayClient(object): madeChangeOnPlayer = self._serverSeeked(position, setBy) if (diff > constants.REWIND_THRESHOLD and not doSeek and not self._config['rewindOnDesync'] == False): madeChangeOnPlayer = self._rewindPlayerDueToTimeDifference(position, setBy) - if (self._player.speedSupported and not doSeek and not paused and not self._config['slowOnDesync'] == False): - madeChangeOnPlayer = self._slowDownToCoverTimeDifference(diff, setBy) + if (self._player.speedSupported and not doSeek and not paused): + if (self._config['slowMeOnDesync'] == constants.OPTION_ALWAYS or (self._config['slowMeOnDesync'] == constants.OPTION_AUTO and self._player.speedRecommended)): + madeChangeOnPlayer = self._slowDownToCoverTimeDifference(diff, setBy) if (paused == False and pauseChanged): madeChangeOnPlayer = self._serverUnpaused(setBy) elif (paused == True and pauseChanged): diff --git a/syncplay/constants.py b/syncplay/constants.py index 7a0d18f..87cb7c9 100644 --- a/syncplay/constants.py +++ b/syncplay/constants.py @@ -100,3 +100,6 @@ PRIVACY_SENDRAW_MODE = "SendRaw" PRIVACY_SENDHASHED_MODE = "SendHashed" PRIVACY_DONTSEND_MODE = "DoNotSend" PRIVACY_HIDDENFILENAME = "**Hidden filename**" +OPTION_AUTO = "Automatic" +OPTION_ALWAYS= "Always" +OPTION_NEVER = "Never" diff --git a/syncplay/messages.py b/syncplay/messages.py index 2a0b9a2..7bfb61c 100644 --- a/syncplay/messages.py +++ b/syncplay/messages.py @@ -123,7 +123,10 @@ en = { "privacy-dontsend-option" : "Don't send", "filename-privacy-label" : "Filename information:", "filesize-privacy-label" : "File size information:", - "slowdown-label" : "Slow down on desync", + "slowdown-label" : "Slow down on desync:", + "slowdown-auto-option" : "Automatic", + "slowdown-always-option" : "Always", + "slowdown-never-option" : "Never", "dontslowwithme-label" : "Never slow down or rewind others", "pauseonleave-label" : "Pause when user leaves", "rewind-label" : "Rewind on major desync (highly recommended)", @@ -181,6 +184,9 @@ 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.", "slowdown-tooltip" : "Reduce playback rate temporarily when needed to bring you back in sync with other viewers.", + "slowdown-auto-tooltip" : "Slow down on desync unless it causes problems (i.e. MPC-HC).", + "slowdown-always-tooltip" : "Always slow down on desync (even on players where this causes playback issues).", + "slowdown-never-tooltip" : "Never slow down on desync (even on players where this is probably better than rewinding).", "dontslowwithme-tooltip" : "Means others do not get slowed down or rewinded if your playback is lagging.", "pauseonleave-tooltip" : "Pause playback if you get disconnected or someone leaves from your room.", "rewind-tooltip" : "Jump back when needed to get back in sync. Recommended.", diff --git a/syncplay/players/mpc.py b/syncplay/players/mpc.py index 21355b1..796737d 100644 --- a/syncplay/players/mpc.py +++ b/syncplay/players/mpc.py @@ -306,6 +306,7 @@ class MpcHcApi: class MPCHCAPIPlayer(BasePlayer): speedSupported = False + speedRecommended = False def __init__(self, client): from twisted.internet import reactor diff --git a/syncplay/players/mplayer.py b/syncplay/players/mplayer.py index c3c289d..b1f85a5 100644 --- a/syncplay/players/mplayer.py +++ b/syncplay/players/mplayer.py @@ -8,6 +8,7 @@ import os class MplayerPlayer(BasePlayer): speedSupported = True + speedRecommended = True RE_ANSWER = re.compile(constants.MPLAYER_ANSWER_REGEX) SLAVE_ARGS = constants.MPLAYER_SLAVE_ARGS POSITION_QUERY = 'time_pos' diff --git a/syncplay/players/vlc.py b/syncplay/players/vlc.py index f8196fb..9282bd3 100644 --- a/syncplay/players/vlc.py +++ b/syncplay/players/vlc.py @@ -14,6 +14,7 @@ import time class VlcPlayer(BasePlayer): speedSupported = True + speedRecommended = True RE_ANSWER = re.compile(constants.VLC_ANSWER_REGEX) SLAVE_ARGS = constants.VLC_SLAVE_ARGS if not sys.platform.startswith('darwin'): diff --git a/syncplay/ui/ConfigurationGetter.py b/syncplay/ui/ConfigurationGetter.py index 66c987a..ffb20fd 100644 --- a/syncplay/ui/ConfigurationGetter.py +++ b/syncplay/ui/ConfigurationGetter.py @@ -33,7 +33,7 @@ class ConfigurationGetter(object): "file": None, "playerArgs": [], "playerClass": None, - "slowOnDesync": True, + "slowMeOnDesync": constants.OPTION_AUTO, "dontSlowDownWithMe": False, "rewindOnDesync": True, "filenamePrivacyMode": constants.PRIVACY_SENDRAW_MODE, @@ -58,7 +58,6 @@ class ConfigurationGetter(object): "forceGuiPrompt", "noGui", "noStore", - "slowOnDesync", "dontSlowDownWithMe", "pauseOnLeave", "rewindOnDesync", @@ -67,7 +66,7 @@ class ConfigurationGetter(object): self._iniStructure = { "server_data": ["host", "port", "password"], - "client_settings": ["name", "room", "playerPath", "slowOnDesync", "dontSlowDownWithMe", "rewindOnDesync", "forceGuiPrompt", "filenamePrivacyMode", "filesizePrivacyMode", "pauseOnLeave"], + "client_settings": ["name", "room", "playerPath", "slowMeOnDesync", "dontSlowDownWithMe", "rewindOnDesync", "forceGuiPrompt", "filenamePrivacyMode", "filesizePrivacyMode", "pauseOnLeave"], } # diff --git a/syncplay/ui/GuiConfiguration.py b/syncplay/ui/GuiConfiguration.py index 77e52e5..bd9741e 100644 --- a/syncplay/ui/GuiConfiguration.py +++ b/syncplay/ui/GuiConfiguration.py @@ -197,10 +197,6 @@ class ConfigDialog(QtGui.QDialog): self.config['noStore'] = True else: self.config['noStore'] = False - if self.slowdownCheckbox.isChecked() == True: - self.config['slowOnDesync'] = True - else: - self.config['slowOnDesync'] = False if self.dontslowwithmeCheckbox.isChecked() == True: self.config['dontSlowDownWithMe'] = True else: @@ -224,12 +220,12 @@ class ConfigDialog(QtGui.QDialog): elif self.filenameprivacyDontSendOption.isChecked() == True: self.config['filenamePrivacyMode'] = constants.PRIVACY_DONTSEND_MODE - if self.filesizeprivacySendRawOption.isChecked() == True: - self.config['filesizePrivacyMode'] = constants.PRIVACY_SENDRAW_MODE - elif self.filesizeprivacySendHashedOption.isChecked() == True: - self.config['filesizePrivacyMode'] = constants.PRIVACY_SENDHASHED_MODE - elif self.filesizeprivacyDontSendOption.isChecked() == True: - self.config['filesizePrivacyMode'] = constants.PRIVACY_DONTSEND_MODE + if self.slowdownAutoOption.isChecked() == True: + self.config['slowMeOnDesync'] = constants.OPTION_AUTO + elif self.slowdownAlwaysOption.isChecked() == True: + self.config['slowMeOnDesync'] = constants.OPTION_ALWAYS + elif self.slowdownNeverOption.isChecked() == True: + self.config['slowMeOnDesync'] = constants.OPTION_NEVER self.pressedclosebutton = True self.close() @@ -386,7 +382,15 @@ class ConfigDialog(QtGui.QDialog): self.filesizeprivacyButtonGroup.addButton(self.filesizeprivacySendHashedOption) self.filesizeprivacyButtonGroup.addButton(self.filesizeprivacyDontSendOption) - self.slowdownCheckbox = QCheckBox(getMessage("en", "slowdown-label")) + self.slowdownLabel = QLabel(getMessage("en", "slowdown-label"), self) + self.slowdownButtonGroup = QButtonGroup() + self.slowdownAutoOption = QRadioButton(getMessage("en", "slowdown-auto-option")) + self.slowdownAlwaysOption = QRadioButton(getMessage("en", "slowdown-always-option")) + self.slowdownNeverOption = QRadioButton(getMessage("en", "slowdown-never-option")) + self.slowdownButtonGroup.addButton(self.slowdownAutoOption) + self.slowdownButtonGroup.addButton(self.slowdownAlwaysOption) + self.slowdownButtonGroup.addButton(self.slowdownNeverOption) + self.dontslowwithmeCheckbox = QCheckBox(getMessage("en", "dontslowwithme-label")) self.pauseonleaveCheckbox = QCheckBox(getMessage("en", "pauseonleave-label")) self.alwaysshowCheckbox = QCheckBox(getMessage("en", "alwayshow-label")) @@ -408,12 +412,7 @@ class ConfigDialog(QtGui.QDialog): else: self.filesizeprivacySendRawOption.setChecked(True) - if config['slowOnDesync'] == True: - self.slowdownCheckbox.setChecked(True) - if config['dontSlowDownWithMe'] == True: - self.dontslowwithmeCheckbox.setChecked(True) - - if constants.SHOW_REWIND_ON_DESYNC_CHECKBOX == True and config['rewindOnDesync'] == True: + if constants.SHOW_REWIND_ON_DESYNC_CHECKBOX == True and config['slowMeOnDesync'] == True: self.rewindCheckbox.setChecked(True) if config['pauseOnLeave'] == True: self.pauseonleaveCheckbox.setChecked(True) @@ -427,12 +426,25 @@ class ConfigDialog(QtGui.QDialog): self.filesizeprivacySendHashedOption.setToolTip(getMessage("en", "privacy-sendhashed-tooltip")) self.filesizeprivacyDontSendOption.setToolTip(getMessage("en", "privacy-dontsend-tooltip")) - self.slowdownCheckbox.setToolTip(getMessage("en", "slowdown-tooltip")) + slowdownMode = config['slowMeOnDesync'] + if slowdownMode == constants.OPTION_ALWAYS: + self.slowdownAlwaysOption.setChecked(True) + elif slowdownMode == constants.OPTION_NEVER: + self.slowdownNeverOption.setChecked(True) + else: + self.slowdownAutoOption.setChecked(True) + if config['dontSlowDownWithMe'] == True: + self.dontslowwithmeCheckbox.setChecked(True) + + self.slowdownLabel.setToolTip(getMessage("en", "slowdown-tooltip")) + self.slowdownAutoOption.setToolTip(getMessage("en", "slowdown-auto-tooltip")) + self.slowdownAlwaysOption.setToolTip(getMessage("en", "slowdown-always-tooltip")) + self.slowdownNeverOption.setToolTip(getMessage("en", "slowdown-never-tooltip")) + self.dontslowwithmeCheckbox.setToolTip(getMessage("en", "dontslowwithme-tooltip")) self.pauseonleaveCheckbox.setToolTip(getMessage("en", "pauseonleave-tooltip")) self.alwaysshowCheckbox.setToolTip(getMessage("en", "alwayshow-tooltip")) self.donotstoreCheckbox.setToolTip(getMessage("en", "donotstore-tooltip")) - self.slowdownCheckbox.setToolTip(getMessage("en", "slowdown-tooltip")) self.moreSettingsLayout = QtGui.QGridLayout() @@ -442,18 +454,21 @@ class ConfigDialog(QtGui.QDialog): self.privacyFrame.setMidLineWidth(0) self.privacySettingsLayout.setContentsMargins(0, 0, 0, 0) self.privacySettingsLayout.addWidget(self.filenameprivacyLabel, 0, 0) - self.privacySettingsLayout.addWidget(self.filenameprivacySendRawOption, 0, 1, Qt.AlignRight) - self.privacySettingsLayout.addWidget(self.filenameprivacySendHashedOption, 0, 2, Qt.AlignRight) - self.privacySettingsLayout.addWidget(self.filenameprivacyDontSendOption, 0, 3, Qt.AlignRight) + self.privacySettingsLayout.addWidget(self.filenameprivacySendRawOption, 0, 1, Qt.AlignLeft) + self.privacySettingsLayout.addWidget(self.filenameprivacySendHashedOption, 0, 2, Qt.AlignLeft) + self.privacySettingsLayout.addWidget(self.filenameprivacyDontSendOption, 0, 3, Qt.AlignLeft) self.privacySettingsLayout.addWidget(self.filesizeprivacyLabel, 1, 0) - self.privacySettingsLayout.addWidget(self.filesizeprivacySendRawOption, 1, 1, Qt.AlignRight) - self.privacySettingsLayout.addWidget(self.filesizeprivacySendHashedOption, 1, 2, Qt.AlignRight) - self.privacySettingsLayout.addWidget(self.filesizeprivacyDontSendOption, 1, 3, Qt.AlignRight) + self.privacySettingsLayout.addWidget(self.filesizeprivacySendRawOption, 1, 1, Qt.AlignLeft) + self.privacySettingsLayout.addWidget(self.filesizeprivacySendHashedOption, 1, 2, Qt.AlignLeft) + self.privacySettingsLayout.addWidget(self.filesizeprivacyDontSendOption, 1, 3, Qt.AlignLeft) + self.privacySettingsLayout.addWidget(self.slowdownLabel, 2, 0) + self.privacySettingsLayout.addWidget(self.slowdownAutoOption, 2, 1, Qt.AlignLeft) + self.privacySettingsLayout.addWidget(self.slowdownAlwaysOption, 2, 2, Qt.AlignLeft) + self.privacySettingsLayout.addWidget(self.slowdownNeverOption, 2, 3, Qt.AlignLeft) self.privacyFrame.setLayout(self.privacySettingsLayout) self.moreSettingsLayout.addWidget(self.privacyFrame, 0, 0, 1, 4) - self.moreSettingsLayout.addWidget(self.slowdownCheckbox, 2, 0, 1, 4) if constants.SHOW_REWIND_ON_DESYNC_CHECKBOX == True: self.moreSettingsLayout.addWidget(self.rewindCheckbox, 3, 0, 1, 4) self.moreSettingsLayout.addWidget(self.dontslowwithmeCheckbox, 4, 0, 1, 2)