Initial readiness GUI code + none state (back compat_ + 1.3.1 ver-up/ver-check
This commit is contained in:
parent
db91c348a4
commit
383d0b65c2
@ -1,3 +1,3 @@
|
||||
version = '1.3.0'
|
||||
milestone = 'Akki'
|
||||
version = '1.3.1'
|
||||
milestone = 'Chami'
|
||||
projectURL = 'http://syncplay.pl/'
|
||||
|
||||
@ -402,6 +402,10 @@ 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(False)
|
||||
self.reIdentifyAsController()
|
||||
|
||||
def getRoom(self):
|
||||
@ -459,17 +463,6 @@ class SyncplayClient(object):
|
||||
if promptForAction:
|
||||
self.ui.promptFor(getMessage("enter-to-exit-prompt"))
|
||||
|
||||
def toggleReady(self):
|
||||
self._protocol.setReady(not self.userlist.currentUser.isReady())
|
||||
|
||||
def setReady(self, username, isReady):
|
||||
self.userlist.setReady(username, isReady)
|
||||
if isReady:
|
||||
message = "<{}> I'm ready".format(username)
|
||||
else:
|
||||
message = "<{}> I'm not ready".format(username)
|
||||
self.ui.showMessage(message)
|
||||
|
||||
def requireMinServerVersion(minVersion):
|
||||
def requireMinVersionDecorator(f):
|
||||
@wraps(f)
|
||||
@ -481,6 +474,23 @@ class SyncplayClient(object):
|
||||
return wrapper
|
||||
return requireMinVersionDecorator
|
||||
|
||||
@requireMinServerVersion(constants.USER_READY_MIN_VERSION)
|
||||
def toggleReady(self):
|
||||
self._protocol.setReady(not self.userlist.currentUser.isReady())
|
||||
|
||||
def setReady(self, username, isReady):
|
||||
oldReadyState = self.userlist.isReady(username)
|
||||
if oldReadyState is None:
|
||||
oldReadyState = False
|
||||
self.userlist.setReady(username, isReady)
|
||||
self.ui.userListChange()
|
||||
if oldReadyState != isReady:
|
||||
if isReady:
|
||||
message = "<{}> I'm ready".format(username)
|
||||
else:
|
||||
message = "<{}> I'm not ready".format(username)
|
||||
self.ui.showMessage(message)
|
||||
|
||||
@requireMinServerVersion(constants.CONTROLLED_ROOMS_MIN_VERSION)
|
||||
def createControlledRoom(self, roomName):
|
||||
controlPassword = utils.RandomStringGenerator.generate_room_password()
|
||||
@ -577,7 +587,7 @@ class SyncplayClient(object):
|
||||
|
||||
class SyncplayUser(object):
|
||||
def __init__(self, username=None, room=None, file_=None):
|
||||
self.ready = False
|
||||
self.ready = None
|
||||
self.username = username
|
||||
self.room = room
|
||||
self.file = file_
|
||||
@ -765,6 +775,15 @@ class SyncplayUserlist(object):
|
||||
return True
|
||||
return False
|
||||
|
||||
def isReady(self, username):
|
||||
if self.currentUser.username == username:
|
||||
return self.currentUser.isReady()
|
||||
|
||||
for user in self._users.itervalues():
|
||||
if user.username == username:
|
||||
return user.isReady()
|
||||
return False
|
||||
|
||||
def setReady(self, username, isReady):
|
||||
if self.currentUser.username == username:
|
||||
self.currentUser.setReady(isReady)
|
||||
|
||||
@ -63,6 +63,7 @@ MPC_MIN_VER = "1.6.4"
|
||||
VLC_MIN_VERSION = "2.0.0"
|
||||
VLC_INTERFACE_MIN_VERSION = "0.2.1"
|
||||
CONTROLLED_ROOMS_MIN_VERSION = "1.3.0"
|
||||
USER_READY_MIN_VERSION = "1.3.1"
|
||||
MPC_PATHS = [
|
||||
r"c:\program files (x86)\mpc-hc\mpc-hc.exe",
|
||||
r"c:\program files\mpc-hc\mpc-hc.exe",
|
||||
|
||||
@ -161,7 +161,7 @@ class SyncClientProtocol(JSONCommandProtocol):
|
||||
userName = user[0]
|
||||
file_ = user[1]['file'] if user[1]['file'] <> {} else None
|
||||
isController = user[1]['controller'] if 'controller' in user[1] else False
|
||||
isReady = user[1]['isReady'] if 'isReady' in user[1] else False
|
||||
isReady = user[1]['isReady'] if 'isReady' in user[1] else None
|
||||
self._client.userlist.addUser(userName, roomName, file_, noMessage=True, isController=isController, isReady=isReady)
|
||||
self._client.userlist.showUserList()
|
||||
|
||||
|
||||
@ -302,7 +302,7 @@ class ControlledRoom(Room):
|
||||
|
||||
class Watcher(object):
|
||||
def __init__(self, server, connector, name):
|
||||
self._ready = False
|
||||
self._ready = None
|
||||
self._server = server
|
||||
self._connector = connector
|
||||
self._name = name
|
||||
|
||||
@ -125,7 +125,13 @@ class MainWindow(QtGui.QMainWindow):
|
||||
for user in rooms[room]:
|
||||
useritem = QtGui.QStandardItem(user.username)
|
||||
isController = user.isController()
|
||||
sameRoom = room == currentUser.room
|
||||
if sameRoom:
|
||||
isReady = user.isReady()
|
||||
else:
|
||||
isReady = None
|
||||
useritem.setData(isController, Qt.UserRole + constants.USERITEM_CONTROLLER_ROLE)
|
||||
useritem.setData(isReady, Qt.UserRole + constants.USERITEM_READY_ROLE)
|
||||
if user.file:
|
||||
filesizeitem = QtGui.QStandardItem(formatSize(user.file['size']))
|
||||
filedurationitem = QtGui.QStandardItem("({})".format(formatTime(user.file['duration'])))
|
||||
@ -134,7 +140,6 @@ class MainWindow(QtGui.QMainWindow):
|
||||
sameName = sameFilename(user.file['name'], currentUser.file['name'])
|
||||
sameSize = sameFilesize(user.file['size'], currentUser.file['size'])
|
||||
sameDuration = sameFileduration(user.file['duration'], currentUser.file['duration'])
|
||||
sameRoom = room == currentUser.room
|
||||
underlinefont = QtGui.QFont()
|
||||
underlinefont.setUnderline(True)
|
||||
if sameRoom:
|
||||
@ -446,6 +451,15 @@ class MainWindow(QtGui.QMainWindow):
|
||||
window.listLayout.setContentsMargins(0, 0, 0, 0)
|
||||
window.listLayout.addWidget(window.listlabel)
|
||||
window.listLayout.addWidget(window.listTreeView)
|
||||
|
||||
window.readyCheckbox = QtGui.QCheckBox()
|
||||
readyFont = QtGui.QFont()
|
||||
readyFont.setWeight(QtGui.QFont.Bold)
|
||||
window.readyCheckbox.setText("I'm ready to watch!")
|
||||
window.readyCheckbox.setFont(readyFont)
|
||||
window.readyCheckbox.toggled.connect(self.changeReadyState)
|
||||
window.listLayout.addWidget(window.readyCheckbox, Qt.AlignRight)
|
||||
|
||||
window.contactLabel = QtGui.QLabel()
|
||||
window.contactLabel.setWordWrap(True)
|
||||
window.contactLabel.setFrameStyle(QtGui.QFrame.Box | QtGui.QFrame.Sunken)
|
||||
@ -606,6 +620,10 @@ class MainWindow(QtGui.QMainWindow):
|
||||
self.listbox.insertHtml(item)
|
||||
self.listbox.moveCursor(QtGui.QTextCursor.End)
|
||||
|
||||
def changeReadyState(self):
|
||||
if self.readyCheckbox.isChecked() != self._syncplayClient.userlist.currentUser.isReady():
|
||||
self._syncplayClient.toggleReady()
|
||||
|
||||
def dragEnterEvent(self, event):
|
||||
data = event.mimeData()
|
||||
urls = data.urls()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user