some todo implemented. profile filtering added, support of action messages added

This commit is contained in:
ingvar1995 2016-02-28 18:25:18 +03:00
parent 7329f5f46c
commit d7f1f15b04
3 changed files with 52 additions and 28 deletions

View file

@ -5,7 +5,7 @@ import os
from tox import Tox
from toxcore_enums_and_consts import *
from ctypes import *
from util import curr_time
from util import curr_time, log
class ProfileHelper(object):
@ -56,9 +56,8 @@ class Contact(object):
number - unique number of friend in list, widget - widget for update
"""
def __init__(self, name, status_message, number, widget):
# TODO: remove number
self._name, self._status_message, self._number = name, status_message, number
def __init__(self, name, status_message, widget):
self._name, self._status_message= name, status_message
self._status, self._widget = None, widget
widget.name.setText(name)
widget.status_message.setText(status_message)
@ -96,12 +95,20 @@ class Friend(Contact):
Friend in list of friends. Can be hidden, unread messages added
"""
def __init__(self, *args):
def __init__(self, number, *args):
super(Friend, self).__init__(*args)
self._number = number
self._new_messages = False
self._visible = True
def getVisibility(self):
return self._visible
def setVisibility(self, value):
self._widget.setVisibility(value)
self._visible = value
visibility = property(getVisibility, setVisibility)
def setMessages(self, value):
self._new_messages = value
@ -119,8 +126,7 @@ class Profile(Contact):
"""
Profile of current toxygen user. Contains friends list, tox instance
"""
# TODO: add slices
# TODO: add unicode support
# TODO: add unicode support in messages
def __init__(self, tox, widgets, widget, messages_list):
self._widget = widget
self._messages = messages_list
@ -131,9 +137,9 @@ class Profile(Contact):
data = tox.self_get_friend_list()
self.friends, num, self._active_friend = [], 0, -1
for i in data:
name = tox.friend_get_name(i) or 'Tox user' # tox.friend_get_public_key(i)
name = tox.friend_get_name(i) or tox.friend_get_public_key(i)
status_message = tox.friend_get_status_message(i)
self.friends.append(Friend(name, status_message, i, widgets[num]))
self.friends.append(Friend(i, name, status_message, widgets[num]))
num += 1
Profile._instance = self
@ -145,16 +151,25 @@ class Profile(Contact):
return self._active_friend
def setActive(self, value):
if 0 <= value < self.tox.self_get_friend_list_size():
self._active_friend = value
try:
visible_friends = filter(lambda num, friend: friend.visibility, enumerate(self.friends))
self._active_friend = visible_friends[value][0]
self._messages.clear()
# TODO: load history
except: # no friend found. ignore
log('Incorrect friend value: ' + str(value))
active_friend = property(getActive, setActive)
def getActiveFriendData(self):
friend = self.friends[self._active_friend]
return friend.name, friend.status_message
def getActiveNumber(self):
return self.friends[self._active_friend].getNumber()
return self.friends[self._active_friend].number
def getActiveName(self):
return self.friends[self._active_friend].getName()
return self.friends[self._active_friend].name
def isActiveOnline(self):
if not self._active_friend + 1: # no active friend
@ -162,16 +177,18 @@ class Profile(Contact):
else:
# TODO: callbacks!
return True
status = self.friends[self._active_friend].getStatus()
status = self.friends[self._active_friend].status
return status is not None
def filtration(self, show_online=True, filter_str=''):
for friend in self.friends:
friend.visibility = (friend.status is not None or not show_online) and (filter_str in friend.name)
def newMessage(self, id, message_type, message):
# TODO: add support of action (/me) messages
if id == self._active_friend: # add message to list
user_name = Profile.getInstance().getActiveName()
item = mainscreen.MessageItem(message, curr_time(), user_name)
item = mainscreen.MessageItem(message, curr_time(), user_name, message_type)
elem = QtGui.QListWidgetItem(self._messages)
print item.sizeHint()
elem.setSizeHint(QtCore.QSize(500, 100))
self._messages.addItem(elem)
self._messages.setItemWidget(elem, item)
@ -183,8 +200,13 @@ class Profile(Contact):
def sendMessage(self, text):
if self.isActiveOnline() and text:
self.tox.friend_send_message(self._active_friend, TOX_MESSAGE_TYPE['NORMAL'], text)
item = mainscreen.MessageItem(text, curr_time(), self._name)
if text.startswith('/me'):
message_type = TOX_MESSAGE_TYPE['ACTION']
text = text[3:]
else:
message_type = TOX_MESSAGE_TYPE['NORMAL']
self.tox.friend_send_message(self._active_friend, message_type, text)
item = mainscreen.MessageItem(text, curr_time(), self._name, message_type)
elem = QtGui.QListWidgetItem(self._messages)
elem.setSizeHint(QtCore.QSize(500, 100))
self._messages.addItem(elem)