diff --git a/syncplay/client.py b/syncplay/client.py index 907d243..11f05b2 100644 --- a/syncplay/client.py +++ b/syncplay/client.py @@ -164,7 +164,7 @@ class SyncplayClient(object): if lastPausedDiff is not None and lastPausedDiff < constants.LAST_PAUSED_DIFF_THRESHOLD: self.lastPausedOnLeaveTime = None else: - self.changeReadyState(not self.getPlayerPaused()) + self.changeReadyState(not self.getPlayerPaused(), manuallyInitiated=False) if self._lastGlobalUpdate: self._lastPlayerUpdate = time.time() if (pauseChange or seeked) and self._protocol: @@ -410,10 +410,8 @@ class SyncplayClient(object): self.identifyAsController(storedRoomPassword) def connected(self): - if self.userlist.currentUser.isReady() is not None: - self._protocol.setReady(self.userlist.currentUser.isReady()) - else: - self._protocol.setReady(self._config['readyAtStart']) + readyState = self._config['readyAtStart'] if self.userlist.currentUser.isReady() is None else self.userlist.currentUser.isReady() + self._protocol.setReady(readyState, manuallyInitiated=False) self.reIdentifyAsController() def getRoom(self): @@ -483,22 +481,22 @@ class SyncplayClient(object): return requireMinVersionDecorator @requireMinServerVersion(constants.USER_READY_MIN_VERSION) - def toggleReady(self): - self._protocol.setReady(not self.userlist.currentUser.isReady()) + def toggleReady(self, manuallyInitiated=True): + self._protocol.setReady(not self.userlist.currentUser.isReady(), manuallyInitiated) @requireMinServerVersion(constants.USER_READY_MIN_VERSION) - def changeReadyState(self, newState): + def changeReadyState(self, newState, manuallyInitiated=True): oldState = self.userlist.currentUser.isReady() if newState != oldState: - self.toggleReady() + self.toggleReady(manuallyInitiated) - def setReady(self, username, isReady): + def setReady(self, username, isReady, manuallyInitiated=True): oldReadyState = self.userlist.isReady(username) if oldReadyState is None: oldReadyState = False self.userlist.setReady(username, isReady) self.ui.userListChange() - if oldReadyState != isReady: + if manuallyInitiated and oldReadyState != isReady: showOnOSD = constants.SHOW_OSD_WARNINGS if constants.SHOW_NONCONTROLLER_OSD == False and self.userlist.canControl(username) == False and self.userlist.currentUser.isController() == False: # Ignore SHOW_NONCONTROLLER_OSD setting if user is controller, because they need to know who is/isn't ready diff --git a/syncplay/protocols.py b/syncplay/protocols.py index cd1ead6..a91d429 100644 --- a/syncplay/protocols.py +++ b/syncplay/protocols.py @@ -138,7 +138,8 @@ class SyncClientProtocol(JSONCommandProtocol): self._client.controlledRoomCreated(roomName, controlPassword) elif command == "ready": user, isReady = values["username"], values["isReady"] - self._client.setReady(user, isReady) + manuallyInitiated = values["manuallyInitiated"] if values.has_key("manuallyInitiated") else True + self._client.setReady(user, isReady, manuallyInitiated) def sendSet(self, setting): self.sendMessage({"Set": setting}) @@ -238,10 +239,11 @@ class SyncClientProtocol(JSONCommandProtocol): } }) - def setReady(self, isReady): + def setReady(self, isReady, manuallyInitiated=True): self.sendSet({ "ready": { - "isReady": isReady + "isReady": isReady, + "manuallyInitiated": manuallyInitiated } }) @@ -354,7 +356,8 @@ class SyncServerProtocol(JSONCommandProtocol): room = set_[1]["room"] if set_[1].has_key("room") else None self._factory.authRoomController(self._watcher, password, room) elif command == "ready": - self._factory.setReady(self._watcher, set_[1]['isReady']) + manuallyInitiated = set_[1]['manuallyInitiated'] if set_[1].has_key("manuallyInitiated") else False + self._factory.setReady(self._watcher, set_[1]['isReady'], manuallyInitiated=manuallyInitiated) def sendSet(self, setting): self.sendMessage({"Set": setting}) @@ -377,11 +380,12 @@ class SyncServerProtocol(JSONCommandProtocol): }) - def sendSetReady(self, username, isReady): + def sendSetReady(self, username, isReady, manuallyInitiated=True): self.sendSet({ "ready": { "username": username, - "isReady": isReady + "isReady": isReady, + "manuallyInitiated": manuallyInitiated } }) diff --git a/syncplay/server.py b/syncplay/server.py index 6e61ef9..f2bded0 100644 --- a/syncplay/server.py +++ b/syncplay/server.py @@ -125,9 +125,9 @@ class SyncFactory(Factory): except ValueError: self._roomManager.broadcastRoom(watcher, lambda w: w.sendControlledRoomAuthStatus(False, watcher.getName(), room._name)) - def setReady(self, watcher, isReady): + def setReady(self, watcher, isReady, manuallyInitiated=True): watcher.setReady(isReady) - self._roomManager.broadcastRoom(watcher, lambda w: w.sendSetReady(watcher.getName(), isReady)) + self._roomManager.broadcastRoom(watcher, lambda w: w.sendSetReady(watcher.getName(), isReady, manuallyInitiated)) class RoomManager(object): def __init__(self): @@ -362,8 +362,8 @@ class Watcher(object): def sendControlledRoomAuthStatus(self, success, username, room): self._connector.sendControlledRoomAuthStatus(success, username, room) - def sendSetReady(self, username, isReady): - self._connector.sendSetReady(username, isReady) + def sendSetReady(self, username, isReady, manuallyInitiated=True): + self._connector.sendSetReady(username, isReady, manuallyInitiated) def __lt__(self, b): if self.getPosition() is None or self._file is None: