Reworked userlist

For further, GUI way of presenting it.
This commit is contained in:
Uriziel 2013-06-11 21:20:19 +02:00
parent 6234b5d9f1
commit 3346372e7d
3 changed files with 54 additions and 74 deletions

View File

@ -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):

View File

@ -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

View File

@ -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("&", "&amp;").replace('"', "&quot;").replace("<", "&lt;").replace(">", "&gt;")
message = message.replace("\t", "&nbsp;"*4)
self._listBuffer += message + "<br />"
message = message.replace(" ", "&nbsp;"*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()