Autoplay countdown (+reduce autoplayCheck frequency)
This commit is contained in:
parent
279eb1bffb
commit
19a22b9105
@ -107,6 +107,9 @@ class SyncplayClient(object):
|
|||||||
self.autoPlay = False
|
self.autoPlay = False
|
||||||
self.autoPlayThreshold = None
|
self.autoPlayThreshold = None
|
||||||
|
|
||||||
|
self.autoplayTimer = task.LoopingCall(self.autoplayCountdown)
|
||||||
|
self.autoplayTimeLeft = constants.AUTOPLAY_DELAY
|
||||||
|
|
||||||
self._warnings = self._WarningManager(self._player, self.userlist, self.ui, self)
|
self._warnings = self._WarningManager(self._player, self.userlist, self.ui, self)
|
||||||
if constants.LIST_RELATIVE_CONFIGS and self._config.has_key('loadedRelativePaths') and self._config['loadedRelativePaths']:
|
if constants.LIST_RELATIVE_CONFIGS and self._config.has_key('loadedRelativePaths') and self._config['loadedRelativePaths']:
|
||||||
paths = "; ".join(self._config['loadedRelativePaths'])
|
paths = "; ".join(self._config['loadedRelativePaths'])
|
||||||
@ -498,16 +501,50 @@ class SyncplayClient(object):
|
|||||||
self.autoplayCheck()
|
self.autoplayCheck()
|
||||||
|
|
||||||
def changeAutoPlayThrehsold(self, newThreshold):
|
def changeAutoPlayThrehsold(self, newThreshold):
|
||||||
|
oldAutoplayConditionsMet = self.autoplayConditionsMet()
|
||||||
self.autoPlayThreshold = newThreshold
|
self.autoPlayThreshold = newThreshold
|
||||||
self.autoplayCheck()
|
newAutoplayConditionsMet = self.autoplayConditionsMet()
|
||||||
|
if oldAutoplayConditionsMet == False and newAutoplayConditionsMet == True:
|
||||||
|
self.autoplayCheck()
|
||||||
|
|
||||||
def autoplayCheck(self):
|
def autoplayCheck(self):
|
||||||
if self.autoPlay and self.userlist.currentUser.canControl() and self.userlist.isReadinessSupported() and self.userlist.areAllUsersInRoomReady() and self.autoPlayThreshold and self.userlist.usersInRoomCount() >= self.autoPlayThreshold:
|
if self.autoplayConditionsMet():
|
||||||
|
self.startAutoplayCountdown()
|
||||||
|
else:
|
||||||
|
self.stopAutoplayCountdown()
|
||||||
|
|
||||||
|
def autoplayConditionsMet(self):
|
||||||
|
return self._playerPaused and self.autoPlay and self.userlist.currentUser.canControl() and self.userlist.isReadinessSupported() and self.userlist.areAllUsersInRoomReady() and self.autoPlayThreshold and self.userlist.usersInRoomCount() >= self.autoPlayThreshold
|
||||||
|
|
||||||
|
def autoplayTimerIsRunning(self):
|
||||||
|
return self.autoplayTimer.running
|
||||||
|
|
||||||
|
def startAutoplayCountdown(self):
|
||||||
|
if self.autoplayConditionsMet() and not self.autoplayTimer.running:
|
||||||
|
self.autoplayTimeLeft = constants.AUTOPLAY_DELAY
|
||||||
|
self.autoplayTimer.start(1)
|
||||||
|
|
||||||
|
def stopAutoplayCountdown(self):
|
||||||
|
if self.autoplayTimer.running:
|
||||||
|
self.autoplayTimer.stop()
|
||||||
|
self.autoplayTimeLeft = constants.AUTOPLAY_DELAY
|
||||||
|
|
||||||
|
def autoplayCountdown(self):
|
||||||
|
if not self.autoplayConditionsMet():
|
||||||
|
self.stopAutoplayCountdown()
|
||||||
|
return
|
||||||
|
countdownMessage = u"{}{}{}".format(getMessage("all-users-ready").format(self.userlist.readyUserCount()),self._player.osdMessageSeparator, getMessage("autoplaying-notification").format(int(self.autoplayTimeLeft)))
|
||||||
|
self.ui.showOSDMessage(countdownMessage, 1, secondaryOSD=True)
|
||||||
|
if self.autoplayTimeLeft <= 0:
|
||||||
self.setPaused(False)
|
self.setPaused(False)
|
||||||
|
self.stopAutoplayCountdown()
|
||||||
|
else:
|
||||||
|
self.autoplayTimeLeft -= 1
|
||||||
|
|
||||||
def resetAutoPlayState(self):
|
def resetAutoPlayState(self):
|
||||||
self.autoPlay = False
|
self.autoPlay = False
|
||||||
self.ui.updateAutoPlayState(False)
|
self.ui.updateAutoPlayState(False)
|
||||||
|
self.stopAutoplayCountdown()
|
||||||
|
|
||||||
@requireMinServerVersion(constants.USER_READY_MIN_VERSION)
|
@requireMinServerVersion(constants.USER_READY_MIN_VERSION)
|
||||||
def toggleReady(self, manuallyInitiated=True):
|
def toggleReady(self, manuallyInitiated=True):
|
||||||
@ -616,6 +653,8 @@ class SyncplayClient(object):
|
|||||||
self.pausedTimer.start(constants.WARNING_OSD_MESSAGES_LOOP_INTERVAL, True)
|
self.pausedTimer.start(constants.WARNING_OSD_MESSAGES_LOOP_INTERVAL, True)
|
||||||
|
|
||||||
def checkWarnings(self):
|
def checkWarnings(self):
|
||||||
|
if self._client.autoplayConditionsMet():
|
||||||
|
return
|
||||||
self._checkIfYouReAloneInTheRoom(OSDOnly=False)
|
self._checkIfYouReAloneInTheRoom(OSDOnly=False)
|
||||||
self._checkRoomForSameFiles(OSDOnly=False)
|
self._checkRoomForSameFiles(OSDOnly=False)
|
||||||
self.checkReadyStates()
|
self.checkReadyStates()
|
||||||
@ -660,7 +699,7 @@ class SyncplayClient(object):
|
|||||||
self._displayReadySameWarning()
|
self._displayReadySameWarning()
|
||||||
|
|
||||||
def _displayReadySameWarning(self):
|
def _displayReadySameWarning(self):
|
||||||
if not self._client._player:
|
if not self._client._player or self._client.autoplayTimerIsRunning():
|
||||||
return
|
return
|
||||||
osdMessage = None
|
osdMessage = None
|
||||||
fileDifferencesForRoom = self._userlist.getFileDifferencesForRoom()
|
fileDifferencesForRoom = self._userlist.getFileDifferencesForRoom()
|
||||||
@ -693,6 +732,8 @@ class SyncplayClient(object):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def __displayPausedMessagesOnOSD(self):
|
def __displayPausedMessagesOnOSD(self):
|
||||||
|
if self._client.autoplayConditionsMet():
|
||||||
|
return
|
||||||
if self._client and self._client._player and self._client.getPlayerPaused():
|
if self._client and self._client._player and self._client.getPlayerPaused():
|
||||||
self._checkRoomForSameFiles(OSDOnly=True)
|
self._checkRoomForSameFiles(OSDOnly=True)
|
||||||
self.checkReadyStates()
|
self.checkReadyStates()
|
||||||
@ -1055,7 +1096,8 @@ class UiManager(object):
|
|||||||
self.__ui.showUserList(currentUser, rooms)
|
self.__ui.showUserList(currentUser, rooms)
|
||||||
|
|
||||||
def showOSDMessage(self, message, duration=constants.OSD_DURATION, secondaryOSD=False):
|
def showOSDMessage(self, message, duration=constants.OSD_DURATION, secondaryOSD=False):
|
||||||
if secondaryOSD and not constants.SHOW_OSD_WARNINGS:
|
autoplayConditionsMet = self._client.autoplayConditionsMet()
|
||||||
|
if secondaryOSD and not constants.SHOW_OSD_WARNINGS and not self._client.autoplayTimerIsRunning():
|
||||||
return
|
return
|
||||||
if not self._client._player:
|
if not self._client._player:
|
||||||
return
|
return
|
||||||
@ -1063,7 +1105,10 @@ class UiManager(object):
|
|||||||
if not self._client._player.secondaryOSDSupported:
|
if not self._client._player.secondaryOSDSupported:
|
||||||
if secondaryOSD:
|
if secondaryOSD:
|
||||||
self.lastSecondaryOSDMessage = message
|
self.lastSecondaryOSDMessage = message
|
||||||
self.lastSecondaryOSDEndTime = time.time() + constants.NO_SECONDARY_OSD_WARNING_DURATION
|
if autoplayConditionsMet:
|
||||||
|
self.lastSecondaryOSDEndTime = time.time() + 1.0
|
||||||
|
else:
|
||||||
|
self.lastSecondaryOSDEndTime = time.time() + constants.NO_SECONDARY_OSD_WARNING_DURATION
|
||||||
if self.lastPrimaryOSDEndTime and time.time() < self.lastPrimaryOSDEndTime:
|
if self.lastPrimaryOSDEndTime and time.time() < self.lastPrimaryOSDEndTime:
|
||||||
message = u"{}{}{}".format(message, self._client._player.osdMessageSeparator, self.lastPrimaryOSDMessage)
|
message = u"{}{}{}".format(message, self._client._player.osdMessageSeparator, self.lastPrimaryOSDMessage)
|
||||||
else:
|
else:
|
||||||
@ -1071,7 +1116,7 @@ class UiManager(object):
|
|||||||
self.lastPrimaryOSDEndTime = time.time() + constants.OSD_DURATION
|
self.lastPrimaryOSDEndTime = time.time() + constants.OSD_DURATION
|
||||||
if self.lastSecondaryOSDEndTime and time.time() < self.lastSecondaryOSDEndTime:
|
if self.lastSecondaryOSDEndTime and time.time() < self.lastSecondaryOSDEndTime:
|
||||||
message = u"{}{}{}".format(self.lastSecondaryOSDMessage, self._client._player.osdMessageSeparator, message)
|
message = u"{}{}{}".format(self.lastSecondaryOSDMessage, self._client._player.osdMessageSeparator, message)
|
||||||
self._client._player.displayMessage(message, duration * 1000, secondaryOSD)
|
self._client._player.displayMessage(message, int(duration * 1000), secondaryOSD)
|
||||||
|
|
||||||
def setControllerStatus(self, username, isController):
|
def setControllerStatus(self, username, isController):
|
||||||
self.__ui.setControllerStatus(username, isController)
|
self.__ui.setControllerStatus(username, isController)
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
# You might want to change these
|
# You might want to change these
|
||||||
DEFAULT_PORT = 8999
|
DEFAULT_PORT = 8999
|
||||||
OSD_DURATION = 3
|
OSD_DURATION = 3.0
|
||||||
OSD_WARNING_MESSAGE_DURATION = 5
|
OSD_WARNING_MESSAGE_DURATION = 5.0
|
||||||
NO_SECONDARY_OSD_WARNING_DURATION = 13
|
NO_SECONDARY_OSD_WARNING_DURATION = 13.0
|
||||||
MPC_OSD_POSITION = 1 #Right corner, 1 for left
|
MPC_OSD_POSITION = 1 #Right corner, 1 for left
|
||||||
MPLAYER_OSD_LEVEL = 1
|
MPLAYER_OSD_LEVEL = 1
|
||||||
UI_TIME_FORMAT = "[%X] "
|
UI_TIME_FORMAT = "[%X] "
|
||||||
@ -34,7 +34,7 @@ MINIMUM_REWIND_THRESHOLD = 3
|
|||||||
DEFAULT_FASTFORWARD_THRESHOLD = 5
|
DEFAULT_FASTFORWARD_THRESHOLD = 5
|
||||||
MINIMUM_FASTFORWARD_THRESHOLD = 4
|
MINIMUM_FASTFORWARD_THRESHOLD = 4
|
||||||
FASTFORWARD_EXTRA_TIME = 0.25
|
FASTFORWARD_EXTRA_TIME = 0.25
|
||||||
FASTFORWARD_RESET_THRESHOLD = 3
|
FASTFORWARD_RESET_THRESHOLD = 3.0
|
||||||
FASTFORWARD_BEHIND_THRESHOLD = 1.75
|
FASTFORWARD_BEHIND_THRESHOLD = 1.75
|
||||||
SEEK_THRESHOLD = 1
|
SEEK_THRESHOLD = 1
|
||||||
SLOWDOWN_RATE = 0.95
|
SLOWDOWN_RATE = 0.95
|
||||||
@ -46,6 +46,7 @@ PROTOCOL_TIMEOUT = 12.5
|
|||||||
RECONNECT_RETRIES = 10
|
RECONNECT_RETRIES = 10
|
||||||
SERVER_STATE_INTERVAL = 1
|
SERVER_STATE_INTERVAL = 1
|
||||||
WARNING_OSD_MESSAGES_LOOP_INTERVAL = 1
|
WARNING_OSD_MESSAGES_LOOP_INTERVAL = 1
|
||||||
|
AUTOPLAY_DELAY = 3.0
|
||||||
SYNC_ON_PAUSE = True # Client seek to global position - subtitles may disappear on some media players
|
SYNC_ON_PAUSE = True # Client seek to global position - subtitles may disappear on some media players
|
||||||
#Usually there's no need to adjust these
|
#Usually there's no need to adjust these
|
||||||
LAST_PAUSED_DIFF_THRESHOLD = 2
|
LAST_PAUSED_DIFF_THRESHOLD = 2
|
||||||
|
|||||||
@ -36,6 +36,7 @@ en = {
|
|||||||
"not-all-ready" : u"Not ready: {}", # Usernames
|
"not-all-ready" : u"Not ready: {}", # Usernames
|
||||||
"all-users-ready" : u"Everyone is ready ({} users)", #Number of ready users
|
"all-users-ready" : u"Everyone is ready ({} users)", #Number of ready users
|
||||||
"ready-to-unpause-notification" : u"You are now set as ready - unpause again to unpause",
|
"ready-to-unpause-notification" : u"You are now set as ready - unpause again to unpause",
|
||||||
|
"autoplaying-notification" : u"Auto-playing in {}...",
|
||||||
|
|
||||||
"identifying-as-controller-notification" : u"Identifying as room operator with password '{}'...",
|
"identifying-as-controller-notification" : u"Identifying as room operator with password '{}'...",
|
||||||
"failed-to-identify-as-controller-notification" : u"<{}> failed to identify as a room operator.",
|
"failed-to-identify-as-controller-notification" : u"<{}> failed to identify as a room operator.",
|
||||||
@ -381,6 +382,7 @@ ru = {
|
|||||||
"not-all-ready" : u"Not ready: {}", # Usernames # TODO: Translate into Russian
|
"not-all-ready" : u"Not ready: {}", # Usernames # TODO: Translate into Russian
|
||||||
"all-users-ready" : u"Everyone is ready ({} users)", #Number of ready users # TODO: Translate into Russian
|
"all-users-ready" : u"Everyone is ready ({} users)", #Number of ready users # TODO: Translate into Russian
|
||||||
"ready-to-unpause-notification" : u"You are now set as ready - unpause again to unpause", # TODO: Translate into Russian
|
"ready-to-unpause-notification" : u"You are now set as ready - unpause again to unpause", # TODO: Translate into Russian
|
||||||
|
"autoplaying-notification" : u"Auto-playing in {}...", # TODO: Translate into Russian
|
||||||
|
|
||||||
"identifying-as-controller-notification" : u"Identifying as room operator with password '{}'...", # TODO: Translate into Russian
|
"identifying-as-controller-notification" : u"Identifying as room operator with password '{}'...", # TODO: Translate into Russian
|
||||||
"failed-to-identify-as-controller-notification" : u"<{}> failed to identify as a room operator.", # TODO: Translate into Russian
|
"failed-to-identify-as-controller-notification" : u"<{}> failed to identify as a room operator.", # TODO: Translate into Russian
|
||||||
@ -727,6 +729,7 @@ de = {
|
|||||||
"not-all-ready" : u"Not ready: {}", # Usernames # TODO: Translate into German
|
"not-all-ready" : u"Not ready: {}", # Usernames # TODO: Translate into German
|
||||||
"all-users-ready" : u"Everyone is ready ({} users)", #Number of ready users # TODO: Translate into German
|
"all-users-ready" : u"Everyone is ready ({} users)", #Number of ready users # TODO: Translate into German
|
||||||
"ready-to-unpause-notification" : u"You are now set as ready - unpause again to unpause", # TODO: Translate into German
|
"ready-to-unpause-notification" : u"You are now set as ready - unpause again to unpause", # TODO: Translate into German
|
||||||
|
"autoplaying-notification" : u"Auto-playing in {}...", # TODO: Translate into German
|
||||||
|
|
||||||
"identifying-as-controller-notification" : u"Identifiziere als Raumleiter mit Passwort '{}'...", # TODO: find a better translation to "room operator"
|
"identifying-as-controller-notification" : u"Identifiziere als Raumleiter mit Passwort '{}'...", # TODO: find a better translation to "room operator"
|
||||||
"failed-to-identify-as-controller-notification" : u"<{}> konnte sich nicht als Raumleiter identifizieren.",
|
"failed-to-identify-as-controller-notification" : u"<{}> konnte sich nicht als Raumleiter identifizieren.",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user