Reworked userlist
For further, GUI way of presenting it.
This commit is contained in:
parent
6234b5d9f1
commit
3346372e7d
@ -548,67 +548,7 @@ class SyncplayUserlist(object):
|
||||
else:
|
||||
self.addUser(username, room, file_)
|
||||
self.userListChange()
|
||||
|
||||
def __addUserWithFileToList(self, rooms, user):
|
||||
currentPosition = utils.formatTime(user.lastPosition)
|
||||
file_key = u'\'{}\' ({}/{})'.format(user.file['name'], currentPosition, utils.formatTime(user.file['duration']))
|
||||
if (not rooms[user.room].has_key(file_key)):
|
||||
rooms[user.room][file_key] = {}
|
||||
rooms[user.room][file_key][user.username] = user
|
||||
|
||||
def __addUserWithoutFileToList(self, rooms, user):
|
||||
if (not rooms[user.room].has_key("__noFile__")):
|
||||
rooms[user.room]["__noFile__"] = {}
|
||||
rooms[user.room]["__noFile__"][user.username] = user
|
||||
|
||||
def __createListOfPeople(self, rooms):
|
||||
if(not rooms.has_key(self.currentUser.room)):
|
||||
rooms[self.currentUser.room] = {}
|
||||
for user in self._users.itervalues():
|
||||
if (not rooms.has_key(user.room)):
|
||||
rooms[user.room] = {}
|
||||
if(user.file):
|
||||
self.__addUserWithFileToList(rooms, user)
|
||||
else:
|
||||
self.__addUserWithoutFileToList(rooms, user)
|
||||
if(self.currentUser.file):
|
||||
self.__addUserWithFileToList(rooms, self.currentUser)
|
||||
else:
|
||||
self.__addUserWithoutFileToList(rooms, self.currentUser)
|
||||
return rooms
|
||||
|
||||
def __addDifferentFileMessageIfNecessary(self, user, message):
|
||||
if(self.currentUser.file):
|
||||
fileHasSameSizeAsYour = user.file['size'] == self.currentUser.file['size']
|
||||
fileHasSameNameYour = user.file['name'] == self.currentUser.file['name']
|
||||
differentFileMessage = getMessage("en", "different-filesize-notification")
|
||||
message += differentFileMessage if not fileHasSameSizeAsYour and fileHasSameNameYour else ""
|
||||
return message
|
||||
|
||||
def __displayFileWatchersInRoomList(self, key, users):
|
||||
self.ui.showListMessage(getMessage("en", "file-played-by-notification").format(key))
|
||||
for user in sorted(users.itervalues()):
|
||||
message = "<"+user.username+">"
|
||||
if(self.currentUser.username == user.username):
|
||||
message = "*" + message + "*"
|
||||
message = self.__addDifferentFileMessageIfNecessary(user, message)
|
||||
self.ui.showListMessage("\t" + message)
|
||||
|
||||
def __displayPeopleInRoomWithNoFile(self, noFileList):
|
||||
if (noFileList):
|
||||
self.ui.showListMessage(getMessage("en", "notplaying-notification"))
|
||||
for user in sorted(noFileList.itervalues()):
|
||||
self.ui.showListMessage("\t<" + user.username + ">")
|
||||
|
||||
def __displayListOfPeople(self, rooms):
|
||||
for roomName in sorted(rooms.iterkeys()):
|
||||
self.ui.showListMessage(getMessage("en", "userlist-room-notification").format(roomName))
|
||||
noFileList = rooms[roomName].pop("__noFile__") if (rooms[roomName].has_key("__noFile__")) else None
|
||||
for key in sorted(rooms[roomName].iterkeys()):
|
||||
self.__displayFileWatchersInRoomList(key, rooms[roomName][key])
|
||||
self.__displayPeopleInRoomWithNoFile(noFileList)
|
||||
self.ui.markEndOfUserlist()
|
||||
|
||||
|
||||
def areAllFilesInRoomSame(self):
|
||||
for user in self._users.itervalues():
|
||||
if(user.room == self.currentUser.room and user.file and not self.currentUser.isFileSame(user.file)):
|
||||
@ -632,10 +572,17 @@ class SyncplayUserlist(object):
|
||||
return self._roomUsersChanged
|
||||
|
||||
def showUserList(self):
|
||||
rooms = {}
|
||||
self.__createListOfPeople(rooms)
|
||||
self.__displayListOfPeople(rooms)
|
||||
|
||||
rooms = {}
|
||||
for user in self._users.itervalues():
|
||||
if(user.room not in rooms):
|
||||
rooms[user.room] = []
|
||||
rooms[user.room].append(user)
|
||||
if(self.currentUser.room not in rooms):
|
||||
rooms[self.currentUser.room] = []
|
||||
rooms[user.room].append(self.currentUser)
|
||||
|
||||
self.ui.showUserList(self.currentUser, rooms)
|
||||
|
||||
def clearList(self):
|
||||
self._users = {}
|
||||
|
||||
@ -648,8 +595,8 @@ class UiManager(object):
|
||||
if(not noPlayer): self.showOSDMessage(message)
|
||||
self.__ui.showMessage(message, noTimestamp)
|
||||
|
||||
def showListMessage(self, message):
|
||||
self.__ui.showListMessage(message)
|
||||
def showUserList(self, currentUser, rooms):
|
||||
self.__ui.showUserList(currentUser, rooms)
|
||||
|
||||
def showOSDMessage(self, message, duration = constants.OSD_DURATION):
|
||||
if(self._client._player):
|
||||
|
||||
@ -7,6 +7,7 @@ from syncplay import utils
|
||||
from syncplay import constants
|
||||
from syncplay.messages import getMessage
|
||||
import sys
|
||||
from syncplay.utils import formatTime
|
||||
|
||||
class ConsoleUI(threading.Thread):
|
||||
def __init__(self):
|
||||
@ -40,11 +41,23 @@ class ConsoleUI(threading.Thread):
|
||||
self.promptMode.wait()
|
||||
return self.PromptResult
|
||||
|
||||
def showListMessage(self, message):
|
||||
self.showMessage(message, True)
|
||||
|
||||
def markEndOfUserlist(self):
|
||||
pass
|
||||
def showUserList(self, currentUser, rooms):
|
||||
for room in rooms:
|
||||
message = u"In room '{}':".format(room)
|
||||
self.showMessage(message, True)
|
||||
for user in rooms[room]:
|
||||
username = "*<{}>*".format(user.username) if user == currentUser else "<{}>".format(user.username)
|
||||
if(user.file):
|
||||
message = u"{} is playing:".format(username)
|
||||
self.showMessage(message, True)
|
||||
message = u" File: '{}' ({})".format(user.file['name'], formatTime(user.file['duration']))
|
||||
if(currentUser.file):
|
||||
if(user.file['name'] == currentUser.file['name'] and user.file['size'] != currentUser.file['size']):
|
||||
message += " (their file size is different from yours!)"
|
||||
self.showMessage(message, True)
|
||||
else:
|
||||
message = u"{} is not playing a file".format(username)
|
||||
self.showMessage(message, True)
|
||||
|
||||
def userListChange(self):
|
||||
pass
|
||||
|
||||
@ -4,6 +4,7 @@ from syncplay import utils, constants
|
||||
import sys
|
||||
import time
|
||||
import re
|
||||
from syncplay.utils import formatTime
|
||||
|
||||
class MainWindow(QtGui.QMainWindow):
|
||||
def addClient(self, client):
|
||||
@ -26,8 +27,27 @@ class MainWindow(QtGui.QMainWindow):
|
||||
def showListMessage(self, message):
|
||||
message = unicode(message)
|
||||
message = message.replace("&", "&").replace('"', """).replace("<", "<").replace(">", ">")
|
||||
message = message.replace("\t", " "*4)
|
||||
self._listBuffer += message + "<br />"
|
||||
message = message.replace(" ", " "*4)
|
||||
self._listBuffer += message + "<br />"
|
||||
|
||||
def showUserList(self, currentUser, rooms):
|
||||
for room in rooms:
|
||||
message = u"In room '{}':".format(room)
|
||||
self.showListMessage(message)
|
||||
for user in rooms[room]:
|
||||
username = "*<{}>*".format(user.username) if user == currentUser else "<{}>".format(user.username)
|
||||
if(user.file):
|
||||
message = u"{} is playing:".format(username)
|
||||
self.showListMessage(message)
|
||||
message = u" File: '{}' ({})".format(user.file['name'], formatTime(user.file['duration']))
|
||||
if(currentUser.file):
|
||||
if(user.file['name'] == currentUser.file['name'] and user.file['size'] != currentUser.file['size']):
|
||||
message += " (their file size is different from yours!)"
|
||||
self.showListMessage(message)
|
||||
else:
|
||||
message = u"{} is not playing a file".format(username)
|
||||
self.showListMessage(message)
|
||||
self.markEndOfUserlist()
|
||||
|
||||
def markEndOfUserlist(self):
|
||||
self.resetList()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user