Reworked userlist
For further, GUI way of presenting it.
This commit is contained in:
parent
6234b5d9f1
commit
3346372e7d
@ -549,66 +549,6 @@ class SyncplayUserlist(object):
|
|||||||
self.addUser(username, room, file_)
|
self.addUser(username, room, file_)
|
||||||
self.userListChange()
|
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):
|
def areAllFilesInRoomSame(self):
|
||||||
for user in self._users.itervalues():
|
for user in self._users.itervalues():
|
||||||
if(user.room == self.currentUser.room and user.file and not self.currentUser.isFileSame(user.file)):
|
if(user.room == self.currentUser.room and user.file and not self.currentUser.isFileSame(user.file)):
|
||||||
@ -633,8 +573,15 @@ class SyncplayUserlist(object):
|
|||||||
|
|
||||||
def showUserList(self):
|
def showUserList(self):
|
||||||
rooms = {}
|
rooms = {}
|
||||||
self.__createListOfPeople(rooms)
|
for user in self._users.itervalues():
|
||||||
self.__displayListOfPeople(rooms)
|
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):
|
def clearList(self):
|
||||||
self._users = {}
|
self._users = {}
|
||||||
@ -648,8 +595,8 @@ class UiManager(object):
|
|||||||
if(not noPlayer): self.showOSDMessage(message)
|
if(not noPlayer): self.showOSDMessage(message)
|
||||||
self.__ui.showMessage(message, noTimestamp)
|
self.__ui.showMessage(message, noTimestamp)
|
||||||
|
|
||||||
def showListMessage(self, message):
|
def showUserList(self, currentUser, rooms):
|
||||||
self.__ui.showListMessage(message)
|
self.__ui.showUserList(currentUser, rooms)
|
||||||
|
|
||||||
def showOSDMessage(self, message, duration = constants.OSD_DURATION):
|
def showOSDMessage(self, message, duration = constants.OSD_DURATION):
|
||||||
if(self._client._player):
|
if(self._client._player):
|
||||||
|
|||||||
@ -7,6 +7,7 @@ from syncplay import utils
|
|||||||
from syncplay import constants
|
from syncplay import constants
|
||||||
from syncplay.messages import getMessage
|
from syncplay.messages import getMessage
|
||||||
import sys
|
import sys
|
||||||
|
from syncplay.utils import formatTime
|
||||||
|
|
||||||
class ConsoleUI(threading.Thread):
|
class ConsoleUI(threading.Thread):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -40,11 +41,23 @@ class ConsoleUI(threading.Thread):
|
|||||||
self.promptMode.wait()
|
self.promptMode.wait()
|
||||||
return self.PromptResult
|
return self.PromptResult
|
||||||
|
|
||||||
def showListMessage(self, message):
|
def showUserList(self, currentUser, rooms):
|
||||||
self.showMessage(message, True)
|
for room in rooms:
|
||||||
|
message = u"In room '{}':".format(room)
|
||||||
def markEndOfUserlist(self):
|
self.showMessage(message, True)
|
||||||
pass
|
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):
|
def userListChange(self):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@ -4,6 +4,7 @@ from syncplay import utils, constants
|
|||||||
import sys
|
import sys
|
||||||
import time
|
import time
|
||||||
import re
|
import re
|
||||||
|
from syncplay.utils import formatTime
|
||||||
|
|
||||||
class MainWindow(QtGui.QMainWindow):
|
class MainWindow(QtGui.QMainWindow):
|
||||||
def addClient(self, client):
|
def addClient(self, client):
|
||||||
@ -26,9 +27,28 @@ class MainWindow(QtGui.QMainWindow):
|
|||||||
def showListMessage(self, message):
|
def showListMessage(self, message):
|
||||||
message = unicode(message)
|
message = unicode(message)
|
||||||
message = message.replace("&", "&").replace('"', """).replace("<", "<").replace(">", ">")
|
message = message.replace("&", "&").replace('"', """).replace("<", "<").replace(">", ">")
|
||||||
message = message.replace("\t", " "*4)
|
message = message.replace(" ", " "*4)
|
||||||
self._listBuffer += message + "<br />"
|
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):
|
def markEndOfUserlist(self):
|
||||||
self.resetList()
|
self.resetList()
|
||||||
self.newListItem(self._listBuffer)
|
self.newListItem(self._listBuffer)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user